commit the venv update (django and dependancies) in the good head
authorcavaliet
Tue, 17 Jun 2014 10:25:33 +0200
changeset 271 8f77cf71ab02
parent 265 73f19fa4f997
child 272 1c774f7a0341
commit the venv update (django and dependancies) in the good head
.hgignore
.settings/org.eclipse.core.resources.prefs
src/hdabo/.htaccess.mod_python.tmpl
src/hdabo/.htaccess.mod_wsgi.tmpl
src/hdabo/__init__.py
src/hdabo/admin.py
src/hdabo/config.py.tmpl
src/hdabo/context_processors.py
src/hdabo/django_wsgi.py
src/hdabo/fixtures/.keepme
src/hdabo/fixtures/datasheet_10.yaml.bz2
src/hdabo/fixtures/datasheet_347.yaml.bz2
src/hdabo/fixtures/datasheet_all.yaml.bz2
src/hdabo/fixtures/initial_data.yaml.bz2
src/hdabo/forms.py
src/hdabo/management/__init__.py
src/hdabo/management/commands/__init__.py
src/hdabo/management/commands/clean_tags.py
src/hdabo/management/commands/diff_csv.py
src/hdabo/management/commands/import_csv.py
src/hdabo/management/commands/import_tag_popularity.py
src/hdabo/management/commands/order_tags.py
src/hdabo/management/commands/query_wikipedia.py
src/hdabo/management/utils.py
src/hdabo/migrations/0001_initial.py
src/hdabo/migrations/0002_backport_hdabo_sf.py
src/hdabo/migrations/0003_update_redirection.py
src/hdabo/migrations/0004_index_tag.py
src/hdabo/migrations/0005_auto__chg_field_datasheet_organisation.py
src/hdabo/migrations/0006_auto__add_user__chg_field_datasheet_validator.py
src/hdabo/migrations/__init__.py
src/hdabo/models.py
src/hdabo/modwsgi.wsgi
src/hdabo/search/__init__.py
src/hdabo/search/french_whoosh_backend.py
src/hdabo/search/sites.py
src/hdabo/search_indexes.py
src/hdabo/settings.py
src/hdabo/static/.keepme
src/hdabo/static/hdabo/.keepme
src/hdabo/static/hdabo/css/.keepme
src/hdabo/static/hdabo/css/nyroModal.css
src/hdabo/static/hdabo/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
src/hdabo/static/hdabo/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
src/hdabo/static/hdabo/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
src/hdabo/static/hdabo/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png
src/hdabo/static/hdabo/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png
src/hdabo/static/hdabo/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
src/hdabo/static/hdabo/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
src/hdabo/static/hdabo/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
src/hdabo/static/hdabo/css/smoothness/images/ui-icons_222222_256x240.png
src/hdabo/static/hdabo/css/smoothness/images/ui-icons_2e83ff_256x240.png
src/hdabo/static/hdabo/css/smoothness/images/ui-icons_454545_256x240.png
src/hdabo/static/hdabo/css/smoothness/images/ui-icons_888888_256x240.png
src/hdabo/static/hdabo/css/smoothness/images/ui-icons_cd0a0a_256x240.png
src/hdabo/static/hdabo/css/smoothness/jquery-ui-1.8.13.custom.css
src/hdabo/static/hdabo/css/style.css
src/hdabo/static/hdabo/img/.keepme
src/hdabo/static/hdabo/img/arrow_green_right.png
src/hdabo/static/hdabo/img/arrow_right.png
src/hdabo/static/hdabo/img/arrow_up_down.png
src/hdabo/static/hdabo/img/clock_arrow.png
src/hdabo/static/hdabo/img/favicon.ico
src/hdabo/static/hdabo/img/indicator.gif
src/hdabo/static/hdabo/img/logo_IRI_footer.png
src/hdabo/static/hdabo/img/red_cross.png
src/hdabo/static/hdabo/img/sort-asc.png
src/hdabo/static/hdabo/img/sort-desc.png
src/hdabo/static/hdabo/img/sort-descending.png
src/hdabo/static/hdabo/img/tag_remove.png
src/hdabo/static/hdabo/img/wikipedia_search.png
src/hdabo/static/hdabo/js/.keepme
src/hdabo/static/hdabo/js/hdabo.js
src/hdabo/static/hdabo/js/jquery-ui.min.js
src/hdabo/static/hdabo/js/jquery.jeditable.js
src/hdabo/static/hdabo/js/jquery.js
src/hdabo/static/hdabo/js/jquery.min.js
src/hdabo/static/hdabo/js/jquery.nyroModal-ie6.min.js
src/hdabo/static/hdabo/js/jquery.nyroModal.min.js
src/hdabo/static/hdabo/js/jquery.qtip.min.js
src/hdabo/static/hdabo/js/jquery.tablednd_0_5.js
src/hdabo/static/hdabo/js/jquery.textchange.min.js
src/hdabo/static/hdabo/js/jquery.tools.min.js
src/hdabo/static/hdabo/js/jquery.validate.js
src/hdabo/templates/all_tags.html
src/hdabo/templates/generic_sheet.html
src/hdabo/templates/hdabo_base.html
src/hdabo/templates/list_for_orga.html
src/hdabo/templates/organisation_list.html
src/hdabo/templates/partial/all_tags_table.html
src/hdabo/templates/partial/one_sheet.html
src/hdabo/templates/partial/tag_table.html
src/hdabo/templates/registration/login.html
src/hdabo/templates/search/indexes/hdabo/datasheet_text.txt
src/hdabo/templates/search/search.html
src/hdabo/tests/__init__.py
src/hdabo/tests/models.py
src/hdabo/urls.py
src/hdabo/utils.py
src/hdabo/views.py
src/hdabo/wp_utils.py
src/hdalab/.htaccess.mod_wsgi.tmpl
src/hdalab/README.txt
src/hdalab/__init__.py
src/hdalab/config.py.tmpl
src/hdalab/django_wsgi.py
src/hdalab/locale/de/LC_MESSAGES/django.mo
src/hdalab/locale/de/LC_MESSAGES/django.po
src/hdalab/locale/de/LC_MESSAGES/djangojs.mo
src/hdalab/locale/de/LC_MESSAGES/djangojs.po
src/hdalab/locale/en/LC_MESSAGES/django.mo
src/hdalab/locale/en/LC_MESSAGES/django.po
src/hdalab/locale/en/LC_MESSAGES/djangojs.mo
src/hdalab/locale/en/LC_MESSAGES/djangojs.po
src/hdalab/locale/es/LC_MESSAGES/django.mo
src/hdalab/locale/es/LC_MESSAGES/django.po
src/hdalab/locale/es/LC_MESSAGES/djangojs.mo
src/hdalab/locale/es/LC_MESSAGES/djangojs.po
src/hdalab/locale/fr/LC_MESSAGES/django.mo
src/hdalab/locale/fr/LC_MESSAGES/django.po
src/hdalab/locale/fr/LC_MESSAGES/djangojs.mo
src/hdalab/locale/fr/LC_MESSAGES/djangojs.po
src/hdalab/locale/it/LC_MESSAGES/django.mo
src/hdalab/locale/it/LC_MESSAGES/django.po
src/hdalab/locale/it/LC_MESSAGES/djangojs.mo
src/hdalab/locale/it/LC_MESSAGES/djangojs.po
src/hdalab/locale/ja/LC_MESSAGES/django.mo
src/hdalab/locale/ja/LC_MESSAGES/django.po
src/hdalab/locale/ja/LC_MESSAGES/djangojs.mo
src/hdalab/locale/ja/LC_MESSAGES/djangojs.po
src/hdalab/locale/zh-tw/LC_MESSAGES/django.mo
src/hdalab/locale/zh-tw/LC_MESSAGES/django.po
src/hdalab/locale/zh-tw/LC_MESSAGES/djangojs.mo
src/hdalab/locale/zh-tw/LC_MESSAGES/djangojs.po
src/hdalab/manage.py
src/hdalab/management/__init__.py
src/hdalab/management/commands/__init__.py
src/hdalab/management/commands/export_tags_csv.py
src/hdalab/management/commands/export_wpcategory_csv.py
src/hdalab/management/commands/fill_tag_years.py
src/hdalab/management/commands/geojson_transform.py
src/hdalab/management/commands/import_hda_insee_csv.py
src/hdalab/management/commands/import_hdabo_db.py
src/hdalab/management/commands/import_insee_csv.py
src/hdalab/management/commands/query_category_inclusion.py
src/hdalab/management/commands/query_dbpedia.py
src/hdalab/management/commands/query_geo_inclusion.py
src/hdalab/management/commands/query_wikipedia_category.py
src/hdalab/management/utils.py
src/hdalab/migrations/0001_initial.py
src/hdalab/migrations/0002_dataviz.py
src/hdalab/migrations/0003_hdasession.py
src/hdalab/migrations/0004_remove_dbpedia_unicity.py
src/hdalab/migrations/0005_rename_end_year.py
src/hdalab/migrations/0006_dbpedia_fields_one_to_one.py
src/hdalab/migrations/0007_geographic_inclusion.py
src/hdalab/migrations/0008_datasheet_insee.py
src/hdalab/migrations/0009_i18n.py
src/hdalab/migrations/0010_categoryinclusion.py
src/hdalab/migrations/0011_auto__add_field_dbpediafieldstranslation_is_label_translated__add_fiel.py
src/hdalab/migrations/__init__.py
src/hdalab/models/__init__.py
src/hdalab/models/categories.py
src/hdalab/models/dataviz.py
src/hdalab/modwsgi.wsgi
src/hdalab/settings.py
src/hdalab/static/hdalab/css/DroidSerif-Bold.ttf
src/hdalab/static/hdalab/css/DroidSerif-BoldItalic.ttf
src/hdalab/static/hdalab/css/DroidSerif-Italic.ttf
src/hdalab/static/hdalab/css/DroidSerif-Regular.ttf
src/hdalab/static/hdalab/css/OpenSans-Bold.ttf
src/hdalab/static/hdalab/css/OpenSans-BoldItalic.ttf
src/hdalab/static/hdalab/css/OpenSans-Italic.ttf
src/hdalab/static/hdalab/css/OpenSans-Regular.ttf
src/hdalab/static/hdalab/css/cattree.css
src/hdalab/static/hdalab/css/common.css
src/hdalab/static/hdalab/css/completion.css
src/hdalab/static/hdalab/css/facettes.css
src/hdalab/static/hdalab/css/index.css
src/hdalab/static/hdalab/css/notice.css
src/hdalab/static/hdalab/css/thesaurus.css
src/hdalab/static/hdalab/css/trees.css
src/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png
src/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png
src/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png
src/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png
src/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png
src/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png
src/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png
src/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
src/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
src/hdalab/static/hdalab/css/ui-lightness/images/ui-icons_222222_256x240.png
src/hdalab/static/hdalab/css/ui-lightness/images/ui-icons_228ef1_256x240.png
src/hdalab/static/hdalab/css/ui-lightness/images/ui-icons_ef8c08_256x240.png
src/hdalab/static/hdalab/css/ui-lightness/images/ui-icons_ffd27a_256x240.png
src/hdalab/static/hdalab/css/ui-lightness/images/ui-icons_ffffff_256x240.png
src/hdalab/static/hdalab/css/ui-lightness/jquery-ui-1.8.16.custom.css
src/hdalab/static/hdalab/img/bgdfooter.png
src/hdalab/static/hdalab/img/bgdhdalab.png
src/hdalab/static/hdalab/img/bgmap.png
src/hdalab/static/hdalab/img/categories-thumb.jpg
src/hdalab/static/hdalab/img/facettes-thumb.jpg
src/hdalab/static/hdalab/img/favicon.ico
src/hdalab/static/hdalab/img/flag_de.png
src/hdalab/static/hdalab/img/flag_en.png
src/hdalab/static/hdalab/img/flag_es.png
src/hdalab/static/hdalab/img/flag_fr.png
src/hdalab/static/hdalab/img/flag_it.png
src/hdalab/static/hdalab/img/flag_ja.png
src/hdalab/static/hdalab/img/flag_zh-tw.png
src/hdalab/static/hdalab/img/loader.gif
src/hdalab/static/hdalab/img/logo_iri.png
src/hdalab/static/hdalab/img/logo_iri_blanc.png
src/hdalab/static/hdalab/img/logo_mcc.png
src/hdalab/static/hdalab/img/logo_mcc_blanc.png
src/hdalab/static/hdalab/img/small-loader.gif
src/hdalab/static/hdalab/img/thesaurus-thumb.jpg
src/hdalab/static/hdalab/js/cattree.js
src/hdalab/static/hdalab/js/gomina.js
src/hdalab/static/hdalab/js/notice.js
src/hdalab/static/hdalab/js/thesaurus.js
src/hdalab/static/hdalab/js/trees.js
src/hdalab/static/hdalab/lib/ZeroClipboard.js
src/hdalab/static/hdalab/lib/ZeroClipboard.swf
src/hdalab/static/hdalab/lib/countries.geo.json
src/hdalab/static/hdalab/lib/jquery-1.7.1.min.js
src/hdalab/static/hdalab/lib/jquery-ui-1.8.16.custom.min.js
src/hdalab/static/hdalab/lib/leaflet/images/layers.png
src/hdalab/static/hdalab/lib/leaflet/images/marker-shadow.png
src/hdalab/static/hdalab/lib/leaflet/images/marker.png
src/hdalab/static/hdalab/lib/leaflet/images/popup-close.png
src/hdalab/static/hdalab/lib/leaflet/images/zoom-in.png
src/hdalab/static/hdalab/lib/leaflet/images/zoom-out.png
src/hdalab/static/hdalab/lib/leaflet/leaflet-src.js
src/hdalab/static/hdalab/lib/leaflet/leaflet.css
src/hdalab/static/hdalab/lib/leaflet/leaflet.ie.css
src/hdalab/static/hdalab/lib/leaflet/leaflet.js
src/hdalab/static/hdalab/lib/mustache.js
src/hdalab/static/hdalab/lib/raphael-min.js
src/hdalab/static/hdalab/lib/underscore-min.js
src/hdalab/templates/base.html
src/hdalab/templates/categories.html
src/hdalab/templates/facettes.html
src/hdalab/templates/google_analytics/analytics_template.html
src/hdalab/templates/google_analytics/async_analytics_template.html
src/hdalab/templates/index.html
src/hdalab/templates/notice.html
src/hdalab/templates/thesaurus.html
src/hdalab/templatetags/__init__.py
src/hdalab/templatetags/analytics.py
src/hdalab/urls.py
src/hdalab/utils.py
src/hdalab/views/__init__.py
src/hdalab/views/ajax.py
src/hdalab/views/pages.py
src/manage.py
virtualenv/res/lib/lib_create_env.py
virtualenv/res/src/Django-1.6.5.tar.gz
virtualenv/res/src/django-extensions-1.3.7.tar.gz
virtualenv/res/src/django-haystack-2.1.0.tar.gz
virtualenv/res/src/lxml-3.2.1.tar.bz2
virtualenv/res/src/psycopg2-2.5.3.tar.gz
virtualenv/res/src/pyelasticsearch-0.6.1.tar.gz
virtualenv/res/src/requests-2.3.0.tar.gz
virtualenv/res/src/south-0.8.4.tar.gz
virtualenv/res/src/whoosh-2.5.7.tar.gz
virtualenv/web/res/res_create_env.py
web/hdabo/.htaccess.mod_python.tmpl
web/hdabo/.htaccess.mod_wsgi.tmpl
web/hdabo/__init__.py
web/hdabo/admin.py
web/hdabo/config.py.tmpl
web/hdabo/context_processors.py
web/hdabo/django_wsgi.py
web/hdabo/fixtures/.keepme
web/hdabo/fixtures/datasheet_10.yaml.bz2
web/hdabo/fixtures/datasheet_347.yaml.bz2
web/hdabo/fixtures/datasheet_all.yaml.bz2
web/hdabo/fixtures/initial_data.yaml.bz2
web/hdabo/forms.py
web/hdabo/manage.py
web/hdabo/management/__init__.py
web/hdabo/management/commands/__init__.py
web/hdabo/management/commands/clean_tags.py
web/hdabo/management/commands/diff_csv.py
web/hdabo/management/commands/import_csv.py
web/hdabo/management/commands/import_tag_popularity.py
web/hdabo/management/commands/order_tags.py
web/hdabo/management/commands/query_wikipedia.py
web/hdabo/management/utils.py
web/hdabo/migrations/0001_initial.py
web/hdabo/migrations/0002_backport_hdabo_sf.py
web/hdabo/migrations/0003_update_redirection.py
web/hdabo/migrations/0004_index_tag.py
web/hdabo/migrations/0005_auto__chg_field_datasheet_organisation.py
web/hdabo/migrations/__init__.py
web/hdabo/models.py
web/hdabo/modwsgi.wsgi
web/hdabo/search/__init__.py
web/hdabo/search/french_whoosh_backend.py
web/hdabo/search/sites.py
web/hdabo/search_indexes.py
web/hdabo/settings.py
web/hdabo/static/.keepme
web/hdabo/static/hdabo/.keepme
web/hdabo/static/hdabo/css/.keepme
web/hdabo/static/hdabo/css/nyroModal.css
web/hdabo/static/hdabo/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
web/hdabo/static/hdabo/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
web/hdabo/static/hdabo/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
web/hdabo/static/hdabo/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png
web/hdabo/static/hdabo/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png
web/hdabo/static/hdabo/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
web/hdabo/static/hdabo/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
web/hdabo/static/hdabo/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
web/hdabo/static/hdabo/css/smoothness/images/ui-icons_222222_256x240.png
web/hdabo/static/hdabo/css/smoothness/images/ui-icons_2e83ff_256x240.png
web/hdabo/static/hdabo/css/smoothness/images/ui-icons_454545_256x240.png
web/hdabo/static/hdabo/css/smoothness/images/ui-icons_888888_256x240.png
web/hdabo/static/hdabo/css/smoothness/images/ui-icons_cd0a0a_256x240.png
web/hdabo/static/hdabo/css/smoothness/jquery-ui-1.8.13.custom.css
web/hdabo/static/hdabo/css/style.css
web/hdabo/static/hdabo/img/.keepme
web/hdabo/static/hdabo/img/arrow_green_right.png
web/hdabo/static/hdabo/img/arrow_right.png
web/hdabo/static/hdabo/img/arrow_up_down.png
web/hdabo/static/hdabo/img/clock_arrow.png
web/hdabo/static/hdabo/img/favicon.ico
web/hdabo/static/hdabo/img/indicator.gif
web/hdabo/static/hdabo/img/logo_IRI_footer.png
web/hdabo/static/hdabo/img/red_cross.png
web/hdabo/static/hdabo/img/sort-asc.png
web/hdabo/static/hdabo/img/sort-desc.png
web/hdabo/static/hdabo/img/sort-descending.png
web/hdabo/static/hdabo/img/tag_remove.png
web/hdabo/static/hdabo/img/wikipedia_search.png
web/hdabo/static/hdabo/js/.keepme
web/hdabo/static/hdabo/js/hdabo.js
web/hdabo/static/hdabo/js/jquery-ui.min.js
web/hdabo/static/hdabo/js/jquery.jeditable.js
web/hdabo/static/hdabo/js/jquery.js
web/hdabo/static/hdabo/js/jquery.min.js
web/hdabo/static/hdabo/js/jquery.nyroModal-ie6.min.js
web/hdabo/static/hdabo/js/jquery.nyroModal.min.js
web/hdabo/static/hdabo/js/jquery.qtip.min.js
web/hdabo/static/hdabo/js/jquery.tablednd_0_5.js
web/hdabo/static/hdabo/js/jquery.textchange.min.js
web/hdabo/static/hdabo/js/jquery.tools.min.js
web/hdabo/static/hdabo/js/jquery.validate.js
web/hdabo/templates/all_tags.html
web/hdabo/templates/generic_sheet.html
web/hdabo/templates/hdabo_base.html
web/hdabo/templates/list_for_orga.html
web/hdabo/templates/organisation_list.html
web/hdabo/templates/partial/all_tags_table.html
web/hdabo/templates/partial/one_sheet.html
web/hdabo/templates/partial/tag_table.html
web/hdabo/templates/registration/login.html
web/hdabo/templates/search/indexes/hdabo/datasheet_text.txt
web/hdabo/templates/search/search.html
web/hdabo/tests/__init__.py
web/hdabo/tests/models.py
web/hdabo/urls.py
web/hdabo/utils.py
web/hdabo/views.py
web/hdabo/wp_utils.py
web/hdalab/.htaccess.mod_wsgi.tmpl
web/hdalab/README.txt
web/hdalab/__init__.py
web/hdalab/config.py.tmpl
web/hdalab/django_wsgi.py
web/hdalab/locale/de/LC_MESSAGES/django.mo
web/hdalab/locale/de/LC_MESSAGES/django.po
web/hdalab/locale/de/LC_MESSAGES/djangojs.mo
web/hdalab/locale/de/LC_MESSAGES/djangojs.po
web/hdalab/locale/en/LC_MESSAGES/django.mo
web/hdalab/locale/en/LC_MESSAGES/django.po
web/hdalab/locale/en/LC_MESSAGES/djangojs.mo
web/hdalab/locale/en/LC_MESSAGES/djangojs.po
web/hdalab/locale/es/LC_MESSAGES/django.mo
web/hdalab/locale/es/LC_MESSAGES/django.po
web/hdalab/locale/es/LC_MESSAGES/djangojs.mo
web/hdalab/locale/es/LC_MESSAGES/djangojs.po
web/hdalab/locale/fr/LC_MESSAGES/django.mo
web/hdalab/locale/fr/LC_MESSAGES/django.po
web/hdalab/locale/fr/LC_MESSAGES/djangojs.mo
web/hdalab/locale/fr/LC_MESSAGES/djangojs.po
web/hdalab/locale/it/LC_MESSAGES/django.mo
web/hdalab/locale/it/LC_MESSAGES/django.po
web/hdalab/locale/it/LC_MESSAGES/djangojs.mo
web/hdalab/locale/it/LC_MESSAGES/djangojs.po
web/hdalab/locale/ja/LC_MESSAGES/django.mo
web/hdalab/locale/ja/LC_MESSAGES/django.po
web/hdalab/locale/ja/LC_MESSAGES/djangojs.mo
web/hdalab/locale/ja/LC_MESSAGES/djangojs.po
web/hdalab/locale/zh-tw/LC_MESSAGES/django.mo
web/hdalab/locale/zh-tw/LC_MESSAGES/django.po
web/hdalab/locale/zh-tw/LC_MESSAGES/djangojs.mo
web/hdalab/locale/zh-tw/LC_MESSAGES/djangojs.po
web/hdalab/manage.py
web/hdalab/management/__init__.py
web/hdalab/management/commands/__init__.py
web/hdalab/management/commands/export_tags_csv.py
web/hdalab/management/commands/export_wpcategory_csv.py
web/hdalab/management/commands/fill_tag_years.py
web/hdalab/management/commands/geojson_transform.py
web/hdalab/management/commands/import_hda_insee_csv.py
web/hdalab/management/commands/import_hdabo_db.py
web/hdalab/management/commands/import_insee_csv.py
web/hdalab/management/commands/query_category_inclusion.py
web/hdalab/management/commands/query_dbpedia.py
web/hdalab/management/commands/query_geo_inclusion.py
web/hdalab/management/commands/query_wikipedia_category.py
web/hdalab/management/utils.py
web/hdalab/migrations/0001_initial.py
web/hdalab/migrations/0002_dataviz.py
web/hdalab/migrations/0003_hdasession.py
web/hdalab/migrations/0004_remove_dbpedia_unicity.py
web/hdalab/migrations/0005_rename_end_year.py
web/hdalab/migrations/0006_dbpedia_fields_one_to_one.py
web/hdalab/migrations/0007_geographic_inclusion.py
web/hdalab/migrations/0008_datasheet_insee.py
web/hdalab/migrations/0009_i18n.py
web/hdalab/migrations/0010_categoryinclusion.py
web/hdalab/migrations/0011_auto__add_field_dbpediafieldstranslation_is_label_translated__add_fiel.py
web/hdalab/migrations/__init__.py
web/hdalab/models/__init__.py
web/hdalab/models/categories.py
web/hdalab/models/dataviz.py
web/hdalab/modwsgi.wsgi
web/hdalab/settings.py
web/hdalab/static/hdalab/css/DroidSerif-Bold.ttf
web/hdalab/static/hdalab/css/DroidSerif-BoldItalic.ttf
web/hdalab/static/hdalab/css/DroidSerif-Italic.ttf
web/hdalab/static/hdalab/css/DroidSerif-Regular.ttf
web/hdalab/static/hdalab/css/OpenSans-Bold.ttf
web/hdalab/static/hdalab/css/OpenSans-BoldItalic.ttf
web/hdalab/static/hdalab/css/OpenSans-Italic.ttf
web/hdalab/static/hdalab/css/OpenSans-Regular.ttf
web/hdalab/static/hdalab/css/cattree.css
web/hdalab/static/hdalab/css/common.css
web/hdalab/static/hdalab/css/completion.css
web/hdalab/static/hdalab/css/facettes.css
web/hdalab/static/hdalab/css/index.css
web/hdalab/static/hdalab/css/notice.css
web/hdalab/static/hdalab/css/thesaurus.css
web/hdalab/static/hdalab/css/trees.css
web/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png
web/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png
web/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png
web/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png
web/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png
web/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png
web/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png
web/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
web/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
web/hdalab/static/hdalab/css/ui-lightness/images/ui-icons_222222_256x240.png
web/hdalab/static/hdalab/css/ui-lightness/images/ui-icons_228ef1_256x240.png
web/hdalab/static/hdalab/css/ui-lightness/images/ui-icons_ef8c08_256x240.png
web/hdalab/static/hdalab/css/ui-lightness/images/ui-icons_ffd27a_256x240.png
web/hdalab/static/hdalab/css/ui-lightness/images/ui-icons_ffffff_256x240.png
web/hdalab/static/hdalab/css/ui-lightness/jquery-ui-1.8.16.custom.css
web/hdalab/static/hdalab/img/bgdfooter.png
web/hdalab/static/hdalab/img/bgdhdalab.png
web/hdalab/static/hdalab/img/bgmap.png
web/hdalab/static/hdalab/img/categories-thumb.jpg
web/hdalab/static/hdalab/img/facettes-thumb.jpg
web/hdalab/static/hdalab/img/favicon.ico
web/hdalab/static/hdalab/img/flag_de.png
web/hdalab/static/hdalab/img/flag_en.png
web/hdalab/static/hdalab/img/flag_es.png
web/hdalab/static/hdalab/img/flag_fr.png
web/hdalab/static/hdalab/img/flag_it.png
web/hdalab/static/hdalab/img/flag_ja.png
web/hdalab/static/hdalab/img/flag_zh-tw.png
web/hdalab/static/hdalab/img/loader.gif
web/hdalab/static/hdalab/img/logo_iri.png
web/hdalab/static/hdalab/img/logo_iri_blanc.png
web/hdalab/static/hdalab/img/logo_mcc.png
web/hdalab/static/hdalab/img/logo_mcc_blanc.png
web/hdalab/static/hdalab/img/small-loader.gif
web/hdalab/static/hdalab/img/thesaurus-thumb.jpg
web/hdalab/static/hdalab/js/cattree.js
web/hdalab/static/hdalab/js/gomina.js
web/hdalab/static/hdalab/js/notice.js
web/hdalab/static/hdalab/js/thesaurus.js
web/hdalab/static/hdalab/js/trees.js
web/hdalab/static/hdalab/lib/ZeroClipboard.js
web/hdalab/static/hdalab/lib/ZeroClipboard.swf
web/hdalab/static/hdalab/lib/countries.geo.json
web/hdalab/static/hdalab/lib/jquery-1.7.1.min.js
web/hdalab/static/hdalab/lib/jquery-ui-1.8.16.custom.min.js
web/hdalab/static/hdalab/lib/leaflet/images/layers.png
web/hdalab/static/hdalab/lib/leaflet/images/marker-shadow.png
web/hdalab/static/hdalab/lib/leaflet/images/marker.png
web/hdalab/static/hdalab/lib/leaflet/images/popup-close.png
web/hdalab/static/hdalab/lib/leaflet/images/zoom-in.png
web/hdalab/static/hdalab/lib/leaflet/images/zoom-out.png
web/hdalab/static/hdalab/lib/leaflet/leaflet-src.js
web/hdalab/static/hdalab/lib/leaflet/leaflet.css
web/hdalab/static/hdalab/lib/leaflet/leaflet.ie.css
web/hdalab/static/hdalab/lib/leaflet/leaflet.js
web/hdalab/static/hdalab/lib/mustache.js
web/hdalab/static/hdalab/lib/raphael-min.js
web/hdalab/static/hdalab/lib/underscore-min.js
web/hdalab/templates/base.html
web/hdalab/templates/categories.html
web/hdalab/templates/facettes.html
web/hdalab/templates/google_analytics/analytics_template.html
web/hdalab/templates/google_analytics/async_analytics_template.html
web/hdalab/templates/index.html
web/hdalab/templates/notice.html
web/hdalab/templates/thesaurus.html
web/hdalab/templatetags/__init__.py
web/hdalab/templatetags/analytics.py
web/hdalab/urls.py
web/hdalab/utils.py
web/hdalab/views/__init__.py
web/hdalab/views/ajax.py
web/hdalab/views/pages.py
--- a/.hgignore	Fri Nov 16 18:12:05 2012 +0100
+++ b/.hgignore	Tue Jun 17 10:25:33 2014 +0200
@@ -26,4 +26,8 @@
 syntax: regexp
 ^web/hdalab/\.htaccess$
 syntax: regexp
-^\.settings$
\ No newline at end of file
+^\.settings$
+syntax: regexp
+^run$
+syntax: regexp
+^src/hdabo/config\.py$
\ No newline at end of file
--- a/.settings/org.eclipse.core.resources.prefs	Fri Nov 16 18:12:05 2012 +0100
+++ b/.settings/org.eclipse.core.resources.prefs	Tue Jun 17 10:25:33 2014 +0200
@@ -1,48 +1,48 @@
 eclipse.preferences.version=1
 encoding//data/villes.csv=ISO-8859-1
-encoding//web/hdabo/forms.py=utf-8
-encoding//web/hdabo/management/commands/clean_tags.py=utf-8
-encoding//web/hdabo/management/commands/diff_csv.py=utf-8
-encoding//web/hdabo/management/commands/import_csv.py=utf-8
-encoding//web/hdabo/management/commands/import_tag_popularity.py=utf-8
-encoding//web/hdabo/management/commands/query_wikipedia.py=utf-8
-encoding//web/hdabo/management/utils.py=utf-8
-encoding//web/hdabo/migrations/0001_initial.py=utf-8
-encoding//web/hdabo/migrations/0002_backport_hdabo_sf.py=utf-8
-encoding//web/hdabo/migrations/0003_update_redirection.py=utf-8
-encoding//web/hdabo/migrations/0005_auto__chg_field_datasheet_organisation.py=utf-8
-encoding//web/hdabo/models.py=utf-8
-encoding//web/hdabo/search/french_whoosh_backend.py=utf-8
-encoding//web/hdabo/tests/models.py=utf-8
-encoding//web/hdabo/utils.py=utf-8
-encoding//web/hdabo/views.py=utf-8
-encoding//web/hdabo/wp_utils.py=utf-8
-encoding//web/hdalab/__init__.py=utf-8
+encoding//src/hdabo/forms.py=utf-8
+encoding//src/hdabo/management/commands/clean_tags.py=utf-8
+encoding//src/hdabo/management/commands/diff_csv.py=utf-8
+encoding//src/hdabo/management/commands/import_csv.py=utf-8
+encoding//src/hdabo/management/commands/import_tag_popularity.py=utf-8
+encoding//src/hdabo/management/commands/query_wikipedia.py=utf-8
+encoding//src/hdabo/management/utils.py=utf-8
+encoding//src/hdabo/migrations/0001_initial.py=utf-8
+encoding//src/hdabo/migrations/0002_backport_hdabo_sf.py=utf-8
+encoding//src/hdabo/migrations/0003_update_redirection.py=utf-8
+encoding//src/hdabo/migrations/0005_auto__chg_field_datasheet_organisation.py=utf-8
+encoding//src/hdabo/models.py=utf-8
+encoding//src/hdabo/search/french_whoosh_backend.py=utf-8
+encoding//src/hdabo/tests/models.py=utf-8
+encoding//src/hdabo/utils.py=utf-8
+encoding//src/hdabo/views.py=utf-8
+encoding//src/hdabo/wp_utils.py=utf-8
+encoding//src/hdalab/__init__.py=utf-8
+encoding//src/hdalab/manage.py=utf-8
+encoding//src/hdalab/management/commands/export_tags_csv.py=utf-8
+encoding//src/hdalab/management/commands/export_wpcategory_csv.py=utf-8
+encoding//src/hdalab/management/commands/fill_tag_years.py=utf-8
+encoding//src/hdalab/management/commands/geojson_transform.py=utf-8
+encoding//src/hdalab/management/commands/import_hda_insee_csv.py=utf-8
+encoding//src/hdalab/management/commands/import_hdabo_db.py=utf-8
+encoding//src/hdalab/management/commands/import_insee_csv.py=utf-8
+encoding//src/hdalab/management/commands/query_category_inclusion.py=utf-8
+encoding//src/hdalab/management/commands/query_dbpedia.py=utf-8
+encoding//src/hdalab/management/commands/query_geo_inclusion.py=utf-8
+encoding//src/hdalab/management/commands/query_wikipedia_category.py=utf-8
+encoding//src/hdalab/management/utils.py=utf-8
+encoding//src/hdalab/migrations/0001_initial.py=utf-8
+encoding//src/hdalab/migrations/0002_dataviz.py=utf-8
+encoding//src/hdalab/migrations/0003_hdasession.py=utf-8
+encoding//src/hdalab/migrations/0005_rename_end_year.py=utf-8
+encoding//src/hdalab/migrations/0006_dbpedia_fields_one_to_one.py=utf-8
+encoding//src/hdalab/migrations/0007_geographic_inclusion.py=utf-8
+encoding//src/hdalab/migrations/0008_datasheet_insee.py=utf-8
+encoding//src/hdalab/models/dataviz.py=utf-8
+encoding//src/hdalab/settings.py=utf-8
+encoding//src/hdalab/urls.py=utf-8
+encoding//src/hdalab/utils.py=utf-8
+encoding//src/hdalab/views/ajax.py=utf-8
+encoding//src/hdalab/views/pages.py=utf-8
 encoding//web/hdalab/config.py=utf-8
-encoding//web/hdalab/manage.py=utf-8
-encoding//web/hdalab/management/commands/export_tags_csv.py=utf-8
-encoding//web/hdalab/management/commands/export_wpcategory_csv.py=utf-8
 encoding//web/hdalab/management/commands/fill_country_codes.py=utf-8
-encoding//web/hdalab/management/commands/fill_tag_years.py=utf-8
-encoding//web/hdalab/management/commands/geojson_transform.py=utf-8
-encoding//web/hdalab/management/commands/import_hda_insee_csv.py=utf-8
-encoding//web/hdalab/management/commands/import_hdabo_db.py=utf-8
-encoding//web/hdalab/management/commands/import_insee_csv.py=utf-8
-encoding//web/hdalab/management/commands/query_category_inclusion.py=utf-8
-encoding//web/hdalab/management/commands/query_dbpedia.py=utf-8
-encoding//web/hdalab/management/commands/query_geo_inclusion.py=utf-8
-encoding//web/hdalab/management/commands/query_wikipedia_category.py=utf-8
-encoding//web/hdalab/management/utils.py=utf-8
-encoding//web/hdalab/migrations/0001_initial.py=utf-8
-encoding//web/hdalab/migrations/0002_dataviz.py=utf-8
-encoding//web/hdalab/migrations/0003_hdasession.py=utf-8
-encoding//web/hdalab/migrations/0005_rename_end_year.py=utf-8
-encoding//web/hdalab/migrations/0006_dbpedia_fields_one_to_one.py=utf-8
-encoding//web/hdalab/migrations/0007_geographic_inclusion.py=utf-8
-encoding//web/hdalab/migrations/0008_datasheet_insee.py=utf-8
-encoding//web/hdalab/models/dataviz.py=utf-8
-encoding//web/hdalab/settings.py=utf-8
-encoding//web/hdalab/urls.py=utf-8
-encoding//web/hdalab/utils.py=utf-8
-encoding//web/hdalab/views/ajax.py=utf-8
-encoding//web/hdalab/views/pages.py=utf-8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/.htaccess.mod_python.tmpl	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,11 @@
+SetHandler python-program
+PythonHandler ldt.core.handlers.modpython
+SetEnv DJANGO_SETTINGS_MODULE ldtplatform.settings
+PythonInterpreter platform
+PythonOption django.root /~wakimd/platform/ldtplatform
+PythonOption virtualenv.activate_path /iridata/users/wakimd/Env/Efculture/bin/activate_this.py
+PythonDebug on
+PythonPath "['/iridata/users/wakimd/Env/Efculture/lib/python2.6/sites-packages'] + sys.path"
+Header set Pragma "no-cache"
+Header set Cache-Control "no-cache"
+Header set Expires "-1"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/.htaccess.mod_wsgi.tmpl	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,20 @@
+
+SetEnv DJANGO_SETTINGS_MODULE hdabo.settings
+SetEnv PROJECT_PATH /Users/ymh/dev/workspace/hdabo/web
+SetEnv PYTHON_PATH /Users/ymh/dev/workspace/hdabo/virtualenv/web/env/hdabo/lib/python2.6/site-packages:/Applications/Dev/eclipse/plugins/org.python.pydev.debug_2.2.0.2011062419/pysrc/
+SetEnv PYDEV_DEBUG False
+
+Options ExecCGI FollowSymLinks
+SetHandler wsgi-script
+
+#if defined in global definition
+#defined with WSGIDaemonProcess 
+#WSGIProcessGroup platform
+
+RewriteEngine On
+RewriteCond %{REQUEST_FILENAME} !-f
+RewriteRule ^(.*)$ /~ymh/hdabo/hdabo/modwsgi.wsgi/$1 [QSA,PT,L]
+
+Header set Pragma "no-cache"
+Header set Cache-Control "no-cache"
+Header set Expires "-1"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/__init__.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,16 @@
+VERSION = (2, 13, 0, "final", 0)
+
+
+def get_version():
+    version = '%s.%s' % (VERSION[0], VERSION[1])
+    if VERSION[2]:
+        version = '%s.%s' % (version, VERSION[2])
+    if VERSION[3:] == ('alpha', 0):
+        version = '%s pre-alpha' % version
+    else:
+        if VERSION[3] != 'final':
+            version = '%s %s %s' % (version, VERSION[3], VERSION[4])
+    return version
+
+
+__version__ = get_version()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/admin.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,16 @@
+from django.contrib import admin
+from hdabo.models import (Author, Datasheet, DocumentFormat, Domain, Organisation, 
+    Tag, TagCategory, TaggedSheet, TimePeriod)
+
+
+admin.site.register(Author)
+admin.site.register(Datasheet)
+admin.site.register(DocumentFormat)
+admin.site.register(Domain)
+admin.site.register(Organisation)
+admin.site.register(Tag)
+admin.site.register(TagCategory)
+admin.site.register(TaggedSheet)
+admin.site.register(TimePeriod)
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/config.py.tmpl	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,47 @@
+import os
+
+BASE_DIR = os.path.dirname(os.path.abspath(__file__)).rstrip("/")+"/"
+BASE_URL = '/~ymh/hdabo/'
+WEB_URL = 'http://localhost'
+
+# Absolute filesystem path to the directory that will hold user-uploaded files.
+# Example: "/home/media/media.lawrence.com/media/"
+MEDIA_ROOT = os.path.abspath(BASE_DIR + "../static/media/")
+
+# URL that handles the media served from MEDIA_ROOT. Make sure to use a
+# trailing slash.
+# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
+MEDIA_URL = BASE_URL + "static/media/"
+
+# Absolute path to the directory static files should be collected to.
+# Don't put anything in this directory yourself; store your static files
+# in apps' "static/" subdirectories and in STATICFILES_DIRS.
+# Example: "/home/media/media.lawrence.com/static/"
+STATIC_ROOT = os.path.abspath(BASE_DIR + "../static/site/")
+
+# URL prefix for static files.
+# Example: "http://media.lawrence.com/static/"
+STATIC_URL = BASE_URL + "static/site/"
+
+# Additional locations of static files
+STATICFILES_DIRS = (
+    # Put strings here, like "/home/html/static" or "C:/www/django/static".
+    # Always use forward slashes, even on Windows.
+    # Don't forget to use absolute paths, not relative paths.
+)
+
+
+DATABASES = {
+    'default': {
+        'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
+        'NAME': 'hdabo',                      # Or path to database file if using sqlite3.
+        'USER': 'iri',                      # Not used with sqlite3.
+        'PASSWORD': 'iri',                  # Not used with sqlite3.
+        'HOST': 'localhost',                      # Set to empty string for localhost. Not used with sqlite3.
+        'PORT': '5432',                      # Set to empty string for default. Not used with sqlite3.
+    }
+}
+
+HAYSTACK_SEARCH_ENGINE = 'whoosh'
+HAYSTACK_WHOOSH_PATH = os.path.abspath(BASE_DIR + "../index/").rstrip("/")+"/"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/context_processors.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,5 @@
+import hdabo
+
+def version(request):
+    return { 'VERSION': hdabo.get_version() }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/django_wsgi.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,9 @@
+import os
+
+import django.core.handlers.wsgi
+
+application = django.core.handlers.wsgi.WSGIHandler()
+
+if os.environ.get('PYDEV_DEBUG', "False").lower() in ["true", "1", "t"]:
+    import pydevd #@UnresolvedImport
+    pydevd.settrace(suspend=False)
Binary file src/hdabo/fixtures/datasheet_10.yaml.bz2 has changed
Binary file src/hdabo/fixtures/datasheet_347.yaml.bz2 has changed
Binary file src/hdabo/fixtures/datasheet_all.yaml.bz2 has changed
Binary file src/hdabo/fixtures/initial_data.yaml.bz2 has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/forms.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,14 @@
+# -*- coding: utf-8 -*-
+from django import forms
+from django.db.models.query import QuerySet
+
+
+class SortedMultipleChoiceField(forms.ModelMultipleChoiceField):
+    def clean(self, value):
+        queryset = super(SortedMultipleChoiceField, self).clean(value)
+        if value is None or not isinstance(queryset, QuerySet):
+            return queryset
+        object_list = dict((
+            (unicode(key), value)
+            for key, value in queryset.in_bulk(value).iteritems()))
+        return [object_list[unicode(pk)] for pk in value]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/management/commands/clean_tags.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,56 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Jun 20, 2012
+
+@author: ymh
+'''
+from django.core.management.base import NoArgsCommand
+from django.core.management.color import no_style
+from django.db import transaction,connection
+from django.db.models import Count
+from hdabo.models import Tag
+from hdabo.utils import show_progress
+from optparse import make_option
+import math
+import sys
+
+
+class Command(NoArgsCommand):
+    '''
+    remove orphan tags and merge duplicates (the key is the dbpedia uri) 
+    '''
+
+
+    def handle_noargs(self, **options):
+        '''
+        do the work
+        '''
+
+        # merge duplicate tags
+        cursor = connection.cursor()
+        cursor.execute("select label, dbpedia_uri from hdabo_tag group by label,dbpedia_uri having count(label) > 1")
+        
+        for label,_ in cursor:
+            qs = Tag.objects.filter(label=label).annotate(num_ds=Count('datasheet')).order_by('-num_ds')
+            ref_tag = None
+            for t in qs:
+                print("label : %d : %s, num_ds: %d"%(t.id,t.label, t.num_ds))
+                if ref_tag is None:
+                    ref_tag = t
+                else:
+                    for ts in t.taggedsheet_set.all():
+                        pass
+                        print("changing tag %d to %d" %(ts.tag.id, ref_tag.id) )
+                        ts.tag = ref_tag
+                        ts.save()
+        
+        # remove ophans tags
+        
+        orphans_tags = Tag.objects.annotate(num_ds=Count('datasheet')).filter(num_ds=0)
+        
+        print("nb Orphans : %d" % orphans_tags.count())
+                
+        #delete
+        orphans_tags.delete()
+
+        
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/management/commands/diff_csv.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,147 @@
+# -*- coding: utf-8 -*-
+'''
+Created on May 25, 2011
+
+@author: ymh
+'''
+#Auteur,Chemin,Comment,Controle,Datcre,Datmaj,Desc,Domaine,Format,ID,Insee,Org,Org_Home,OrgID,Periode1,Periode2,Periode3,Satut,Sousdom,Tag,Theme2,Theme3,Titre,Url,Vignette,Ville
+#"Auteur","Chemin","Comment","Controle","Datcre","Datmaj","Desc","Domaine","Format","ID","Insee","Org","Org_Home","OrgID","Periode1","Periode2","Periode3","Satut","Sousdom","Tag","Theme2","Theme3","Titre","Url","Vignette","Ville",
+
+from django.core.management.base import BaseCommand, CommandError
+from django.db import transaction
+from hdabo.models import Datasheet
+from optparse import make_option
+import csv
+import math
+import sys
+
+class Command(BaseCommand):
+    '''
+    Command to diff datasheets content from csv content 
+    '''
+    args = '<path_to_csv_file path_to_csv_file ...>'
+    options = '[--do-delete] [--encoding] [--delimiter] [--dialect]'
+    help = """Import of a csv file for hdabo
+Options:
+    --do-delete : ignore existing datasheets
+    --encoding : files encoding. default to latin-1
+    --delimiter : scv delimiter
+    --dialect : csv dialect
+    --fieldnames : csv columns
+    """
+    
+    option_list = BaseCommand.option_list + (
+        make_option('--encoding',
+            action='store',
+            type='string',
+            dest='encoding',
+            default="latin-1",
+            help='fix the file encoding. default to latin-1'),
+        make_option('--delimiter',
+            action='store',
+            type='string',
+            dest='delimiter',
+            default=";",
+            help='csv file delimiter'),
+        make_option('--dialect',
+            action='store',
+            type='string',
+            dest='dialect',
+            default="excel",
+            help='csv dialect'),
+        make_option('--fieldnames',
+            action='store',
+            type='string',
+            dest='fieldnames',
+            default=None,
+            help='fields list (comma separated)'),
+        make_option('--do-delete',
+            action='store_true',
+            dest='do_delete',
+            default=False,
+            help='delete datasheets'),
+        
+        )
+    
+    def show_progress(self, current_line, total_line, width):
+
+        percent = (float(current_line) / float(total_line)) * 100.0
+
+        marks = math.floor(width * (percent / 100.0))
+        spaces = math.floor(width - marks)
+    
+        loader = '[' + ('=' * int(marks)) + (' ' * int(spaces)) + ']'
+    
+        sys.stdout.write("%s %d%% %d/%d\r" % (loader, percent, current_line - 1, total_line - 1)) #takes the header into account
+        if percent >= 100:
+            sys.stdout.write("\n")
+        sys.stdout.flush()
+
+            
+
+    def handle(self, *args, **options):
+        
+        if len(args) == 0:
+            raise CommandError("Gives at lat one csv file to import")
+        
+        self.encoding = options.get('encoding', "latin-1")
+        self.do_delete = options.get('do_delete', False)
+        fieldnames = options.get('fieldnames', None)
+
+        for csv_path in args:
+            print "Processing %s " % (csv_path)
+            with open(csv_path, 'rU') as csv_file:
+                
+                # get the number of lines if necessary
+                for i, l in enumerate(csv_file): #@UnusedVariable
+                    pass                        
+                total_line = i + 1
+                if fieldnames:
+                    total_line = total_line + 1
+                csv_file.seek(0)
+                
+                delimiter = options.get('delimiter', ";")
+                if delimiter == "TAB" or delimiter == "\\t":
+                    delimiter = '\t'
+    
+                dr_kwargs = {'delimiter':delimiter}
+                if  fieldnames is not None:
+                    dr_kwargs['fieldnames'] = [f.strip() for f in fieldnames.split(",")]
+                dialect = options.get('dialect', "excel")
+                if dialect is not None:
+                    dr_kwargs['dialect'] = dialect
+                   
+                reader = csv.DictReader(csv_file, **dr_kwargs)
+                
+                ids = []
+    
+                for row in reader:
+                    line_num = reader.line_num if fieldnames is None else reader.line_num + 1
+                    self.show_progress(line_num, total_line, 60)
+                    def safe_decode(val, encoding):
+                        if val:
+                            return val.decode(encoding)
+                        else:
+                            return val
+                                                
+                    row = dict([(safe_decode(key, self.encoding), safe_decode(value, self.encoding)) for key, value in row.items()])
+                    
+                    ids.append(row['ID'])
+                
+                qs = Datasheet.objects.exclude(hda_id__in = ids).order_by("hda_id")
+                
+                qs_count = qs.count()
+                
+                if qs_count == 0:
+                    print("No datasheet to delete : exit")
+                    return
+                    
+                print("The following datasheets are in the database and not in the csv file")
+                for i,ds in enumerate(qs):
+                    print("%*d- %4s : %s" % (len(str(qs_count+1)), i+1, ds.hda_id, ds.title.strip() if ds.title is not None else ""))
+                    
+                
+                if self.do_delete:
+                    print("deleting datasheets")
+                    qs.delete()
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/management/commands/import_csv.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,267 @@
+# -*- coding: utf-8 -*-
+'''
+Created on May 25, 2011
+
+@author: ymh
+'''
+#Auteur,Chemin,Comment,Controle,Datcre,Datmaj,Desc,Domaine,Format,ID,Insee,Org,Org_Home,OrgID,Periode1,Periode2,Periode3,Satut,Sousdom,Tag,Theme2,Theme3,Titre,Url,Vignette,Ville
+#"Auteur","Chemin","Comment","Controle","Datcre","Datmaj","Desc","Domaine","Format","ID","Insee","Org","Org_Home","OrgID","Periode1","Periode2","Periode3","Satut","Sousdom","Tag","Theme2","Theme3","Titre","Url","Vignette","Ville",
+
+from django.core.management.base import BaseCommand, CommandError
+from django.db import transaction
+from hdabo.models import (Author, Datasheet, DocumentFormat, Domain, Organisation,
+    Tag, TaggedSheet, TimePeriod, Location)
+from hdabo.wp_utils import normalize_tag
+from optparse import make_option
+import csv
+import datetime
+import math
+import sys
+
+class Command(BaseCommand):
+    '''
+    Command to import csvfile
+    '''
+    args = '<path_to_csv_file path_to_csv_file ...>'
+    options = '[--ignore-existing] [--lines] [--encoding]'
+    help = """Import of a csv file for hdabo
+Options:
+    --ignore-existing : ignore existing datasheets
+    --lines : max number of lines to load (for each file). 0 means all.
+    --encoding : files encoding. default to latin-1"""
+    
+    option_list = BaseCommand.option_list + (
+        make_option('--encoding',
+            action='store',
+            type='string',
+            dest='encoding',
+            default="latin-1",
+            help='fix the file encoding. default to latin-1'),
+        make_option('--delimiter',
+            action='store',
+            type='string',
+            dest='delimiter',
+            default=";",
+            help='csv file delimiter'),
+        make_option('--dialect',
+            action='store',
+            type='string',
+            dest='dialect',
+            default="excel",
+            help='csv dialect'),
+        make_option('--fieldnames',
+            action='store',
+            type='string',
+            dest='fieldnames',
+            default=None,
+            help='fields list (comma separated)'),
+        make_option('--lines',
+            action='store',
+            type='int',
+            dest='lines',
+            default=0,
+            help='Number of lines to read. 0 means all.'),
+        make_option('--ignore-existing',
+            action='store_true',
+            dest='ignore_existing',
+            default=False,
+            help='force insertion'),
+        
+        )
+    
+    def show_progress(self, current_line, total_line, width):
+
+        percent = (float(current_line) / float(total_line)) * 100.0
+
+        marks = math.floor(width * (percent / 100.0))
+        spaces = math.floor(width - marks)
+    
+        loader = '[' + ('=' * int(marks)) + (' ' * int(spaces)) + ']'
+    
+        sys.stdout.write("%s %d%% %d/%d\r" % (loader, percent, current_line - 1, total_line - 1)) #takes the header into account
+        if percent >= 100:
+            sys.stdout.write("\n")
+        sys.stdout.flush()
+
+    
+    def create_domain_period(self, row_value, klass, school_period):
+        res_list = []
+        if not row_value:
+            return res_list
+        for label_str in [dstr.strip() for dstr in row_value.split('\x0b')]:
+            if label_str:
+                res_obj, created = klass.objects.get_or_create(label=label_str, school_period=school_period, defaults={"label":label_str, "school_period":school_period}) #@UnusedVariable
+                res_list.append(res_obj)
+        return res_list
+    
+    def create_datasheet(self, row):
+        
+        if self.ignore_existing and Datasheet.objects.filter(hda_id=row[u"ID"]).count() > 0:
+            return
+        
+        author_str = row[u'Auteur']
+        if author_str:
+            author_array = author_str.split(" ")
+            if len(author_array) == 0:
+                firstname = ""
+                lastname = ""
+            elif len(author_array) == 1:
+                firstname = ""
+                lastname = author_array[0]
+            elif len(author_array) == 2:
+                firstname = author_array[0]
+                lastname = author_array[1]
+                
+            author, created = Author.objects.get_or_create(hda_id=author_str, defaults={"firstname":firstname, "lastname":lastname}) #@UnusedVariable
+        else:
+            author = None
+        
+        org_str = row[u"Org"]    
+        if org_str:
+            url_str = row[u'Org_Home']
+            if url_str is not None:
+                url_str = url_str.strip()
+            org, created = Organisation.objects.get_or_create(hda_id=org_str, defaults={"name":org_str, "website" : url_str}) #@UnusedVariable
+        else:
+            org = None
+            
+        town_str = row[u"Ville"]
+        if town_str:
+            insee_str = row[u'Insee'].strip() if row[u'Insee'] else row[u'Insee']
+            if len(insee_str) > 5:
+                insee_str = "" 
+            loc, created = Location.objects.get_or_create(insee=insee_str, defaults={"name": town_str, "insee": insee_str}) #@UnusedVariable
+        else:
+            loc = None
+            
+        format_str = row[u"Format"]
+        if format_str:
+            format, created = DocumentFormat.objects.get_or_create(label=format_str, defaults={"label": format_str}) #@UnusedVariable
+        else:
+            format = None
+        
+        domains = self.create_domain_period(row[u"Domaine"], Domain, Domain.DOMAIN_PERIOD_DICT[u'Global'])
+                                        
+        primary_periods = self.create_domain_period(row[u"Periode1"], TimePeriod, TimePeriod.TIME_PERIOD_DICT[u'Primaire'])
+        college_periods = self.create_domain_period(row[u"Periode2"], TimePeriod, TimePeriod.TIME_PERIOD_DICT[u'Collège'])
+        highschool_periods = self.create_domain_period(row[u"Periode3"], TimePeriod, TimePeriod.TIME_PERIOD_DICT[u'Lycée'])
+                    
+        primary_themes = self.create_domain_period(row[u"Sousdom"], Domain, Domain.DOMAIN_PERIOD_DICT[u'Primaire'])
+        college_themes = self.create_domain_period(row[u"Theme2"], Domain, Domain.DOMAIN_PERIOD_DICT[u'Collège'])
+        highschool_themes = self.create_domain_period(row[u"Theme3"], Domain, Domain.DOMAIN_PERIOD_DICT[u'Lycée'])
+        
+        url = row[u"Url"]
+        if url is not None:
+            url = url.strip()
+        
+        datasheet = Datasheet.objects.create(
+            hda_id=row[u"ID"],
+            author=author,
+            organisation=org,
+            title=row[u"Titre"],
+            description=row[u"Desc"],
+            url=url,
+            town=loc,
+            format=format,
+            original_creation_date=datetime.datetime.strptime(row[u"Datcre"], "%d/%m/%Y").date(),
+            original_modification_date=datetime.datetime.strptime(row[u"Datmaj"], "%d/%m/%Y").date(),
+            validated=False                                          
+        )
+        
+        datasheet.save()
+        
+        datasheet.set_domains(domains)
+        datasheet.set_primary_periods(primary_periods)
+        datasheet.set_college_periods(college_periods)
+        datasheet.set_highschool_periods(highschool_periods)
+        datasheet.set_primary_themes(primary_themes)
+        datasheet.set_college_themes(college_themes)
+        datasheet.set_highschool_themes(highschool_themes)
+
+        
+        if row[u'Tag']:
+            for i, tag in enumerate([t.strip() for t in row[u'Tag'].split(u";")]):
+                if len(tag) == 0:
+                    continue
+                tag_label = normalize_tag(tag)
+                tag_obj = None
+                for t in Tag.objects.filter(label__iexact=tag_label):
+                    if tag_obj is None or t.url_status != Tag.TAG_URL_STATUS_DICT['null_result']:
+                        tag_obj = t
+                        if tag_obj.url_status != Tag.TAG_URL_STATUS_DICT['null_result']:
+                            break
+ 
+                if tag_obj is None:
+                    tag_obj = Tag(label=tag_label, original_label=tag)
+                    tag_obj.save()
+
+                tagged_ds = TaggedSheet(datasheet=datasheet, tag=tag_obj, original_order=i + 1, order=i + 1)
+                tagged_ds.save()
+        
+
+    def handle(self, *args, **options):
+        
+        if len(args) == 0:
+            raise CommandError("Gives at lat one csv file to import")
+        
+        self.encoding = options.get('encoding', "latin-1")
+        lines = options.get('lines', 0)
+        self.ignore_existing = options.get('ignore_existing', False)
+        fieldnames = options.get('fieldnames', None)
+
+        transaction.commit_unless_managed()
+        transaction.enter_transaction_management()
+        transaction.managed(True)
+
+        try:
+            for csv_path in args:
+                try:
+                    print "Processing %s " % (csv_path)
+                    with open(csv_path, 'rU') as csv_file:
+                        
+                        # get the number of lines if necessary
+                        if not lines:
+                            for i, l in enumerate(csv_file): #@UnusedVariable
+                                pass                        
+                            total_line = i + 1
+                            if fieldnames:
+                                total_line = total_line + 1
+                            csv_file.seek(0)
+                        else:
+                            total_line = lines + 1
+                        
+                        delimiter = options.get('delimiter', ";")
+                        if delimiter == "TAB" or delimiter == "\\t":
+                            delimiter = '\t'
+
+                        dr_kwargs = {'delimiter':delimiter}
+                        if  fieldnames is not None:
+                            dr_kwargs['fieldnames'] = [f.strip() for f in fieldnames.split(",")]
+                        dialect = options.get('dialect', "excel")
+                        if dialect is not None:
+                            dr_kwargs['dialect'] = dialect
+                           
+                        reader = csv.DictReader(csv_file, **dr_kwargs)
+        
+                        for j, row in enumerate(reader):
+                            if lines and j >= lines:
+                                break
+                            line_num = reader.line_num if fieldnames is None else reader.line_num + 1
+                            self.show_progress(line_num, total_line, 60)
+                            def safe_decode(val, encoding):
+                                if val:
+                                    return val.decode(encoding)
+                                else:
+                                    return val
+                                                        
+                            row = dict([(safe_decode(key, self.encoding), safe_decode(value, self.encoding)) for key, value in row.items()])
+                            self.create_datasheet(row)
+                            
+                            transaction.commit()
+                except Exception:
+                    transaction.rollback()
+                    raise 
+                finally:
+                    print('')
+        finally:
+            transaction.leave_transaction_management()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/management/commands/import_tag_popularity.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,150 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Jun 17, 2011
+
+@author: ymh
+
+command to import tag popularity
+
+'''
+
+from django.core.management.base import BaseCommand, CommandError
+from hdabo.models import Tag
+from hdabo.utils import normalize
+from optparse import make_option
+import csv
+import math
+import sys
+
+
+class Command(BaseCommand):
+    '''
+    Command to import csvfile
+    '''
+    args = '<path_to_csv_file path_to_csv_file ...>'
+    options = '[--ignore-existing] [--lines] [--encoding]'
+    help = """Import of a tag popularity file for hdabo
+Options:
+    --ignore-existing : ignore existing datasheets
+    --lines : max number of lines to load (for each file). 0 means all.
+    --encoding : files encoding. default to latin-1"""
+    
+    option_list = BaseCommand.option_list + (
+        make_option('--encoding',
+            action='store',
+            type='string',
+            dest='encoding',
+            default="latin-1",
+            help='fix the file encoding. default to latin-1'),
+        make_option('--delimiter',
+            action='store',
+            type='string',
+            dest='delimiter',
+            default=";",
+            help='csv file delimiter'),
+        make_option('--dialect',
+            action='store',
+            type='string',
+            dest='dialect',
+            default="excel",
+            help='csv dialect'),
+        make_option('--fieldnames',
+            action='store',
+            type='string',
+            dest='fieldnames',
+            default="label,popularity",
+            help='fields list (comma separated)'),
+        make_option('--lines',
+            action='store',
+            type='int',
+            dest='lines',
+            default=0,
+            help='Number of lines to read. 0 means all.'),
+        make_option('--preserve',
+            action='store_true',
+            dest='preserve',
+            default=False,
+            help='preserve'),
+                                             
+        
+        )
+    
+    def show_progress(self, current_line, total_line, width):
+
+        percent = (float(current_line) / float(total_line)) * 100.0
+
+        marks = math.floor(width * (percent / 100.0))
+        spaces = math.floor(width - marks)
+    
+        loader = '[' + ('=' * int(marks)) + (' ' * int(spaces)) + ']'
+    
+        sys.stdout.write("%s %d%% %d/%d\r" % (loader, percent, current_line - 1, total_line - 1)) #takes the header into account
+        if percent >= 100:
+            sys.stdout.write("\n")
+        sys.stdout.flush()
+
+    def handle(self, *args, **options):
+        
+        if len(args) == 0:
+            raise CommandError("Give one csv file to import")
+        elif len(args) > 1:
+            raise CommandError("Only one file can be imported")
+        
+        self.encoding = options.get('encoding', "latin-1")
+        lines = options.get('lines', 0)
+        fieldnames = options.get('fieldnames', "label,popularity")
+
+        csv_path = args[0]
+        
+        print("Processing %s " % (csv_path))
+        
+        with open(csv_path, 'rU') as csv_file:
+            # get the number of lines if necessary
+            if not lines:
+                for i, l in enumerate(csv_file): #@UnusedVariable
+                    pass                        
+                total_line = i + 1
+                if fieldnames:
+                    total_line = total_line + 1
+                csv_file.seek(0)
+            else:
+                total_line = lines + 1
+
+            delimiter = options.get('delimiter', ";")
+            if delimiter == "TAB" or delimiter == "\\t":
+                delimiter = '\t'
+            dr_kwargs = {'delimiter':delimiter}
+            if  fieldnames is not None:
+                dr_kwargs['fieldnames'] = [f.strip() for f in fieldnames.split(",")]
+            dialect = options.get('dialect', "excel")
+            if dialect is not None:
+                dr_kwargs['dialect'] = dialect
+               
+            if not options.get('preserve',False):
+                Tag.objects.update(popularity=0)
+                
+            reader = csv.DictReader(csv_file, **dr_kwargs)
+
+            for j, row in enumerate(reader):
+                if lines and j >= lines:
+                    break
+                line_num = reader.line_num if fieldnames is None else reader.line_num + 1
+                self.show_progress(line_num, total_line, 60)
+                def safe_decode(val, encoding):
+                    if val:
+                        return val.decode(encoding)
+                    else:
+                        return val
+                                            
+                row = dict([(safe_decode(key, self.encoding), safe_decode(value, self.encoding)) for key, value in row.items()])
+                
+                label = normalize(row['label'].strip())
+                popularity_str = row['popularity']
+                
+                if not label or not popularity_str:
+                    continue
+                
+                
+                for tag in Tag.objects.filter(normalized_label=label):
+                    tag.popularity = tag.popularity + int(row['popularity'])
+                    tag.save()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/management/commands/order_tags.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,81 @@
+'''
+Created on Jun 7, 2011
+
+@author: ymh
+'''
+
+from django.core.management.base import NoArgsCommand
+from django.core.management.color import no_style
+from django.db import transaction
+from hdabo.models import Datasheet
+from hdabo.wp_utils import reorder_datasheet_tags
+from hdabo.utils import show_progress
+from optparse import make_option
+import math
+import sys
+
+
+class Command(NoArgsCommand):
+    '''
+    Command to calculate the order of tags based on indexation
+    recalculate all tags. Will ask for confirmation
+    '''
+
+    args = ''
+    options = '-f : force '
+    help = "calculate the order of tags based on indexation recalculate all tags. Will ask for confirmation"
+    
+    option_list = NoArgsCommand.option_list + (
+        make_option('-f', '--force',
+            action='store_true',
+            dest='force',
+            default=False,
+            help='force reordering of all datasheets'),
+        make_option('--noinput',
+            action='store_true',
+            dest='no_input',
+            default=False,
+            help='no input'),
+        )
+
+
+    def handle_noargs(self, **options):
+        
+        self.style = no_style()
+        
+        interactive = options.get('interactive', True) and not options.get('no_input', False)
+        force = options.get('force', True)
+        
+        if interactive:
+            confirm = raw_input("""You have requested to recalculate the index order of all the tags.
+This will process all the tags in %s datasheets. Are you sure you want to do this ?
+    Type 'yes' to continue, or 'no' to cancel: """ % ("all" if force else "not validated"))
+        else:
+            confirm = 'yes'
+            
+        if confirm != "yes":
+            print "Tag reordering cancelled"
+            return
+
+        if force:
+            queryset = Datasheet.objects.all()
+        else:
+            queryset = Datasheet.objects.filter(validated=False, manual_order=False)
+        total = queryset.count()
+        
+        transaction.commit_unless_managed()
+        transaction.enter_transaction_management()
+        transaction.managed(True)
+
+        try:
+            for i, ds in enumerate(queryset):
+                show_progress(i + 1, total, ds.title, 60)
+                reorder_datasheet_tags(ds)
+                transaction.commit()
+        except:
+            transaction.rollback()
+            raise
+        finally:
+            transaction.leave_transaction_management()
+            
+        
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/management/commands/query_wikipedia.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,146 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Jun 7, 2011
+
+@author: ymh
+'''
+
+from django.conf import settings
+from django.core.management.base import NoArgsCommand
+from django.core.management.color import no_style
+from hdabo.models import Tag
+from hdabo.wp_utils import process_tag
+from optparse import make_option
+from wikitools import wiki
+import math
+import sys
+
+
+
+class Command(NoArgsCommand):
+    '''
+    query and update wikipedia for tag title.
+    '''
+    options = ''
+    help = """query and update wikipedia for tag title."""
+    
+    option_list = NoArgsCommand.option_list + (
+        make_option('--force',
+            action='store_true',
+            dest='force',
+            default=False,
+            help='force all tags to be updated, not only those not yet processed'),
+        make_option('--random',
+            action='store_true',
+            dest='random',
+            default=False,
+            help='randomize query on tags'),
+        make_option('--site',
+            action='store',
+            type='string',
+            dest='site_url',
+            default="http://fr.wikipedia.org/w/api.php",
+            help='the url for the wikipedia site'),
+        make_option('--limit',
+            action='store',
+            type='int',
+            dest='limit',
+            default= -1,
+            help='number of tag to process'),
+        make_option('--start',
+            action='store',
+            type='int',
+            dest='start',
+            default=0,
+            help='number of tag to ignore'),
+        )
+    
+    def __is_homonymie(self, page_dict):
+        for cat in page_dict.get(u"categories", []):
+            if u'Catégorie:Homonymie' in cat.get(u"title", u"") or u'Category:Disambiguation pages' in cat.get(u"title", u""):
+                return True
+        return False
+        
+    def show_progress(self, current_line, total_line, label, width):
+
+        percent = (float(current_line) / float(total_line)) * 100.0
+
+        marks = math.floor(width * (percent / 100.0))
+        spaces = math.floor(width - marks)
+    
+        loader = u'[' + (u'=' * int(marks)) + (u' ' * int(spaces)) + u']'
+        
+        sys.stdout.write(u"%s %d%% %d/%d - %r\r" % (loader, percent, current_line - 1, total_line - 1, label[:50].rjust(50))) #takes the header into account
+        if percent >= 100:
+            sys.stdout.write("\n")
+        sys.stdout.flush()
+        
+    def handle_noargs(self, **options):
+        
+        self.style = no_style()
+        
+        interactive = options.get('interactive', True)
+        
+        verbosity = int(options.get('verbosity', '1'))
+        
+        force = options.get('force', False)
+        
+        limit = options.get("limit", -1)
+        start = options.get("start", 0)
+        
+        site_url = options.get('site_url', settings.WIKIPEDIA_API_URL)
+        
+        random = options.get('random', False)
+        
+        if verbosity > 2:
+            print "option passed : " + repr(options)
+
+        if force and interactive:
+            confirm = raw_input("""You have requested to query and replace the wikipedia information for all datasheets.
+Are you sure you want to do this ?
+    Type 'yes' to continue, or 'no' to cancel: """)
+        else:
+            confirm = 'yes'
+            
+        if confirm != "yes":
+            print "wikipedia query cancelled"
+            return
+
+        if force:
+            queryset = Tag.objects.all()
+        else:
+            queryset = Tag.objects.filter(url_status=None)                    
+        
+        if random:
+            queryset = queryset.order_by("?")
+        else:
+            queryset = queryset.order_by("label")
+        
+        if limit >= 0:
+            queryset = queryset[start:limit]
+        else:
+            queryset = queryset[start:]
+            
+        
+        if verbosity > 2 :
+            print "Tag Query is %s" % (queryset.query)
+        
+        site = wiki.Wiki(site_url) #@UndefinedVariable
+        
+        
+        count = queryset.count()
+        if verbosity > 1:
+            print "Processing %d tags" % (count)
+        
+        
+        
+        for i, tag in enumerate(queryset):
+            
+            if verbosity > 1:
+                print "processing tag %s (%d/%d)" % (tag.label, i + 1, count)
+            else:
+                self.show_progress(i + 1, count, tag.label, 60)                            
+            
+            process_tag(site, tag, verbosity)
+            
+            
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/management/utils.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Feb 2, 2012
+
+@author: ymh
+'''
+
+import cStringIO
+import csv
+import codecs
+
+class UnicodeWriter:
+    """
+    A CSV writer which will write rows to CSV file "f",
+    which is encoded in the given encoding.
+    """
+
+    def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds):
+        # Redirect output to a queue
+        self.queue = cStringIO.StringIO()
+        self.writer = csv.writer(self.queue, dialect=dialect, **kwds)
+        self.stream = f
+        self.encoder = codecs.getincrementalencoder(encoding)()
+
+    def writerow(self, row):
+        self.writer.writerow([unicode(s).encode("utf-8") for s in row])
+        # Fetch UTF-8 output from the queue ...
+        data = self.queue.getvalue()
+        data = data.decode("utf-8")
+        # ... and reencode it into the target encoding
+        data = self.encoder.encode(data)
+        # write to the target stream
+        self.stream.write(data)
+        # empty queue
+        self.queue.truncate(0)
+
+    def writerows(self, rows):
+        for row in rows:
+            self.writerow(row)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/migrations/0001_initial.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,436 @@
+#@PydevCodeAnalysisIgnore
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+        
+        # Adding model 'Organisation'
+        db.create_table('hdabo_organisation', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('hda_id', self.gf('django.db.models.fields.CharField')(unique=True, max_length=512)),
+            ('name', self.gf('django.db.models.fields.CharField')(max_length=512)),
+            ('location', self.gf('django.db.models.fields.CharField')(max_length=512, null=True, blank=True)),
+            ('website', self.gf('django.db.models.fields.CharField')(max_length=2048, null=True, blank=True)),
+        ))
+        db.send_create_signal('hdabo', ['Organisation'])
+
+        # Adding model 'Author'
+        db.create_table('hdabo_author', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('hda_id', self.gf('django.db.models.fields.CharField')(unique=True, max_length=512)),
+            ('lastname', self.gf('django.db.models.fields.CharField')(max_length=512, null=True, blank=True)),
+            ('firstname', self.gf('django.db.models.fields.CharField')(max_length=512, null=True, blank=True)),
+        ))
+        db.send_create_signal('hdabo', ['Author'])
+
+        # Adding model 'TimePeriod'
+        db.create_table('hdabo_timeperiod', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('label', self.gf('django.db.models.fields.CharField')(max_length=512)),
+            ('school_period', self.gf('django.db.models.fields.IntegerField')()),
+        ))
+        db.send_create_signal('hdabo', ['TimePeriod'])
+
+        # Adding unique constraint on 'TimePeriod', fields ['label', 'school_period']
+        db.create_unique('hdabo_timeperiod', ['label', 'school_period'])
+
+        # Adding model 'Domain'
+        db.create_table('hdabo_domain', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('label', self.gf('django.db.models.fields.CharField')(max_length=512)),
+            ('school_period', self.gf('django.db.models.fields.IntegerField')()),
+        ))
+        db.send_create_signal('hdabo', ['Domain'])
+
+        # Adding unique constraint on 'Domain', fields ['label', 'school_period']
+        db.create_unique('hdabo_domain', ['label', 'school_period'])
+
+        # Adding model 'DocumentFormat'
+        db.create_table('hdabo_documentformat', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('label', self.gf('django.db.models.fields.CharField')(unique=True, max_length=512)),
+        ))
+        db.send_create_signal('hdabo', ['DocumentFormat'])
+
+        # Adding model 'TagCategory'
+        db.create_table('hdabo_tagcategory', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('label', self.gf('django.db.models.fields.CharField')(unique=True, max_length=512)),
+        ))
+        db.send_create_signal('hdabo', ['TagCategory'])
+
+        # Adding model 'Tag'
+        db.create_table('hdabo_tag', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('label', self.gf('django.db.models.fields.CharField')(max_length=1024, db_index=True)),
+            ('normalized_label', self.gf('django.db.models.fields.CharField')(max_length=1024, db_index=True)),
+            ('original_label', self.gf('django.db.models.fields.CharField')(max_length=1024)),
+            ('alias', self.gf('django.db.models.fields.CharField')(max_length=1024, null=True, blank=True)),
+            ('category', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.TagCategory'], null=True, blank=True)),
+            ('wikipedia_url', self.gf('django.db.models.fields.URLField')(max_length=2048, null=True, blank=True)),
+            ('wikipedia_pageid', self.gf('django.db.models.fields.BigIntegerField')(null=True, blank=True)),
+            ('url_status', self.gf('django.db.models.fields.IntegerField')(default=None, null=True, blank=True)),
+            ('dbpedia_uri', self.gf('django.db.models.fields.URLField')(max_length=2048, null=True, blank=True)),
+            ('popularity', self.gf('django.db.models.fields.IntegerField')(default=0, db_index=True)),
+        ))
+        db.send_create_signal('hdabo', ['Tag'])
+
+        # Adding unique constraint on 'Tag', fields ['label', 'original_label', 'url_status']
+        db.create_unique('hdabo_tag', ['label', 'original_label', 'url_status'])
+
+        # Adding model 'Location'
+        db.create_table('hdabo_location', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('name', self.gf('django.db.models.fields.CharField')(max_length=512)),
+            ('insee', self.gf('django.db.models.fields.CharField')(unique=True, max_length=5)),
+        ))
+        db.send_create_signal('hdabo', ['Location'])
+
+        # Adding model 'Datasheet'
+        db.create_table('hdabo_datasheet', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('hda_id', self.gf('django.db.models.fields.CharField')(unique=True, max_length=512)),
+            ('author', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Author'], null=True, blank=True)),
+            ('organisation', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Organisation'])),
+            ('title', self.gf('django.db.models.fields.CharField')(max_length=2048)),
+            ('description', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+            ('url', self.gf('django.db.models.fields.URLField')(max_length=2048, null=True, blank=True)),
+            ('town', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Location'], null=True, blank=True)),
+            ('format', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.DocumentFormat'], null=True, blank=True)),
+            ('original_creation_date', self.gf('django.db.models.fields.DateField')()),
+            ('original_modification_date', self.gf('django.db.models.fields.DateField')()),
+            ('modification_datetime', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)),
+            ('validation_date', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)),
+            ('validated', self.gf('django.db.models.fields.BooleanField')(default=False, db_index=True)),
+            ('validator', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True, blank=True)),
+            ('manual_order', self.gf('django.db.models.fields.BooleanField')(default=False, db_index=True)),
+        ))
+        db.send_create_signal('hdabo', ['Datasheet'])
+
+        # Adding model 'TaggedSheet'
+        db.create_table('hdabo_taggedsheet', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
+            ('tag', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Tag'])),
+            ('original_order', self.gf('django.db.models.fields.IntegerField')(default=0)),
+            ('order', self.gf('django.db.models.fields.IntegerField')(default=0, db_index=True)),
+            ('index_note', self.gf('django.db.models.fields.FloatField')(default=0.0, db_index=True)),
+            ('wikipedia_revision_id', self.gf('django.db.models.fields.BigIntegerField')(null=True, blank=True)),
+        ))
+        db.send_create_signal('hdabo', ['TaggedSheet'])
+
+        # Adding model 'Datasheet_domains'
+        db.create_table('hdabo_datasheet_domains', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
+            ('sort_value', self.gf('django.db.models.fields.IntegerField')()),
+            ('domain', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Domain'])),
+        ))
+        db.send_create_signal('hdabo', ['Datasheet_domains'])
+
+        # Adding model 'Datasheet_highschool_periods'
+        db.create_table('hdabo_datasheet_highschool_periods', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
+            ('sort_value', self.gf('django.db.models.fields.IntegerField')()),
+            ('timeperiod', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.TimePeriod'])),
+        ))
+        db.send_create_signal('hdabo', ['Datasheet_highschool_periods'])
+
+        # Adding model 'Datasheet_highschool_themes'
+        db.create_table('hdabo_datasheet_highschool_themes', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
+            ('sort_value', self.gf('django.db.models.fields.IntegerField')()),
+            ('domain', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Domain'])),
+        ))
+        db.send_create_signal('hdabo', ['Datasheet_highschool_themes'])
+
+        # Adding model 'Datasheet_college_periods'
+        db.create_table('hdabo_datasheet_college_periods', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
+            ('sort_value', self.gf('django.db.models.fields.IntegerField')()),
+            ('timeperiod', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.TimePeriod'])),
+        ))
+        db.send_create_signal('hdabo', ['Datasheet_college_periods'])
+
+        # Adding model 'Datasheet_college_themes'
+        db.create_table('hdabo_datasheet_college_themes', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
+            ('sort_value', self.gf('django.db.models.fields.IntegerField')()),
+            ('domain', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Domain'])),
+        ))
+        db.send_create_signal('hdabo', ['Datasheet_college_themes'])
+
+        # Adding model 'Datasheet_primary_periods'
+        db.create_table('hdabo_datasheet_primary_periods', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
+            ('sort_value', self.gf('django.db.models.fields.IntegerField')()),
+            ('timeperiod', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.TimePeriod'])),
+        ))
+        db.send_create_signal('hdabo', ['Datasheet_primary_periods'])
+
+        # Adding model 'Datasheet_primary_themes'
+        db.create_table('hdabo_datasheet_primary_themes', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
+            ('sort_value', self.gf('django.db.models.fields.IntegerField')()),
+            ('domain', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Domain'])),
+        ))
+        db.send_create_signal('hdabo', ['Datasheet_primary_themes'])
+
+
+    def backwards(self, orm):
+        
+        # Removing unique constraint on 'Tag', fields ['label', 'original_label', 'url_status']
+        db.delete_unique('hdabo_tag', ['label', 'original_label', 'url_status'])
+
+        # Removing unique constraint on 'Domain', fields ['label', 'school_period']
+        db.delete_unique('hdabo_domain', ['label', 'school_period'])
+
+        # Removing unique constraint on 'TimePeriod', fields ['label', 'school_period']
+        db.delete_unique('hdabo_timeperiod', ['label', 'school_period'])
+
+        # Deleting model 'Organisation'
+        db.delete_table('hdabo_organisation')
+
+        # Deleting model 'Author'
+        db.delete_table('hdabo_author')
+
+        # Deleting model 'TimePeriod'
+        db.delete_table('hdabo_timeperiod')
+
+        # Deleting model 'Domain'
+        db.delete_table('hdabo_domain')
+
+        # Deleting model 'DocumentFormat'
+        db.delete_table('hdabo_documentformat')
+
+        # Deleting model 'TagCategory'
+        db.delete_table('hdabo_tagcategory')
+
+        # Deleting model 'Tag'
+        db.delete_table('hdabo_tag')
+
+        # Deleting model 'Location'
+        db.delete_table('hdabo_location')
+
+        # Deleting model 'Datasheet'
+        db.delete_table('hdabo_datasheet')
+
+        # Deleting model 'TaggedSheet'
+        db.delete_table('hdabo_taggedsheet')
+
+        # Deleting model 'Datasheet_domains'
+        db.delete_table('hdabo_datasheet_domains')
+
+        # Deleting model 'Datasheet_highschool_periods'
+        db.delete_table('hdabo_datasheet_highschool_periods')
+
+        # Deleting model 'Datasheet_highschool_themes'
+        db.delete_table('hdabo_datasheet_highschool_themes')
+
+        # Deleting model 'Datasheet_college_periods'
+        db.delete_table('hdabo_datasheet_college_periods')
+
+        # Deleting model 'Datasheet_college_themes'
+        db.delete_table('hdabo_datasheet_college_themes')
+
+        # Deleting model 'Datasheet_primary_periods'
+        db.delete_table('hdabo_datasheet_primary_periods')
+
+        # Deleting model 'Datasheet_primary_themes'
+        db.delete_table('hdabo_datasheet_primary_themes')
+
+
+    models = {
+        'auth.group': {
+            'Meta': {'object_name': 'Group'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+        },
+        'auth.permission': {
+            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+        },
+        'auth.user': {
+            'Meta': {'object_name': 'User'},
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+        },
+        'contenttypes.contenttype': {
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+        },
+        'hdabo.author': {
+            'Meta': {'object_name': 'Author'},
+            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.datasheet': {
+            'Meta': {'object_name': 'Datasheet'},
+            'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
+            'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+            'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
+            'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
+            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+            'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+            'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+            'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']"}),
+            'original_creation_date': ('django.db.models.fields.DateField', [], {}),
+            'original_modification_date': ('django.db.models.fields.DateField', [], {}),
+            'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+            'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
+            'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
+            'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+            'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.datasheet_college_periods': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+        },
+        'hdabo.datasheet_college_themes': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.datasheet_domains': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.datasheet_highschool_periods': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+        },
+        'hdabo.datasheet_highschool_themes': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.datasheet_primary_periods': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+        },
+        'hdabo.datasheet_primary_themes': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.documentformat': {
+            'Meta': {'object_name': 'DocumentFormat'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+        },
+        'hdabo.domain': {
+            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+            'school_period': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.location': {
+            'Meta': {'object_name': 'Location'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
+        },
+        'hdabo.organisation': {
+            'Meta': {'object_name': 'Organisation'},
+            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+            'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.tag': {
+            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
+            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+            'wikipedia_url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.tagcategory': {
+            'Meta': {'object_name': 'TagCategory'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+        },
+        'hdabo.taggedsheet': {
+            'Meta': {'object_name': 'TaggedSheet'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
+            'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+            'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
+            'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.timeperiod': {
+            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+            'school_period': ('django.db.models.fields.IntegerField', [], {})
+        }
+    }
+
+    complete_apps = ['hdabo']
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/migrations/0002_backport_hdabo_sf.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,231 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+        
+        # Adding field 'Tag.alternative_label'
+        db.add_column('hdabo_tag', 'alternative_label', self.gf('django.db.models.fields.CharField')(max_length=1024, null=True, blank=True), keep_default=False) #@UndefinedVariable
+
+        # Adding field 'Tag.created_at'
+        db.add_column('hdabo_tag', 'created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, default=datetime.datetime.utcnow, blank=True), keep_default=False) #@UndefinedVariable
+
+        # Adding field 'Tag.alternative_wikipedia_url'
+        db.add_column('hdabo_tag', 'alternative_wikipedia_url', self.gf('django.db.models.fields.URLField')(max_length=2048, null=True, blank=True), keep_default=False) #@UndefinedVariable
+
+        # Adding field 'Tag.alternative_wikipedia_pageid'
+        db.add_column('hdabo_tag', 'alternative_wikipedia_pageid', self.gf('django.db.models.fields.BigIntegerField')(null=True, blank=True), keep_default=False) #@UndefinedVariable
+
+        # Adding field 'TaggedSheet.created_at'
+        db.add_column('hdabo_taggedsheet', 'created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, default=datetime.datetime.utcnow, blank=True), keep_default=False) #@UndefinedVariable
+
+
+    def backwards(self, orm):
+        
+        # Deleting field 'Tag.alternative_label'
+        db.delete_column('hdabo_tag', 'alternative_label') #@UndefinedVariable
+
+        # Deleting field 'Tag.created_at'
+        db.delete_column('hdabo_tag', 'created_at') #@UndefinedVariable
+
+        # Deleting field 'Tag.alternative_wikipedia_url'
+        db.delete_column('hdabo_tag', 'alternative_wikipedia_url') #@UndefinedVariable
+
+        # Deleting field 'Tag.alternative_wikipedia_pageid'
+        db.delete_column('hdabo_tag', 'alternative_wikipedia_pageid') #@UndefinedVariable
+
+        # Deleting field 'TaggedSheet.created_at'
+        db.delete_column('hdabo_taggedsheet', 'created_at') #@UndefinedVariable
+
+
+    models = {
+        'auth.group': {
+            'Meta': {'object_name': 'Group'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+        },
+        'auth.permission': {
+            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+        },
+        'auth.user': {
+            'Meta': {'object_name': 'User'},
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+        },
+        'contenttypes.contenttype': {
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+        },
+        'hdabo.author': {
+            'Meta': {'object_name': 'Author'},
+            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.datasheet': {
+            'Meta': {'object_name': 'Datasheet'},
+            'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
+            'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+            'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
+            'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
+            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+            'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+            'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+            'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']"}),
+            'original_creation_date': ('django.db.models.fields.DateField', [], {}),
+            'original_modification_date': ('django.db.models.fields.DateField', [], {}),
+            'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+            'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
+            'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
+            'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+            'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.datasheet_college_periods': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+        },
+        'hdabo.datasheet_college_themes': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.datasheet_domains': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.datasheet_highschool_periods': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+        },
+        'hdabo.datasheet_highschool_themes': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.datasheet_primary_periods': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+        },
+        'hdabo.datasheet_primary_themes': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.documentformat': {
+            'Meta': {'object_name': 'DocumentFormat'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+        },
+        'hdabo.domain': {
+            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+            'school_period': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.location': {
+            'Meta': {'object_name': 'Location'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
+        },
+        'hdabo.organisation': {
+            'Meta': {'object_name': 'Organisation'},
+            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+            'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.tag': {
+            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
+            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+            'wikipedia_url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.tagcategory': {
+            'Meta': {'object_name': 'TagCategory'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+        },
+        'hdabo.taggedsheet': {
+            'Meta': {'object_name': 'TaggedSheet'},
+            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
+            'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+            'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
+            'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.timeperiod': {
+            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+            'school_period': ('django.db.models.fields.IntegerField', [], {})
+        }
+    }
+
+    complete_apps = ['hdabo']
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/migrations/0003_update_redirection.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,221 @@
+# encoding: utf-8
+from south.v2 import DataMigration
+from hdabo import utils, wp_utils
+import sys
+from wikitools import wiki
+
+class Migration(DataMigration):
+
+    def forwards(self, orm):
+        queryset = orm.Tag.objects.filter(url_status=1, alternative_label=None)
+        queryset_count = queryset.count() 
+        
+        sys.stdout.write("Processing %d tags\n" % (queryset_count))
+        sys.stdout.flush()
+        site = wiki.Wiki("http://fr.wikipedia.org/w/api.php") #@UndefinedVariable
+        
+        
+        for i,tag in enumerate(queryset):
+            utils.show_progress(i+1, queryset_count, tag.label, 50)
+            wp_res = wp_utils.query_wikipedia_title(site, pageid=tag.wikipedia_pageid)
+            tag.alternative_label = wp_res['alternative_label']
+            tag.alternative_wikipedia_url = wp_res['alternative_wikipedia_url']
+            tag.alternative_wikipedia_pageid = wp_res['alternative_pageid']
+            tag.save()
+
+        sys.stdout.write("\n")
+        sys.stdout.flush()
+        
+
+    def backwards(self, orm):        
+        pass
+
+
+    models = {
+        'auth.group': {
+            'Meta': {'object_name': 'Group'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+        },
+        'auth.permission': {
+            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+        },
+        'auth.user': {
+            'Meta': {'object_name': 'User'},
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+        },
+        'contenttypes.contenttype': {
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+        },
+        'hdabo.author': {
+            'Meta': {'object_name': 'Author'},
+            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.datasheet': {
+            'Meta': {'object_name': 'Datasheet'},
+            'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
+            'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+            'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
+            'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
+            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+            'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+            'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+            'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']"}),
+            'original_creation_date': ('django.db.models.fields.DateField', [], {}),
+            'original_modification_date': ('django.db.models.fields.DateField', [], {}),
+            'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+            'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
+            'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
+            'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+            'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.datasheet_college_periods': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+        },
+        'hdabo.datasheet_college_themes': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.datasheet_domains': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.datasheet_highschool_periods': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+        },
+        'hdabo.datasheet_highschool_themes': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.datasheet_primary_periods': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+        },
+        'hdabo.datasheet_primary_themes': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.documentformat': {
+            'Meta': {'object_name': 'DocumentFormat'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+        },
+        'hdabo.domain': {
+            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+            'school_period': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.location': {
+            'Meta': {'object_name': 'Location'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
+        },
+        'hdabo.organisation': {
+            'Meta': {'object_name': 'Organisation'},
+            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+            'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.tag': {
+            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
+            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+            'wikipedia_url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+        },
+        'hdabo.tagcategory': {
+            'Meta': {'object_name': 'TagCategory'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+        },
+        'hdabo.taggedsheet': {
+            'Meta': {'object_name': 'TaggedSheet'},
+            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
+            'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+            'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
+            'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.timeperiod': {
+            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+            'school_period': ('django.db.models.fields.IntegerField', [], {})
+        }
+    }
+
+    complete_apps = ['hdabo']
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/migrations/0004_index_tag.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,238 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+        
+        # Adding index on 'Tag', fields ['wikipedia_pageid']
+        db.create_index('hdabo_tag', ['wikipedia_pageid'])
+
+        # Adding index on 'Tag', fields ['wikipedia_url']
+        db.create_index('hdabo_tag', ['wikipedia_url'])
+
+        # Adding index on 'Tag', fields ['alternative_wikipedia_url']
+        db.create_index('hdabo_tag', ['alternative_wikipedia_url'])
+
+        # Adding index on 'Tag', fields ['url_status']
+        db.create_index('hdabo_tag', ['url_status'])
+
+        # Adding index on 'Tag', fields ['dbpedia_uri']
+        db.create_index('hdabo_tag', ['dbpedia_uri'])
+
+        # Adding index on 'Tag', fields ['alternative_wikipedia_pageid']
+        db.create_index('hdabo_tag', ['alternative_wikipedia_pageid'])
+
+
+    def backwards(self, orm):
+        
+        # Removing index on 'Tag', fields ['alternative_wikipedia_pageid']
+        db.delete_index('hdabo_tag', ['alternative_wikipedia_pageid'])
+
+        # Removing index on 'Tag', fields ['dbpedia_uri']
+        db.delete_index('hdabo_tag', ['dbpedia_uri'])
+
+        # Removing index on 'Tag', fields ['url_status']
+        db.delete_index('hdabo_tag', ['url_status'])
+
+        # Removing index on 'Tag', fields ['alternative_wikipedia_url']
+        db.delete_index('hdabo_tag', ['alternative_wikipedia_url'])
+
+        # Removing index on 'Tag', fields ['wikipedia_url']
+        db.delete_index('hdabo_tag', ['wikipedia_url'])
+
+        # Removing index on 'Tag', fields ['wikipedia_pageid']
+        db.delete_index('hdabo_tag', ['wikipedia_pageid'])
+
+
+    models = {
+        'auth.group': {
+            'Meta': {'object_name': 'Group'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+        },
+        'auth.permission': {
+            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+        },
+        'auth.user': {
+            'Meta': {'object_name': 'User'},
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+        },
+        'contenttypes.contenttype': {
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+        },
+        'hdabo.author': {
+            'Meta': {'object_name': 'Author'},
+            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.datasheet': {
+            'Meta': {'object_name': 'Datasheet'},
+            'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
+            'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+            'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
+            'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
+            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+            'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+            'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+            'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']"}),
+            'original_creation_date': ('django.db.models.fields.DateField', [], {}),
+            'original_modification_date': ('django.db.models.fields.DateField', [], {}),
+            'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+            'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
+            'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
+            'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+            'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.datasheet_college_periods': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+        },
+        'hdabo.datasheet_college_themes': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.datasheet_domains': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.datasheet_highschool_periods': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+        },
+        'hdabo.datasheet_highschool_themes': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.datasheet_primary_periods': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+        },
+        'hdabo.datasheet_primary_themes': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.documentformat': {
+            'Meta': {'object_name': 'DocumentFormat'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+        },
+        'hdabo.domain': {
+            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+            'school_period': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.location': {
+            'Meta': {'object_name': 'Location'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
+        },
+        'hdabo.organisation': {
+            'Meta': {'object_name': 'Organisation'},
+            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+            'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.tag': {
+            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
+            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.tagcategory': {
+            'Meta': {'object_name': 'TagCategory'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+        },
+        'hdabo.taggedsheet': {
+            'Meta': {'object_name': 'TaggedSheet'},
+            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
+            'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+            'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
+            'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.timeperiod': {
+            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+            'school_period': ('django.db.models.fields.IntegerField', [], {})
+        }
+    }
+
+    complete_apps = ['hdabo']
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/migrations/0005_auto__chg_field_datasheet_organisation.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,208 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+        
+        # Changing field 'Datasheet.organisation'
+        db.alter_column('hdabo_datasheet', 'organisation_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Organisation'], null=True))
+
+
+    def backwards(self, orm):
+        
+        # User chose to not deal with backwards NULL issues for 'Datasheet.organisation'
+        raise RuntimeError("Cannot reverse this migration. 'Datasheet.organisation' and its values cannot be restored.")
+
+
+    models = {
+        'auth.group': {
+            'Meta': {'object_name': 'Group'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+        },
+        'auth.permission': {
+            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+        },
+        'auth.user': {
+            'Meta': {'object_name': 'User'},
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 6, 21, 18, 18, 22, 503161)'}),
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 6, 21, 18, 18, 22, 503032)'}),
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+        },
+        'contenttypes.contenttype': {
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+        },
+        'hdabo.author': {
+            'Meta': {'object_name': 'Author'},
+            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.datasheet': {
+            'Meta': {'object_name': 'Datasheet'},
+            'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
+            'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+            'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
+            'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
+            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+            'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+            'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+            'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']", 'null': 'True'}),
+            'original_creation_date': ('django.db.models.fields.DateField', [], {}),
+            'original_modification_date': ('django.db.models.fields.DateField', [], {}),
+            'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+            'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
+            'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
+            'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+            'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.datasheet_college_periods': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+        },
+        'hdabo.datasheet_college_themes': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.datasheet_domains': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.datasheet_highschool_periods': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+        },
+        'hdabo.datasheet_highschool_themes': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.datasheet_primary_periods': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+        },
+        'hdabo.datasheet_primary_themes': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.documentformat': {
+            'Meta': {'object_name': 'DocumentFormat'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+        },
+        'hdabo.domain': {
+            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+            'school_period': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.location': {
+            'Meta': {'object_name': 'Location'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
+        },
+        'hdabo.organisation': {
+            'Meta': {'object_name': 'Organisation'},
+            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+            'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.tag': {
+            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
+            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.tagcategory': {
+            'Meta': {'object_name': 'TagCategory'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+        },
+        'hdabo.taggedsheet': {
+            'Meta': {'object_name': 'TaggedSheet'},
+            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
+            'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+            'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
+            'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.timeperiod': {
+            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+            'school_period': ('django.db.models.fields.IntegerField', [], {})
+        }
+    }
+
+    complete_apps = ['hdabo']
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/migrations/0006_auto__add_user__chg_field_datasheet_validator.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,250 @@
+# -*- coding: utf-8 -*-
+from south.utils import datetime_utils as datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+        # Adding model 'User'
+        db.create_table('auth_user', (
+            (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('password', self.gf('django.db.models.fields.CharField')(max_length=128)),
+            ('last_login', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)),
+            ('is_superuser', self.gf('django.db.models.fields.BooleanField')(default=False)),
+            ('username', self.gf('django.db.models.fields.CharField')(unique=True, max_length=30)),
+            ('first_name', self.gf('django.db.models.fields.CharField')(max_length=30, blank=True)),
+            ('last_name', self.gf('django.db.models.fields.CharField')(max_length=30, blank=True)),
+            ('email', self.gf('django.db.models.fields.EmailField')(max_length=75, blank=True)),
+            ('is_staff', self.gf('django.db.models.fields.BooleanField')(default=False)),
+            ('is_active', self.gf('django.db.models.fields.BooleanField')(default=True)),
+            ('date_joined', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)),
+        ))
+        db.send_create_signal(u'hdabo', ['User'])
+
+        # Adding M2M table for field groups on 'User'
+        m2m_table_name = db.shorten_name('auth_user_groups')
+        db.create_table(m2m_table_name, (
+            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+            ('user', models.ForeignKey(orm[u'hdabo.user'], null=False)),
+            ('group', models.ForeignKey(orm[u'auth.group'], null=False))
+        ))
+        db.create_unique(m2m_table_name, ['user_id', 'group_id'])
+
+        # Adding M2M table for field user_permissions on 'User'
+        m2m_table_name = db.shorten_name('auth_user_user_permissions')
+        db.create_table(m2m_table_name, (
+            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+            ('user', models.ForeignKey(orm[u'hdabo.user'], null=False)),
+            ('permission', models.ForeignKey(orm[u'auth.permission'], null=False))
+        ))
+        db.create_unique(m2m_table_name, ['user_id', 'permission_id'])
+
+
+        # Changing field 'Datasheet.validator'
+        db.alter_column(u'hdabo_datasheet', 'validator_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.User'], null=True))
+
+    def backwards(self, orm):
+        # Deleting model 'User'
+        db.delete_table('auth_user')
+
+        # Removing M2M table for field groups on 'User'
+        db.delete_table(db.shorten_name('auth_user_groups'))
+
+        # Removing M2M table for field user_permissions on 'User'
+        db.delete_table(db.shorten_name('auth_user_user_permissions'))
+
+
+        # Changing field 'Datasheet.validator'
+        db.alter_column(u'hdabo_datasheet', 'validator_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True))
+
+    models = {
+        u'auth.group': {
+            'Meta': {'object_name': 'Group'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+        },
+        u'auth.permission': {
+            'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+        },
+        u'contenttypes.contenttype': {
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+        },
+        u'hdabo.author': {
+            'Meta': {'object_name': 'Author'},
+            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
+        },
+        u'hdabo.datasheet': {
+            'Meta': {'object_name': 'Datasheet'},
+            'author': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
+            'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': u"orm['hdabo.Datasheet_college_periods']", 'to': u"orm['hdabo.TimePeriod']"}),
+            'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': u"orm['hdabo.Datasheet_college_themes']", 'to': u"orm['hdabo.Domain']"}),
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': u"orm['hdabo.Datasheet_domains']", 'to': u"orm['hdabo.Domain']"}),
+            'format': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
+            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': u"orm['hdabo.Datasheet_highschool_periods']", 'to': u"orm['hdabo.TimePeriod']"}),
+            'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': u"orm['hdabo.Datasheet_highschool_themes']", 'to': u"orm['hdabo.Domain']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+            'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+            'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Organisation']", 'null': 'True'}),
+            'original_creation_date': ('django.db.models.fields.DateField', [], {}),
+            'original_modification_date': ('django.db.models.fields.DateField', [], {}),
+            'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': u"orm['hdabo.Datasheet_primary_periods']", 'to': u"orm['hdabo.TimePeriod']"}),
+            'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': u"orm['hdabo.Datasheet_primary_themes']", 'to': u"orm['hdabo.Domain']"}),
+            'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['hdabo.Tag']", 'through': u"orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'town': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
+            'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+            'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.User']", 'null': 'True', 'blank': 'True'})
+        },
+        u'hdabo.datasheet_college_periods': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Datasheet']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.TimePeriod']"})
+        },
+        u'hdabo.datasheet_college_themes': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Domain']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        u'hdabo.datasheet_domains': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Domain']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        u'hdabo.datasheet_highschool_periods': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Datasheet']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.TimePeriod']"})
+        },
+        u'hdabo.datasheet_highschool_themes': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Domain']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        u'hdabo.datasheet_primary_periods': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Datasheet']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.TimePeriod']"})
+        },
+        u'hdabo.datasheet_primary_themes': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Domain']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        u'hdabo.documentformat': {
+            'Meta': {'object_name': 'DocumentFormat'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+        },
+        u'hdabo.domain': {
+            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+            'school_period': ('django.db.models.fields.IntegerField', [], {})
+        },
+        u'hdabo.location': {
+            'Meta': {'object_name': 'Location'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
+        },
+        u'hdabo.organisation': {
+            'Meta': {'object_name': 'Organisation'},
+            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+            'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        u'hdabo.tag': {
+            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
+            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        u'hdabo.tagcategory': {
+            'Meta': {'object_name': 'TagCategory'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+        },
+        u'hdabo.taggedsheet': {
+            'Meta': {'object_name': 'TaggedSheet'},
+            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Datasheet']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
+            'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+            'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['hdabo.Tag']"}),
+            'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
+        },
+        u'hdabo.timeperiod': {
+            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+            'school_period': ('django.db.models.fields.IntegerField', [], {})
+        },
+        u'hdabo.user': {
+            'Meta': {'object_name': 'User', 'db_table': "'auth_user'"},
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+        }
+    }
+
+    complete_apps = ['hdabo']
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/models.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,404 @@
+# -*- coding: utf-8 -*-
+
+from django.conf import settings
+from django.contrib.auth.models import User
+from django.db import models
+from hdabo.utils import Property, normalize
+import datetime
+
+
+
+class SortedModelManager(models.Manager):
+    use_for_related_fields = True
+    def get_query_set(self):
+        qs = super(SortedModelManager, self).get_query_set()
+        if getattr(self, 'through', None) is not None and getattr(self.through, 'Meta', None) is not None and getattr(self.through.Meta, 'ordering', None) is not None:
+            qs = qs.order_by(*[self.through._meta.db_table + "." + f for f in self.through.Meta.ordering])
+        return qs
+
+
+class Organisation(models.Model):
+    hda_id = models.CharField(max_length=512, unique=True, blank=False, null=False)
+    name = models.CharField(max_length=512, unique=False, blank=False, null=False)
+    location = models.CharField(max_length=512, unique=False, blank=True, null=True)
+    website = models.CharField(max_length=2048, unique=False, blank=True, null=True)
+    
+class Author(models.Model):
+    hda_id = models.CharField(max_length=512, unique=True, blank=False, null=False)
+    lastname = models.CharField(max_length=512, unique=False, blank=True, null=True)
+    firstname = models.CharField(max_length=512, unique=False, blank=True, null=True)
+
+class TimePeriod(models.Model):
+    TIME_PERIOD_CHOICES = (
+        (1, u'Primaire'),
+        (2, u'Collège'),
+        (3, u'Lycée'),
+    )
+    TIME_PERIOD_DICT = {
+        u'Primaire': 1,
+        u'Collège': 2,
+        u'Lycée': 3,
+    }
+    label = models.CharField(max_length=512, unique=False, blank=False, null=False)
+    school_period = models.IntegerField(choices=TIME_PERIOD_CHOICES)
+    
+    objects = SortedModelManager()
+    
+    class Meta:
+        unique_together = ("label", "school_period")
+
+    def __unicode__(self):
+        return unicode(self.label)
+
+class Domain(models.Model):
+    DOMAIN_PERIOD_CHOICES = (
+        (0, u'Global'),
+        (1, u'Primaire'),
+        (2, u'Collège'),
+        (3, u'Lycée'),
+    )
+    DOMAIN_PERIOD_DICT = {
+        u'Global': 0,
+        u'Primaire': 1,
+        u'Collège': 2,
+        u'Lycée': 3,
+    }
+    label = models.CharField(max_length=512, unique=False, blank=False, null=False)
+    school_period = models.IntegerField(choices=DOMAIN_PERIOD_CHOICES)
+
+    objects = SortedModelManager()
+
+    class Meta:
+        unique_together = ("label", "school_period")
+
+    def __unicode__(self):
+        return unicode(self.label)
+
+
+class DocumentFormat(models.Model):
+    label = models.CharField(max_length=512, unique=True, blank=False, null=False)
+
+    def __unicode__(self):
+        return unicode(self.label)
+    
+class TagCategory(models.Model):
+    label = models.CharField(max_length=512, unique=True, blank=False, null=False)
+    
+    def __unicode__(self):
+        return unicode(self.label)
+    
+    class Meta:
+        verbose_name_plural = "TagCategories"
+
+class Tag(models.Model):
+    TAG_URL_STATUS_CHOICES = (
+        (0, "null_result"),
+        (1, "redirection"),
+        (2, "homonyme"),
+        (3, "match"),
+        (4, "unsematized"),
+    )
+    
+    TAG_URL_STATUS_DICT = {
+        "null_result":0,
+        "redirection":1,
+        "homonyme":2,
+        "match":3,
+        "unsemantized":4,
+    }
+    
+    label = models.CharField(max_length=1024, unique=False, blank=False, null=False, db_index=True)
+    alternative_label = models.CharField(max_length=1024, unique=False, blank=True, null=True)
+    normalized_label = models.CharField(max_length=1024, unique=False, blank=False, null=False, db_index=True, editable=False)
+    created_at = models.DateTimeField(auto_now_add=True)
+    original_label = models.CharField(max_length=1024, unique=False, blank=False, null=False, editable=False)
+    alias = models.CharField(max_length=1024, unique=False, blank=True, null=True)
+    category = models.ForeignKey(TagCategory, null=True, blank=True)
+    wikipedia_url = models.URLField(max_length=2048, blank=True, null=True, db_index=True)
+    wikipedia_pageid = models.BigIntegerField(unique=False, blank=True, null=True, db_index=True)
+    alternative_wikipedia_url = models.URLField(max_length=2048, blank=True, null=True, db_index=True)
+    alternative_wikipedia_pageid = models.BigIntegerField(unique=False, blank=True, null=True, db_index=True)
+    url_status = models.IntegerField(choices=TAG_URL_STATUS_CHOICES, blank=True, null=True, default=None, db_index=True)
+    dbpedia_uri = models.URLField(max_length=2048, blank=True, null=True, db_index=True)
+    popularity = models.IntegerField(blank=False, null=False, default=0, db_index=True)
+
+    @Property
+    def url_status_text(): #@NoSelf
+        def fget(self):
+            return self.TAG_URL_STATUS_CHOICES[self.url_status][1]
+        
+        return locals()
+    
+    def save(self, *args, **kwargs):
+        self.normalized_label = normalize(self.label)
+        super(Tag, self).save(*args, **kwargs) 
+            
+    class Meta:
+        unique_together = (('label', 'original_label', 'url_status'),)
+        
+class Location(models.Model):
+    name = models.CharField(max_length=512, unique=False, blank=False, null=False)
+    insee = models.CharField(max_length=5, unique=True, blank=False, null=False)
+
+    def __unicode__(self):
+        return unicode("%s : %s" % (self.name, self.insee))
+
+
+def generate_m2m_setter(m2m_field_name):
+    
+    def set_m2m_field(self, list):
+        
+        m2m_manager = getattr(self, m2m_field_name)
+        m2m_manager.clear()
+        
+        through_klass = set_m2m_field.cache.get('through_klass', None)
+        if through_klass is None:
+            field = getattr(self.__class__, m2m_field_name)
+            through_klass = field.through
+            set_m2m_field.cache['through_klass'] = through_klass
+            for f in through_klass._meta.fields:
+                if isinstance(f, models.ForeignKey) and f.name != "datasheet":
+                    set_m2m_field.cache['target_obj_field_name'] = f.name
+                    break
+        target_obj_field_name = set_m2m_field.cache['target_obj_field_name']
+
+        for i, obj in enumerate(list):
+            kwargs = {
+                'datasheet': self,
+                'sort_value' : i,
+                target_obj_field_name: obj
+            }
+            new_rel = through_klass(**kwargs)
+            new_rel.save()
+    set_m2m_field.cache = {}
+            
+    return set_m2m_field
+
+
+class Datasheet(models.Model):
+    hda_id = models.CharField(max_length=512, unique=True, blank=False, null=False)
+    author = models.ForeignKey(Author, null=True, blank=True, serialize=False)
+    organisation = models.ForeignKey(Organisation, serialize=False, null=True)
+    title = models.CharField(max_length=2048, unique=False, blank=False, null=False, serialize=False)
+    description = models.TextField(blank=True, null=True, serialize=False)
+    url = models.URLField(max_length=2048, blank=True, null=True, serialize=False)
+    domains = models.ManyToManyField(Domain, limit_choices_to={'school_period':Domain.DOMAIN_PERIOD_DICT[u'Global']}, related_name="datasheets", through="Datasheet_domains", serialize=False)
+    primary_periods = models.ManyToManyField(TimePeriod, limit_choices_to={'school_period':TimePeriod.TIME_PERIOD_DICT[u'Primaire']}, related_name="primary_periods_datasheets", through="Datasheet_primary_periods", serialize=False)
+    college_periods = models.ManyToManyField(TimePeriod, limit_choices_to={'school_period':TimePeriod.TIME_PERIOD_DICT[u'Collège']}, related_name="college_periods_datasheets", through="Datasheet_college_periods", serialize=False)
+    highschool_periods = models.ManyToManyField(TimePeriod, limit_choices_to={'school_period':TimePeriod.TIME_PERIOD_DICT[u'Lycée']}, related_name="highschool_periods_datasheets", through="Datasheet_highschool_periods", serialize=False)
+    primary_themes = models.ManyToManyField(Domain, limit_choices_to={'school_period':Domain.DOMAIN_PERIOD_DICT[u'Primaire']}, related_name="primary_themes_datasheets", through="Datasheet_primary_themes", serialize=False)
+    college_themes = models.ManyToManyField(Domain, limit_choices_to={'school_period':Domain.DOMAIN_PERIOD_DICT[u'Collège']}, related_name="college_themes_datasheets", through="Datasheet_college_themes", serialize=False)
+    highschool_themes = models.ManyToManyField(Domain, limit_choices_to={'school_period':Domain.DOMAIN_PERIOD_DICT[u'Lycée']}, related_name="highschool_themes_datasheets", through="Datasheet_highschool_themes", serialize=False)
+    town = models.ForeignKey(Location, null=True, blank=True, serialize=False)
+    format = models.ForeignKey(DocumentFormat, null=True, blank=True, serialize=False)
+    original_creation_date = models.DateField(serialize=False)
+    original_modification_date = models.DateField(serialize=False)
+    modification_datetime = models.DateTimeField(auto_now=True, serialize=False)
+    validation_date = models.DateTimeField(null=True, blank=True, serialize=False)
+    validated = models.BooleanField(default=False, db_index=True)
+    validator = models.ForeignKey(User, null=True, blank=True, serialize=False)
+    manual_order = models.BooleanField(default=False, db_index=True, serialize=False)
+    tags = models.ManyToManyField(Tag, through='TaggedSheet', serialize=False)
+    
+    def natural_key(self):
+        return self.hda_id
+        
+    def validate(self, user):
+        self.validation_date = datetime.datetime.now()
+        self.validated = True
+        self.validator = user
+        self.save()
+    
+    def unvalidate(self):
+        self.validation_date = datetime.datetime.min
+        self.validated = False
+        self.validator = None
+        self.save()
+        
+        
+    set_domains = generate_m2m_setter("domains")
+    
+    @Property
+    def domains_list(): #@NoSelf
+        def fget(self):
+            return [d.label for d in self.domains.all()]
+        
+        return locals() 
+
+    @Property
+    def domains_text(): #@NoSelf
+        def fget(self):
+            return "; ".join(self.domains_list)
+        
+        return locals() 
+
+
+    set_primary_periods = generate_m2m_setter("primary_periods")
+
+    @Property
+    def primary_periods_list(): #@NoSelf
+        def fget(self):
+            return [d.label for d in self.primary_periods.all()] 
+
+        return locals() 
+
+    
+    @Property
+    def primary_periods_text(): #@NoSelf
+        def fget(self):
+            return "; ".join(self.primary_periods_list) 
+
+        return locals() 
+
+    set_college_periods = generate_m2m_setter("college_periods")
+
+    @Property
+    def college_periods_list(): #@NoSelf
+        def fget(self):
+            return [d.label for d in self.college_periods.all()] 
+
+        return locals() 
+
+    @Property
+    def college_periods_text(): #@NoSelf
+        def fget(self):
+            return "; ".join(self.college_periods_list) 
+
+        return locals() 
+
+    set_highschool_periods = generate_m2m_setter("highschool_periods")
+
+    @Property
+    def highschool_periods_list(): #@NoSelf
+        def fget(self):
+            return [d.label for d in self.highschool_periods.all()] 
+
+        return locals() 
+
+    @Property
+    def highschool_periods_text(): #@NoSelf
+        def fget(self):
+            return "; ".join(self.highschool_periods_list) 
+
+        return locals() 
+
+    set_primary_themes = generate_m2m_setter("primary_themes")
+
+    @Property
+    def primary_themes_list(): #@NoSelf
+        def fget(self):
+            return [d.label for d in self.primary_themes.all()] 
+
+        return locals() 
+
+
+    @Property
+    def primary_themes_text(): #@NoSelf
+        def fget(self):
+            return "; ".join(self.primary_themes_list) 
+
+        return locals() 
+
+    set_college_themes = generate_m2m_setter("college_themes")
+
+    @Property
+    def college_themes_list(): #@NoSelf
+        def fget(self):
+            return [d.label for d in self.college_themes.all()] 
+
+        return locals() 
+    
+    @Property
+    def college_themes_text(): #@NoSelf
+        def fget(self):
+            return "; ".join(self.college_themes_list) 
+
+        return locals() 
+
+    set_highschool_themes = generate_m2m_setter("highschool_themes")
+
+    @Property
+    def highschool_themes_list(): #@NoSelf
+        def fget(self):
+            return [d.label for d in self.highschool_themes.all()] 
+
+        return locals()
+
+    @Property
+    def highschool_themes_text(): #@NoSelf
+        def fget(self):
+            return "; ".join(self.highschool_themes_list) 
+
+        return locals()
+
+    @Property
+    def town_text(): #@NoSelf
+        def fget(self):
+            return self.town.name if self.town else ""
+        
+        return locals()
+
+    @Property
+    def tags_text(): #@NoSelf
+        def fget(self):
+            return "; ".join([t.label for t in self.tags.all()])
+        
+        return locals()
+
+    @models.permalink
+    def get_absolute_url(self):
+        return ('display_datasheet', (), {
+                    'ds_id': self.hda_id
+                })
+
+
+class TaggedSheet(models.Model):
+    datasheet = models.ForeignKey(Datasheet)
+    tag = models.ForeignKey(Tag)
+    created_at = models.DateTimeField(auto_now_add=True)
+    original_order = models.IntegerField(null=False, blank=False, default=0)
+    order = models.IntegerField(null=False, blank=False, default=0, db_index=True)
+    index_note = models.FloatField(null=False, blank=False, default=0.0, db_index=True)
+    wikipedia_revision_id = models.BigIntegerField(unique=False, blank=True, null=True)
+    
+    @Property
+    def wikipedia_verion_permalink(): #@NoSelf
+        def fget(self):
+            return settings.WIKIPEDIA_VERSION_PERMALINK_TEMPLATE % (unicode(self.wikipedia_revision_id))
+        
+        return locals()
+
+
+class SortedDatasheetLink(models.Model):    
+    datasheet = models.ForeignKey(Datasheet, db_index=True, null=False, blank=False)
+    sort_value = models.IntegerField(null=False, blank=False)
+
+    class Meta:
+        abstract = True
+        ordering = ['sort_value']
+        
+
+class Datasheet_domains(SortedDatasheetLink):
+    domain = models.ForeignKey(Domain, db_index=True, null=False, blank=False)
+
+class Datasheet_highschool_periods(SortedDatasheetLink):
+    timeperiod = models.ForeignKey(TimePeriod, db_index=True, null=False, blank=False)
+
+class Datasheet_highschool_themes(SortedDatasheetLink):
+    domain = models.ForeignKey(Domain, db_index=True, null=False, blank=False)
+
+class Datasheet_college_periods(SortedDatasheetLink):
+    timeperiod = models.ForeignKey(TimePeriod, db_index=True, null=False, blank=False)
+
+class Datasheet_college_themes(SortedDatasheetLink):
+    domain = models.ForeignKey(Domain, db_index=True, null=False, blank=False)
+
+class Datasheet_primary_periods(SortedDatasheetLink):
+    timeperiod = models.ForeignKey(TimePeriod, db_index=True, null=False, blank=False)
+
+class Datasheet_primary_themes(SortedDatasheetLink):
+    domain = models.ForeignKey(Domain, db_index=True, null=False, blank=False)
+    
+        
+
+    
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/modwsgi.wsgi	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,34 @@
+import os, sys, site
+
+def application(environ, start_response):
+    
+    global g_env_set
+    
+    if 'g_env_set' not in globals() or not g_env_set:
+        os.environ.setdefault('DJANGO_SETTINGS_MODULE',environ['DJANGO_SETTINGS_MODULE'])
+    
+        prev_sys_path = list(sys.path)
+    
+        sys.path.append(environ['PROJECT_PATH'])
+        for path in environ.get('PYTHON_PATH',"").split(os.pathsep):
+            if path:
+                site.addsitedir(path)
+    
+        new_sys_path = [] 
+        for item in list(sys.path): 
+            if item not in prev_sys_path and item not in new_sys_path: 
+                new_sys_path.append(item) 
+                sys.path.remove(item)
+        sys.path[:0] = new_sys_path
+        g_env_set = True 
+
+    import django.core.handlers.wsgi
+
+    _application = django.core.handlers.wsgi.WSGIHandler()
+    
+    if environ.get('PYDEV_DEBUG', "False").lower() in ["true", "1", "t"]:
+        import pydevd #@UnresolvedImport
+        pydevd.settrace(suspend=False)
+
+    return _application(environ, start_response)
+        
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/search/french_whoosh_backend.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,209 @@
+# -*- coding: utf-8 -*-
+'''
+
+Adaptation of Haystack' Swoosh backend with french snowball stemming
+
+Created on May 31, 2011
+
+@author: ymh
+'''
+
+from django.conf import settings
+from django.db.models.loading import get_model
+from haystack.backends.whoosh_backend import (
+    SearchBackend as WhooshSearchBackend, SearchQuery as WhooshSearchQuery)
+from haystack.constants import ID, DJANGO_CT, DJANGO_ID
+from haystack.exceptions import SearchBackendError
+from haystack.models import SearchResult
+from whoosh.analysis import (default_pattern, stem, RegexTokenizer, 
+    LowercaseFilter, StopFilter, PyStemmerFilter)
+from whoosh.fields import (ID as WHOOSH_ID, Schema, IDLIST, TEXT, KEYWORD, 
+    NUMERIC, BOOLEAN, DATETIME, NGRAM, NGRAMWORDS)
+
+BACKEND_NAME = 'french_whoosh'
+
+STOP_WORDS = [ u"a", u"afin", u"ai", u"ainsi", u"après", u"attendu", u"au",
+u"aujourd", u"auquel", u"aussi", u"autre", u"autres", u"aux", u"auxquelles",
+u"auxquels", u"avait", u"avant", u"avec", u"avoir", u"c", u"car", u"ce",
+u"ceci", u"cela", u"celle", u"celles", u"celui", u"cependant", u"certain",
+u"certaine", u"certaines", u"certains", u"ces", u"cet", u"cette", u"ceux",
+u"chez", u"ci", u"combien", u"comme", u"comment", u"concernant", u"contre",
+u"d", u"dans", u"je", u"de", u"jusqu", u"debout", u"jusque", u"dedans", u"l",
+u"dehors", u"la", u"delà", u"laquelle", u"depuis", u"le", u"derrière",
+u"lequel", u"des", u"les", u"desquelles", u"lesquelles", u"desquels",
+u"lesquels", u"dessous", u"leur", u"dessus", u"leurs", u"devant", u"lorsque",
+u"devers", u"lui", u"devra", u"là", u"divers", u"ma", u"diverse", u"mais",
+u"diverses", u"malgré", u"doit", u"me", u"donc", u"merci", u"dont", u"mes",
+u"du", u"mien", u"duquel", u"mienne", u"durant", u"miennes", u"dès", u"miens",
+u"elle", u"moi", u"elles", u"moins", u"en", u"mon", u"entre", u"moyennant",
+u"environ", u"même", u"est", u"mêmes", u"et", u"n", u"etc", u"ne", u"etre",
+u"ni", u"eux", u"non", u"excepté", u"nos", u"hormis", u"notre", u"hors",
+u"nous", u"hélas", u"néanmoins", u"hui", u"nôtre", u"il", u"nôtres", u"ils",
+u"on", u"j", u"out", u"ou", u"soit", u"outre", u"son", u"où", u"sont", u"par",
+u"sous", u"parmi", u"suivant", u"partant", u"sur", u"pas", u"ta", u"passé",
+u"te", u"pendant", u"tes", u"plein", u"tien", u"plus", u"tienne", u"plusieurs",
+u"tiennes", u"pour", u"tiens", u"pourquoi", u"toi", u"proche", u"ton", u"près",
+u"tous", u"puisque", u"tout", u"qu", u"toute", u"quand", u"toutes", u"que",
+u"tu", u"quel", u"un", u"quelle", u"une", u"quelles", u"va", u"quels", u"vers",
+u"qui", u"voici", u"quoi", u"voilà", u"quoique", u"vos", u"revoici", u"votre",
+u"revoilà", u"vous", u"s", u"vu", u"sa", u"vôtre", u"sans", u"vôtres",
+u"sauf", u"y", u"se", u"à", u"selon", u"ça", u"seront", u"ès", u"ses",
+u"été", u"si", u"être", u"sien", u"ô", u"sienne", u"siennes", u"siens",
+u"sinon", u"soi"]
+
+def FrenchStemmingAnalyzer(expression=default_pattern, stoplist=STOP_WORDS,
+                     minsize=2, maxsize=None, gaps=False, stemfn=stem,
+                     ignore=None, cachesize=50000):
+    """Composes a RegexTokenizer with a lower case filter, an optional stop
+    filter, and a stemming filter.
+    
+    >>> ana = StemmingAnalyzer()
+    >>> [token.text for token in ana(u"Testing is testing and testing")]
+    [u"test", u"test", u"test"]
+    
+    :param expression: The regular expression pattern to use to extract tokens.
+    :param stoplist: A list of stop words. Set this to None to disable
+        the stop word filter.
+    :param minsize: Words smaller than this are removed from the stream.
+    :param maxsize: Words longer that this are removed from the stream.
+    :param gaps: If True, the tokenizer *splits* on the expression, rather
+        than matching on the expression.
+    :param ignore: a set of words to not stem.
+    :param cachesize: the maximum number of stemmed words to cache. The larger
+        this number, the faster stemming will be but the more memory it will
+        use.
+    """
+    
+    ret = RegexTokenizer(expression=expression, gaps=gaps)
+    chain = ret | LowercaseFilter()
+    if stoplist is not None:
+        chain = chain | StopFilter(stoplist=stoplist, minsize=minsize,
+                                   maxsize=maxsize)
+    return chain | PyStemmerFilter(lang="french", ignore=ignore, cachesize=cachesize)
+FrenchStemmingAnalyzer.__inittypes__ = dict(expression=unicode, gaps=bool,
+                                      stoplist=list, minsize=int, maxsize=int)
+
+
+class SearchBackend(WhooshSearchBackend):
+    '''
+    Adaptation of Haystack' Swoosh backend with french snowball stemming
+    '''
+
+    def build_schema(self, fields):
+        schema_fields = {
+            ID: WHOOSH_ID(stored=True, unique=True),
+            DJANGO_CT: WHOOSH_ID(stored=True),
+            DJANGO_ID: WHOOSH_ID(stored=True),
+        }
+        # Grab the number of keys that are hard-coded into Haystack.
+        # We'll use this to (possibly) fail slightly more gracefully later.
+        initial_key_count = len(schema_fields)
+        content_field_name = ''
+        
+        for field_name, field_class in fields.items(): #@UnusedVariable
+            if field_class.is_multivalued:
+                if field_class.indexed is False:
+                    schema_fields[field_class.index_fieldname] = IDLIST(stored=True, field_boost=field_class.boost)
+                else:
+                    schema_fields[field_class.index_fieldname] = KEYWORD(stored=True, commas=True, scorable=True, field_boost=field_class.boost)
+            elif field_class.field_type in ['date', 'datetime']:
+                schema_fields[field_class.index_fieldname] = DATETIME(stored=field_class.stored)
+            elif field_class.field_type == 'integer':
+                schema_fields[field_class.index_fieldname] = NUMERIC(stored=field_class.stored, type=int, field_boost=field_class.boost)
+            elif field_class.field_type == 'float':
+                schema_fields[field_class.index_fieldname] = NUMERIC(stored=field_class.stored, type=float, field_boost=field_class.boost)
+            elif field_class.field_type == 'boolean':
+                # Field boost isn't supported on BOOLEAN as of 1.8.2.
+                schema_fields[field_class.index_fieldname] = BOOLEAN(stored=field_class.stored)
+            elif field_class.field_type == 'ngram':
+                schema_fields[field_class.index_fieldname] = NGRAM(minsize=3, maxsize=15, stored=field_class.stored, field_boost=field_class.boost)
+            elif field_class.field_type == 'edge_ngram':
+                schema_fields[field_class.index_fieldname] = NGRAMWORDS(minsize=2, maxsize=15, stored=field_class.stored, field_boost=field_class.boost)
+            else:
+                schema_fields[field_class.index_fieldname] = TEXT(stored=True, analyzer=FrenchStemmingAnalyzer(), field_boost=field_class.boost)
+            
+            if field_class.document is True:
+                content_field_name = field_class.index_fieldname
+        
+        # Fail more gracefully than relying on the backend to die if no fields
+        # are found.
+        if len(schema_fields) <= initial_key_count:
+            raise SearchBackendError("No fields were found in any search_indexes. Please correct this before attempting to search.")
+        
+        return (content_field_name, Schema(**schema_fields))
+
+    def _process_results(self, raw_page, highlight=False, query_string='', spelling_query=None, result_class=None):
+        if not self.site:
+            from haystack import site
+        else:
+            site = self.site
+        
+        results = []
+        
+        # It's important to grab the hits first before slicing. Otherwise, this
+        # can cause pagination failures.
+        hits = len(raw_page)
+        
+        if result_class is None:
+            result_class = SearchResult
+        
+        facets = {}
+        spelling_suggestion = None
+        indexed_models = site.get_indexed_models()
+        
+        for doc_offset, raw_result in enumerate(raw_page):
+            score = raw_page.score(doc_offset) or 0
+            app_label, model_name = raw_result[DJANGO_CT].split('.')
+            additional_fields = {}
+            model = get_model(app_label, model_name)
+            
+            if model and model in indexed_models:
+                for key, value in raw_result.items():
+                    index = site.get_index(model)
+                    string_key = str(key)
+                    
+                    if string_key in index.fields and hasattr(index.fields[string_key], 'convert'):
+                        # Special-cased due to the nature of KEYWORD fields.
+                        if index.fields[string_key].is_multivalued:
+                            if value is None or len(value) is 0:
+                                additional_fields[string_key] = []
+                            else:
+                                additional_fields[string_key] = value.split(',')
+                        else:
+                            additional_fields[string_key] = index.fields[string_key].convert(value)
+                    else:
+                        additional_fields[string_key] = self._to_python(value)
+                
+                del(additional_fields[DJANGO_CT])
+                del(additional_fields[DJANGO_ID])
+                
+                if highlight:
+                    from whoosh.highlight import highlight, ContextFragmenter, UppercaseFormatter
+                    sa = FrenchStemmingAnalyzer()
+                    terms = [term.replace('*', '') for term in query_string.split()]
+                    
+                    additional_fields['highlighted'] = {
+                        self.content_field_name: [highlight(additional_fields.get(self.content_field_name), terms, sa, ContextFragmenter(terms), UppercaseFormatter())],
+                    }
+                
+                result = result_class(app_label, model_name, raw_result[DJANGO_ID], score, searchsite=self.site, **additional_fields)
+                results.append(result)
+            else:
+                hits -= 1
+        
+        if getattr(settings, 'HAYSTACK_INCLUDE_SPELLING', False):
+            if spelling_query:
+                spelling_suggestion = self.create_spelling_suggestion(spelling_query)
+            else:
+                spelling_suggestion = self.create_spelling_suggestion(query_string)
+        
+        return {
+            'results': results,
+            'hits': hits,
+            'facets': facets,
+            'spelling_suggestion': spelling_suggestion,
+        }
+
+class SearchQuery(WhooshSearchQuery):
+    pass
+        
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/search/sites.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,7 @@
+'''
+Created on May 27, 2011
+
+@author: ymh
+'''
+import haystack
+haystack.autodiscover()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/search_indexes.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,24 @@
+'''
+Created on May 30, 2011
+
+@author: ymh
+'''
+
+#from haystack import site
+#from haystack.indexes import SearchIndex, CharField
+from haystack import indexes
+from hdabo.models import Datasheet
+
+class DatasheetIndex(indexes.SearchIndex, indexes.Indexable):
+    '''
+    The search index for the datasheet
+    '''
+    text = indexes.CharField(document=True, use_template=True)
+    hda_id = indexes.CharField(model_attr='hda_id', indexed=True, stored=True)
+    title = indexes.CharField(model_attr='title', indexed=True, stored=True, boost=2.0)
+    description = indexes.CharField(model_attr='description', indexed=True, stored=True, boost=1.0)
+    
+    def get_model(self):
+        return Datasheet
+
+#site.register(Datasheet, DatasheetIndex)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/settings.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,147 @@
+# Django settings for hdabo project.
+
+DEBUG = True
+TEMPLATE_DEBUG = DEBUG
+
+ADMINS = (
+    # ('Your Name', 'your_email@example.com'),
+)
+
+MANAGERS = ADMINS
+
+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'
+
+# Language code for this installation. All choices can be found here:
+# http://www.i18nguy.com/unicode/language-identifiers.html
+LANGUAGE_CODE = 'en-us'
+
+SITE_ID = 1
+
+# If you set this to False, Django will make some optimizations so as not
+# 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 filesystem path to the directory that will hold user-uploaded files.
+# Example: "/home/media/media.lawrence.com/media/"
+MEDIA_ROOT = ''
+
+# URL that handles the media served from MEDIA_ROOT. Make sure to use a
+# trailing slash.
+# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
+MEDIA_URL = ''
+
+# Absolute path to the directory static files should be collected to.
+# Don't put anything in this directory yourself; store your static files
+# in apps' "static/" subdirectories and in STATICFILES_DIRS.
+# Example: "/home/media/media.lawrence.com/static/"
+STATIC_ROOT = ''
+
+# URL prefix for static files.
+# Example: "http://media.lawrence.com/static/"
+STATIC_URL = '/static/site'
+
+# Additional locations of static files
+STATICFILES_DIRS = (
+    # Put strings here, like "/home/html/static" or "C:/www/django/static".
+    # Always use forward slashes, even on Windows.
+    # Don't forget to use absolute paths, not relative paths.
+)
+
+# List of finder classes that know how to find static files in
+# various locations.
+STATICFILES_FINDERS = (
+    'django.contrib.staticfiles.finders.FileSystemFinder',
+    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
+#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
+)
+
+# Make this unique, and don't share it with anybody.
+SECRET_KEY = '1anp2v#36%z(pahi5ytghik&-eg8t96)&$t)b%i=7@%=)u$pyn'
+
+# List of callables that know how to import templates from various sources.
+TEMPLATE_LOADERS = (
+    '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.contrib.auth.context_processors.auth',
+    'django.core.context_processors.debug',
+    'django.core.context_processors.i18n',
+    'django.core.context_processors.media',
+    'django.core.context_processors.static',
+    'django.contrib.messages.context_processors.messages',
+    'hdabo.context_processors.version',
+)
+
+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 = 'hdabo.urls'
+
+TEMPLATE_DIRS = (
+    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
+    # Always use forward slashes, even on Windows.
+    # Don't forget to use absolute paths, not relative paths.
+)
+
+INSTALLED_APPS = (
+    'south',              
+    'django.contrib.auth',
+    'django.contrib.contenttypes',
+    'django.contrib.sessions',
+    'django.contrib.sites',
+    'django.contrib.messages',
+    'django.contrib.staticfiles',
+    'django.contrib.admin',
+    'django_extensions',
+    'haystack',
+    'hdabo',
+)
+
+
+WIKIPEDIA_API_URL = "http://fr.wikipedia.org/w/api.php"
+WIKIPEDIA_VERSION_PERMALINK_TEMPLATE = "http://fr.wikipedia.org/w/index.php?oldid=%s"
+DBPEDIA_URI_TEMPLATE = "http://dbpedia.org/resource/%s"
+
+SEARCH_STAR_CHARACTER = "*"
+PAGINATION_DEFAULT_NB_BY_PAGE = 50
+
+from hdabo.config import * #@UnusedWildImport
+
+if 'LOGIN_REDIRECT_URL' not in locals():
+    LOGIN_REDIRECT_URL = BASE_URL + "hdabo"
+if 'LOGIN_URL' not in locals():
+    LOGIN_URL = BASE_URL + "hdabo/accounts/login"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/static/hdabo/css/nyroModal.css	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,102 @@
+.nyroModalBg {
+	position: fixed;
+	overflow: hidden;
+	top: 0;
+	left: 0;
+	height: 100%;
+	width: 100%;
+	background: #000;
+	opacity: 0.7;
+}
+.nmReposition {
+	position: absolute;
+}
+.nyroModalCloseButton {
+	top: -13px;
+	right: -13px;
+	width: 12px;
+	height: 12px;
+	text-indent: -9999em;
+	background: url(../img/close_nm.gif);
+}
+.nyroModalTitle {
+	top: -26px;
+	left: 0;
+	margin: 0;
+    font-size: 1.1em;
+	color: #ddd;
+}
+.nyroModalCont {
+	position: absolute;
+	border: 4px solid #777;
+	margin: 25px;
+	background: #fff;
+}
+.nyroModalCont iframe {
+	width: 600px;
+	height: 400px;
+}
+.nyroModalError {
+	border: 4px solid red;
+	color: red;
+	width: 250px;
+	height: 250px;
+}
+.nyroModalError div {
+	min-width: 0;
+	min-height: 0;
+	padding: 10px;
+}
+.nyroModalLink, .nyroModalDom, .nyroModalForm, .nyroModalFormFile {
+	position: relative;
+	padding: 10px;
+	min-height: 250px;
+	min-width: 250px;
+	max-width: 1000px;
+}
+.nyroModalImage, .nyroModalSwf, .nyroModalIframe, .nyroModalIframeForm {
+	position: relative;
+	overflow: hidden;
+}
+.nyroModalHidden {
+	left: -9999em;
+	top: -9999em;
+}
+.nyroModalLoad {
+	position: absolute;
+	width: 100px;
+	height: 100px;
+	background: #fff url(../img/ajax-loader-43x43.gif) no-repeat center;
+	padding: 0;
+}
+.nyroModalPrev, .nyroModalNext {
+	outline: none;
+	position: absolute;
+	top: 0;
+	height: 60%;
+	width: 150px;
+	min-height: 50px;
+	max-height: 300px;
+	cursor: pointer;
+	text-indent: -9999em;
+	background: transparent url('data:image/gif;base64,AAAA') left 20% no-repeat;
+}
+.nyroModalImage .nyroModalPrev, .nyroModalImage .nyroModalNext {
+	height: 100%;
+	width: 40%;
+	max-height: none;
+}
+.nyroModalPrev {
+	left: 0;
+}
+.nyroModalPrev:hover {
+	background-image: url(../img/prev.gif);
+}
+.nyroModalNext {
+	right: 0;
+	background-position: right 20%;
+}
+.nyroModalNext:hover {
+	background-position: right 20%;
+	background-image: url(../img/next.gif);
+}
\ No newline at end of file
Binary file src/hdabo/static/hdabo/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png has changed
Binary file src/hdabo/static/hdabo/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png has changed
Binary file src/hdabo/static/hdabo/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png has changed
Binary file src/hdabo/static/hdabo/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png has changed
Binary file src/hdabo/static/hdabo/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png has changed
Binary file src/hdabo/static/hdabo/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png has changed
Binary file src/hdabo/static/hdabo/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png has changed
Binary file src/hdabo/static/hdabo/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png has changed
Binary file src/hdabo/static/hdabo/css/smoothness/images/ui-icons_222222_256x240.png has changed
Binary file src/hdabo/static/hdabo/css/smoothness/images/ui-icons_2e83ff_256x240.png has changed
Binary file src/hdabo/static/hdabo/css/smoothness/images/ui-icons_454545_256x240.png has changed
Binary file src/hdabo/static/hdabo/css/smoothness/images/ui-icons_888888_256x240.png has changed
Binary file src/hdabo/static/hdabo/css/smoothness/images/ui-icons_cd0a0a_256x240.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/static/hdabo/css/smoothness/jquery-ui-1.8.13.custom.css	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,578 @@
+/*
+ * jQuery UI CSS Framework 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden { display: none; }
+.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
+.ui-helper-clearfix { display: inline-block; }
+/* required comment for clearfix to work in Opera \*/
+* html .ui-helper-clearfix { height:1%; }
+.ui-helper-clearfix { display:block; }
+/* end clearfix */
+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled { cursor: default !important; }
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
+
+
+/*
+ * jQuery UI CSS Framework 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ *
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
+ */
+
+
+/* Component containers
+----------------------------------*/
+.ui-widget { font-family: Arial,Verdana,sans-serif; font-size: 1.1em; }
+.ui-widget .ui-widget { font-size: 1em; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Arial,Verdana,sans-serif; font-size: 1em; }
+.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
+.ui-widget-content a { color: #222222; }
+.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }
+.ui-widget-header a { color: #222222; }
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; }
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; }
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
+.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; }
+.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }
+.ui-widget :active { outline: none; }
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight  {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; }
+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
+.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
+.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
+.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
+.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary,  .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
+.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
+.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-off { background-position: -96px -144px; }
+.ui-icon-radio-on { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; }
+.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
+.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
+.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
+.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
+.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
+.ui-corner-right {  -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
+.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
+.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }
+
+/* Overlays */
+.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
+.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*
+ * jQuery UI Resizable 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Resizable#theming
+ */
+.ui-resizable { position: relative;}
+.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;
+	/* http://bugs.jqueryui.com/ticket/7233
+	 - Resizable: resizable handles fail to work in IE if transparent and content overlaps
+	*/
+	background-image:url(data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=);
+}
+.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
+.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
+.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
+.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
+.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
+.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
+.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
+.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
+.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
+ * jQuery UI Selectable 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Selectable#theming
+ */
+.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
+/*
+ * jQuery UI Accordion 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Accordion#theming
+ */
+/* IE/Win - Fix animation bug - #4615 */
+.ui-accordion { width: 100%; }
+.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
+.ui-accordion .ui-accordion-li-fix { display: inline; }
+.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
+.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
+.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
+.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
+.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
+.ui-accordion .ui-accordion-content-active { display: block; }
+/*
+ * jQuery UI Autocomplete 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Autocomplete#theming
+ */
+.ui-autocomplete { position: absolute; cursor: default; }	
+
+/* workarounds */
+* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
+
+/*
+ * jQuery UI Menu 1.8.13
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Menu#theming
+ */
+.ui-menu {
+	list-style:none;
+	padding: 2px;
+	margin: 0;
+	display:block;
+	float: left;
+}
+.ui-menu .ui-menu {
+	margin-top: -3px;
+}
+.ui-menu .ui-menu-item {
+	margin:0;
+	padding: 0;
+	zoom: 1;
+	float: left;
+	clear: left;
+	width: 100%;
+}
+.ui-menu .ui-menu-item a {
+	text-decoration:none;
+	display:block;
+	padding:.2em .4em;
+	line-height:1.5;
+	zoom:1;
+}
+.ui-menu .ui-menu-item a.ui-state-hover,
+.ui-menu .ui-menu-item a.ui-state-active {
+	font-weight: normal;
+	margin: -1px;
+}
+/*
+ * jQuery UI Button 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Button#theming
+ */
+.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
+.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
+button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
+.ui-button-icons-only { width: 3.4em; } 
+button.ui-button-icons-only { width: 3.7em; } 
+
+/*button text element */
+.ui-button .ui-button-text { display: block; line-height: 1.4;  }
+.ui-button-text-only .ui-button-text { padding: .4em 1em; }
+.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
+.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
+.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
+.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
+/* no icon support for input elements, provide padding by default */
+input.ui-button { padding: .4em 1em; }
+
+/*button icon element(s) */
+.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
+.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
+.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
+.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+
+/*button sets*/
+.ui-buttonset { margin-right: 7px; }
+.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
+
+/* workarounds */
+button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
+/*
+ * jQuery UI Dialog 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Dialog#theming
+ */
+.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
+.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative;  }
+.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } 
+.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
+.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
+.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
+.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
+.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
+.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
+.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
+.ui-draggable .ui-dialog-titlebar { cursor: move; }
+/*
+ * jQuery UI Slider 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Slider#theming
+ */
+.ui-slider { position: relative; text-align: left; }
+.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
+.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
+
+.ui-slider-horizontal { height: .8em; }
+.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
+.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
+.ui-slider-horizontal .ui-slider-range-min { left: 0; }
+.ui-slider-horizontal .ui-slider-range-max { right: 0; }
+
+.ui-slider-vertical { width: .8em; height: 100px; }
+.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
+.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
+.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
+.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
+ * jQuery UI Tabs 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Tabs#theming
+ */
+.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
+.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
+.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
+.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
+.ui-tabs .ui-tabs-hide { display: none !important; }
+/*
+ * jQuery UI Datepicker 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Datepicker#theming
+ */
+.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
+.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
+.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
+.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
+.ui-datepicker .ui-datepicker-prev { left:2px; }
+.ui-datepicker .ui-datepicker-next { right:2px; }
+.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
+.ui-datepicker .ui-datepicker-next-hover { right:1px; }
+.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }
+.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
+.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
+.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
+.ui-datepicker select.ui-datepicker-month, 
+.ui-datepicker select.ui-datepicker-year { width: 49%;}
+.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
+.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  }
+.ui-datepicker td { border: 0; padding: 1px; }
+.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
+.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
+.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi { width:auto; }
+.ui-datepicker-multi .ui-datepicker-group { float:left; }
+.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
+.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
+.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
+.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
+.ui-datepicker-row-break { clear:both; width:100%; }
+
+/* RTL support */
+.ui-datepicker-rtl { direction: rtl; }
+.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+
+/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
+.ui-datepicker-cover {
+    display: none; /*sorry for IE5*/
+    display/**/: block; /*sorry for IE5*/
+    position: absolute; /*must have*/
+    z-index: -1; /*must have*/
+    filter: mask(); /*must have*/
+    top: -4px; /*must have*/
+    left: -4px; /*must have*/
+    width: 200px; /*must have*/
+    height: 200px; /*must have*/
+}/*
+ * jQuery UI Progressbar 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Progressbar#theming
+ */
+.ui-progressbar { height:2em; text-align: left; }
+.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/static/hdabo/css/style.css	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,419 @@
+@charset "UTF-8";
+
+body {
+
+ 	font-family: Arial, Helvetica, sans serif;
+ 	font-size: 12px;
+ 	color: #4F5155;
+ 	margin: 5px;
+ 	padding: 0px;
+ 	min-width:750px;
+	text-align: justify; 	
+}
+body p {
+ 	margin: 2px; 	
+}
+
+a img,a:link img, a:active img, a:visited img, a:hover img  {
+	border:0px;
+}
+
+
+a:link
+{
+	color: #50a4a3;
+	text-decoration: none;
+	font-family:  Arial, Helvetica, sans-serif;
+	/*font-weight: bold;*/
+}
+
+a:hover
+{
+	color: #50a4a3;
+	text-decoration: none;
+	font-family:  Arial, Helvetica, sans-serif;
+	/*border-bottom-width: 1px;
+	border-bottom-style: dashed;
+	border-bottom-color: #2c8084;
+	font-weight: bold;*/
+}
+a:visited {
+	color: #50a4a3;
+	font-family:  Arial, Helvetica, sans-serif;
+	/*font-weight: bold;*/
+}
+
+.hda_blue{
+  /*color: #97fefd;*/ 
+  color: #86e6e5; 
+}
+
+
+#header
+{
+    padding: .2em;
+    border-bottom: 1px solid gray;
+    border-left: 1px solid gray;
+}
+
+#header a
+{
+    text-decoration: none;
+}
+
+
+#header_left
+{
+    padding: 0px;
+	max-width: 8em;
+	font-size: 30px;
+	font-weight : bold;
+	text-align: left;
+    text-transform: uppercase;
+}
+
+#header_left p
+{
+ 	margin: 0px;
+}
+
+
+#header_left a:hover, #header_left a:visited, #header_left a:link, #header_left a:active, #header_left a:focus
+{
+	color: #4F5155;
+	text-decoration: none;
+}
+
+
+#header_right
+{
+	text-align: right;
+}
+
+#header_right a:link
+{
+	text-decoration: none;
+	color: white;
+}
+
+#header_right a:hover
+{
+	text-decoration: none;
+	color:  white;
+}
+
+#header_right a:visited {
+	text-decoration: none;
+	color: white;
+}
+
+
+#footer
+{
+    clear: both;
+    margin: 0;
+    padding: .5em;
+    /*background-color: #ddd;*/
+    border-top: 1px solid gray;
+}
+
+.version
+{
+    text-align: right;
+    color: white;
+    font-size:9px;
+}
+
+.version:hover
+{
+    color: #2c8084;
+    text-decoration: none;
+    font-weight: bold;
+    border-bottom-width: 0px;
+    border-bottom-style: none;
+}
+
+.small
+{
+    font-size:9px;
+}
+
+.footer_img
+{
+    float: left;
+}
+
+.footer_img img
+{
+    padding-left: 10px;
+    padding-right: 10px;
+}
+
+.footer_img a
+{
+    color: white;
+}
+
+.footer_img a:link
+{
+    color: white;
+}
+
+.footer_img a:hover
+{
+    color: white;
+}
+
+.footer_img a:visited
+{
+    color: white;
+}
+
+
+#home_links
+{
+    line-height: 150%
+}
+
+#search_form_div {
+    text-align: center;
+    padding: 10px;
+    margin: 10px 10px;
+    margin-bottom: 30px;
+    background-color:#ececec;
+    border: 1px solid #7E7E7E
+}
+
+#search_form ul {
+	list-style-type: none;
+	margin: 0;
+	padding: 0;
+}
+
+#search_form ul li {
+	display: inline;
+}
+
+#toolbar {
+	margin-top: 2px;
+	margin-bottom: 2px;
+	border-bottom: 2px solid #707070;
+	padding-top : 0px;
+	padding-bottom : 0px;
+}
+#toolbar ul{
+	padding-left : 0px;
+	padding-right : 0px;
+	padding-top : 0px;
+	padding-bottom : 0px;
+	margin-left : 0px;
+	margin-right : 0px;
+	margin-top: 5px;
+	margin-bottom: 5px;
+}
+#toolbar ul li{
+	display: inline;
+	padding-left : 10px;
+	padding-right : 10px;
+	padding-top : 0px;
+	padding-bottom : 0px;
+}
+
+#inner_content {
+	padding: 5px 0px 50px 0px;
+}
+
+#loginstate {
+	text-align: right;
+}
+
+.projectscontentstitle {
+	color: #949494;
+	font-family: Verdana;
+	font-weight: lighter;
+	font-size: 2.0em;
+	font-style: normal;
+	text-align: left;
+}
+
+
+#loginstate a, #loginstate a:hover, #loginstate a:visited, #loginstate a:link, #loginstate a:active {
+    color:#0063DC;
+    margin-right:4px;
+    text-decoration:none;
+}
+
+#loginstate a:hover{
+    text-decoration: underline;
+}
+
+#loginstate ul {
+    margin:0;
+    padding:0;
+    float: left;
+}
+#loginstate li{
+    display: inline;
+    padding:0;
+    margin:0;
+}
+#loginstate #user{
+    color: #000000;
+    font-weight: bold;
+    margin-right:4px;
+}
+#loginstate ul .usertool a,
+#loginstate ul .usertool a:link, 
+#loginstate ul .usertool a:visited {
+    color:#0063DC;
+    text-decoration:none;
+}
+
+#loginstate ul .usertool a:hover {
+    color:#0063DC;
+    text-decoration:underline;
+}
+
+.errorlist
+{
+    color: red;
+    font-size:12px;
+}
+
+tr.hdabooddline {
+	background: #d8d8d8;
+	/*background: #d6d7f6;*/
+}
+tr.hdaboevenline {
+	background: white;
+	/*background: #e6e6e6;*/
+}
+tr.hdabooddline:hover, tr.hdaboevenline:hover {
+	background: lightblue;
+	/*background: #e6e6e6;*/
+}
+
+tr.hdabosimpleoddline {
+	background: #e4e4e4;
+	/*background: #d6d7f6;*/
+}
+tr.hdabosimpleevenline {
+	background: white;
+	/*background: #e6e6e6;*/
+}
+
+#count_nav_top,
+#count_nav_bottom {
+	text-align: right;
+}
+#count_nav_bottom p,
+#count_nav_top p {
+	font-size: 12px;
+	font-weight : bold;
+}
+
+#tag_table {
+	width: 100%;
+	border-spacing: 0px;
+}
+#tag_table td, th {
+	/*border: thin solid #6495ed;*/
+	padding: 3px;
+}
+.updown_td {
+	width: 12px;
+}
+
+.sheet_title {
+	font-size: 14px;
+}
+
+.complete_sheet {
+	margin-left: 5px;
+	margin-right: 5px;
+}
+.left_sheet {
+	width: 38%;
+	float: left;
+}
+.left_sheet p {
+	margin-bottom: 5px;
+}
+.right_sheet {
+	width: 60%;
+	/*margin-left: 5px;*/
+	float: right;
+}
+
+.large_25 {
+	width: 25px;
+}
+.text_centered {
+	text-align: center;
+}
+.hand_cursor, .reset_wp_info, .remove_wp_link, .remove_tag_from_list {
+	cursor: pointer;
+}
+.updown_td {
+	cursor: n-resize;
+}
+
+tr.dragged_row td {
+    color: yellow;
+    background-color: black;
+}
+
+#all_tags_table {
+	min-width: 600px;
+	border-spacing: 0px;
+}
+#all_tags_table td, th {
+	/*border: thin solid #6495ed;*/
+	padding: 3px;
+}
+
+/* styles for the 4 types of STATUS*/
+.null_result {
+	color: #000000;
+}
+.redirection {
+	color: #0000ff;
+    font-weight: bold;
+    font-style: italic;
+}
+.homonyme {
+	color: #000000;
+    font-weight: bold;
+}
+.match {
+	color: #0000ff;
+    font-weight: bold;
+}
+
+#tags_actions span {
+	margin-left: 5px;
+}
+
+#loginform_div {
+	margin-left: 10px;
+}
+
+#login_fields_list, #submitcontent-buttons-login {
+	margin: 10px 0px;
+}
+
+#search_results {
+	margin-left: 10px;
+}
+
+.result_counter {
+	color: #C6C6C6;
+}
+
+#search_prev_next {
+	margin-top: 20px;
+}
+
+#page_number {
+	text-align: right;
+}
\ No newline at end of file
Binary file src/hdabo/static/hdabo/img/arrow_green_right.png has changed
Binary file src/hdabo/static/hdabo/img/arrow_right.png has changed
Binary file src/hdabo/static/hdabo/img/arrow_up_down.png has changed
Binary file src/hdabo/static/hdabo/img/clock_arrow.png has changed
Binary file src/hdabo/static/hdabo/img/favicon.ico has changed
Binary file src/hdabo/static/hdabo/img/indicator.gif has changed
Binary file src/hdabo/static/hdabo/img/logo_IRI_footer.png has changed
Binary file src/hdabo/static/hdabo/img/red_cross.png has changed
Binary file src/hdabo/static/hdabo/img/sort-asc.png has changed
Binary file src/hdabo/static/hdabo/img/sort-desc.png has changed
Binary file src/hdabo/static/hdabo/img/sort-descending.png has changed
Binary file src/hdabo/static/hdabo/img/tag_remove.png has changed
Binary file src/hdabo/static/hdabo/img/wikipedia_search.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/static/hdabo/js/hdabo.js	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,366 @@
+// -*- coding: utf-8 -*-
+function init_tags_events()
+{
+    // Tag simple operations : activate/unactivate wp link, reset wp info, remove wp link, remove tag from list
+    $(".reset_wp_info").click(function(e){
+        if(confirm("Confirmez-vous le rétablissement du label original de ce tag ?")){
+            update_tag(this);
+        }
+    });
+    $(".remove_wp_link").click(function(e){
+        if(confirm("Confirmez-vous le suppression du lien Wikipédia pour le tag \"" + $(this).attr('alt') + "\" ?")){
+            update_tag(this);
+        }
+    });
+    $(".remove_tag_from_list").click(function(){
+        if(confirm("Confirmez-vous la suppression du tag \"" + $(this).attr('alt') + "\" de la liste courante ?")){
+            update_tag(this);
+        }
+    });
+    
+    // Wikipedia search management (autocompletion and save changes)
+    $.editable.addInputType('autocomplete', {
+    	element : $.editable.types.text.element,
+    	plugin : function(settings, original) {
+    		$('input', this).autocomplete(settings.autocomplete);
+    	}
+    });
+    $(".wikipediatag").editable(modify_tag_url, { 
+    	indicator : "<img src='"+static_url+"hdabo/img/indicator.gif'>",
+    	type      : "autocomplete",
+    	tooltip   : "Cliquer pour éditer...",
+    	onblur    : "submit",
+    	submitdata: {
+            csrfmiddlewaretoken:global_csrf_token, 
+            datasheet_id:$('#datasheet_id').val(),
+            num_page:$('#num_page').val(),
+            nb_by_page:$('#nb_by_page').val(),
+            sort:$('#sort').val(),
+            searched:$('#searched_str').val()
+        },
+    	callback  : function(value, settings) {
+            $('#tag_table_container').html(value);
+            init_tags_events();
+    	},
+		onerror: function(settings, original, jqXHR) {
+			resp = $.parseJSON(jqXHR.responseText);
+			alert(resp.message);
+			original.reset();
+		},
+    	autocomplete : {
+			source: function( request, response ) {
+				$.ajax({
+					url: "http://fr.wikipedia.org/w/api.php",
+					dataType: "jsonp",
+					data: {
+						action: "opensearch",
+						limit: "20",
+						namespace: "0",
+						format: "json",
+						search: request.term
+					},
+					success: function( data ) {
+						response( $.map( data[1], function( item ) {
+							return {
+								label: item,
+								value: item
+							}
+						}));
+					}
+				});
+			},
+			minLength: 2,
+			open: function() {
+				$( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
+			},
+			close: function() {
+				$( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
+			}
+    	}
+    });
+    
+    // Update alias management
+    $(".tag_alias").editable(update_tag_alias_url, {
+    	indicator : "<img src='"+static_url+"hdabo/img/indicator.gif'>",
+    	type      : "text",
+    	placeholder:"",
+    	tooltip   : "Cliquer pour éditer...",
+    	onblur    : "submit",
+    	submitdata: {
+            csrfmiddlewaretoken:global_csrf_token, 
+            datasheet_id:$('#datasheet_id').val(),
+            num_page:$('#num_page').val(),
+            nb_by_page:$('#nb_by_page').val(),
+            sort:$('#sort').val(),
+            searched:$('#searched_str').val()
+        },
+    	callback  : function(value, settings) {
+            $('#tag_table_container').html(value);
+            init_tags_events();
+    	}
+    });
+    
+    // Tag categories management
+    $(".tag_category").editable(update_tag_category_url, {
+    	indicator : "<img src='"+static_url+"hdabo/img/indicator.gif'>",
+    	type      : "select",
+        data      : categories_list,
+    	placeholder:"",
+    	tooltip   : "Cliquer pour éditer...",
+    	onblur    : "submit",
+    	submitdata: {
+            csrfmiddlewaretoken:global_csrf_token,
+            datasheet_id:$('#datasheet_id').val(),
+            num_page:$('#num_page').val(),
+            nb_by_page:$('#nb_by_page').val(),
+            sort:$('#sort').val(),
+            searched:$('#searched_str').val()
+        },
+    	callback  : function(value, settings) {
+            $('#tag_table_container').html(value);
+            init_tags_events();
+    	}
+    });
+    
+    // Tag table drag and drop
+    $("#tag_table").tableDnD({
+        onDragClass: "dragged_row",
+        onDrop: function(table, row){
+            old_order = row.id;
+            $($(row).children()[1]).html("<img src='"+static_url+"hdabo/img/indicator.gif'/>");
+            rows = table.tBodies[0].rows;
+            nb_rows = rows.length;
+            for(var i=1; i<nb_rows; i++){
+                if(rows[i].id==old_order){
+                    new_order = i; // No need to +1 because rows[0] are headers
+                    $.ajax({
+                        url: tag_up_down_url,
+                        type: 'POST',
+                        data: {csrfmiddlewaretoken:global_csrf_token, 
+                               datasheet_id:$('#datasheet_id').val(),
+                               new_order:new_order,
+                               old_order:old_order
+                               },
+                        // bug with jquery >= 1.5, "json" adds a callback so we don't specify dataType
+                        //dataType: 'json',
+                        success: function(msg, textStatus, XMLHttpRequest) {
+                            $('#tag_table_container').html(msg);
+                            init_tags_events();
+                        }
+                    });
+                }
+            }
+        },
+        dragHandle: "updown_td"
+    });
+}
+
+function init_datasheet_events()
+{
+    var select_done = false;
+    // Wikipedia search management (new tag)
+    $("#wp_search").autocomplete({
+        source: function( request, response ) {
+            $.ajax({
+                url: "http://fr.wikipedia.org/w/api.php",
+                dataType: "jsonp",
+                data: {
+                    action: "opensearch",
+                    limit: "20",
+                    namespace: "0",
+                    format: "json",
+                    search: request.term
+                },
+                success: function( data ) {
+                    response( $.map( data[1], function( item ) {
+                        return {
+                            label: item,
+                            value: item
+                        }
+                    }));
+                }
+            });
+        },
+        select: function(event, ui) { 
+            // Since the event still did not update wp_search's val, we force it.
+            $("#wp_search").val(ui.item.label);
+            select_done = true;
+            $("#ok_search").click();
+        },
+        minLength: 2,
+        open: function() {
+            $( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
+        },
+        close: function() {
+            $( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
+        }
+    });
+    $('#wp_search').keyup(function(e){
+        if((e.keyCode==13) && ($("#wp_search").val()!="") && (select_done==false)){
+            add_tag($("#wp_search").val());
+        }
+        select_done = false;
+    });
+    $("#ok_search").click(function(){
+        if($("#wp_search").val()!=""){
+            add_tag($("#wp_search").val());
+        }
+    });
+    $("#tags_sort").click(function(e){
+    	 e.preventDefault();
+    	if(confirm("Confirmez-vous le tri des tags ?")) {
+    		reorder_tags();
+    	}
+    });
+    // Validate sheet management : the radiobutton name has is "'gr_validated' + datasheet.hda_id"
+    $("#validated").click(function(e){
+        e.preventDefault();
+        // We count the number of tags. It has to be between 5 and 25
+        var nb_tags = $('#tag_table tr').length - 1;
+        if(nb_tags<5 || nb_tags>25){
+            alert("Cette fiche n'est pas validable : elle doit contenir entre 5 et 25 tags.");
+        }
+        else{
+            if(confirm("Confirmez-vous la validation de cette fiche ? Elle contient " + nb_tags + " tags.")){
+                window.location = validate_datasheet_url + "/" + $('#datasheet_id').val() + "/true";
+            }
+        }
+    });
+    $("#not_validated").click(function(e){
+        e.preventDefault();
+        if(confirm("Confirmez-vous l'invalidation de cette fiche ?")){
+            window.location = validate_datasheet_url + "/" + $('#datasheet_id').val() + "/false";
+        }
+    });
+}
+
+function update_tag(btn)
+{
+    new_checked = false;
+    if ($(btn).is(".remove_tag_from_list")) {
+        var url = remove_tag_from_list_url;
+        var id_tag = $(btn).attr('id');
+    }
+    else if ($(btn).is(".reset_wp_info")) {
+        var url = reset_wp_info_url;
+        var id_tag = $(btn).html();
+        $(btn).html("<img src='"+static_url+"hdabo/img/indicator.gif'>");
+    }
+    else if ($(btn).is(".remove_wp_link")) {
+        var url = remove_wp_link_url;
+        var id_tag = $(btn).attr('id');
+    }
+    
+    // 2 cases : 
+    // - ordered tag for one datasheet : $('#datasheet_id') is not null
+    // - all tags list : $('#datasheet_id') is null and $('#num_page') and $('#nb_by_page') are not null
+    $.ajax({
+        url: url,
+        type: 'POST',
+        data: {csrfmiddlewaretoken:global_csrf_token, 
+               datasheet_id:$('#datasheet_id').val(),
+               num_page:$('#num_page').val(),
+               nb_by_page:$('#nb_by_page').val(),
+               sort:$('#sort').val(),
+               searched:$('#searched_str').val(),
+               tag_id:id_tag,
+               activated:new_checked
+               },
+        // bug with jquery >= 1.5, "json" adds a callback so we don't specify dataType
+        //dataType: 'json',
+        success: function(msg, textStatus, XMLHttpRequest) {
+            $('#tag_table_container').html(msg);
+            init_tags_events();
+        },
+		error: function(jqXHR, textStatus, errorThrown) {
+			resp = $.parseJSON(jqXHR.responseText);
+			alert(resp.message);
+			$(btn).html(id_tag);
+		}
+    });
+}
+
+function tag_up_down(arrow)
+{
+    if ($(arrow).is(".up")) {
+        mv = "u";
+    } else {
+        mv = "d";
+    }
+    var url = tag_up_down_url;
+    var id_tag = $(arrow).attr('id');
+    // This indicates the position (from 0) of the tag in the list. NB : it is different from the TagSheet.order in the database.
+    var pos_tag = $(arrow).attr('pos');
+    $.ajax({
+        url: url,
+        type: 'POST',
+        data: {csrfmiddlewaretoken:global_csrf_token, 
+               datasheet_id:$('#datasheet_id').val(),
+               tag_id:id_tag,
+               move:mv,
+               tag_pos:pos_tag
+               },
+        // bug with jquery >= 1.5, "json" adds a callback so we don't specify dataType
+        //dataType: 'json',
+        success: function(msg, textStatus, XMLHttpRequest) {
+            $('#tag_table_container').html(msg);
+            init_tags_events();
+        }
+    });
+}
+
+function add_tag(tag_label)
+{
+    $("#ok_search").html("<img src='"+static_url+"hdabo/img/indicator.gif'>");
+    var url = add_tag_url;
+    $.ajax({
+        url: url,
+        type: 'POST',
+        data: {csrfmiddlewaretoken:global_csrf_token,
+               datasheet_id:$('#datasheet_id').val(),
+               value:tag_label
+               },
+        // bug with jquery >= 1.5, "json" adds a callback so we don't specify dataType
+        //dataType: 'json',
+        success: function(msg, textStatus, XMLHttpRequest) {
+            $('#tag_table_container').html(msg);
+            init_tags_events();
+            // And scroll to the bottom
+            $("html").animate({ scrollTop: $(document).height() }, 500);
+        },
+        error: function(jqXHR, textStatus, errorThrown) {
+			resp = $.parseJSON(jqXHR.responseText);
+			alert(resp.message);
+        },
+        complete: function(){
+            // We empty the input and hide the ok button
+            $("#wp_search").val("");
+            $("#ok_search").html("<b>OK</b>");
+        }
+    });
+}
+
+function reorder_tags() {
+	$('#tags_sort').attr("disabled", "disabled");
+	var tag_sort_old_src = $("#tags_sort").attr("src");
+	$("#tags_sort").attr("src",static_url+"hdabo/img/indicator.gif");
+	$.ajax({
+		url: reorder_tag_datasheet_url,
+		type: 'POST',
+		data: {
+			csrfmiddlewaretoken:global_csrf_token,
+            datasheet_id:$('#datasheet_id').val()
+		},
+        success: function(msg, textStatus, XMLHttpRequest) {
+            $('#tag_table_container').html(msg);
+            init_tags_events();
+            // And scroll to the bottom
+            $("html").animate({ scrollTop: $(document).height() }, 500);
+        },
+        complete: function(){
+        	$("#tags_sort").attr("src",tag_sort_old_src);
+        	$('#tags_sort').removeAttr("disabled");
+        }
+	});
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/static/hdabo/js/jquery-ui.min.js	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,784 @@
+/*!
+ * jQuery UI 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI
+ */
+(function(c,j){function k(a,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.13",
+keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();
+b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,
+"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",
+function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth,
+outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a,"tabindex"),d=isNaN(b);
+return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=
+0;e<b.length;e++)a.options[b[e][0]]&&b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&c.ui.isOverAxis(b,e,i)}})}})(jQuery);
+;/*!
+ * jQuery UI Widget 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Widget
+ */
+(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)b(d).triggerHandler("remove");k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,
+a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.charAt(0)==="_")return h;
+e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=b.extend(true,{},this.options,
+this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},
+widget:function(){return this.element},option:function(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},
+enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
+;/*!
+ * jQuery UI Mouse 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Mouse
+ *
+ * Depends:
+ *	jquery.ui.widget.js
+ */
+(function(b){var d=false;b(document).mousedown(function(){d=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(c){return a._mouseDown(c)}).bind("click."+this.widgetName,function(c){if(true===b.data(c.target,a.widgetName+".preventClickEvent")){b.removeData(c.target,a.widgetName+".preventClickEvent");c.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+
+this.widgetName)},_mouseDown:function(a){if(!d){this._mouseStarted&&this._mouseUp(a);this._mouseDownEvent=a;var c=this,f=a.which==1,g=typeof this.options.cancel=="string"?b(a.target).parents().add(a.target).filter(this.options.cancel).length:false;if(!f||g||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){c.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=
+this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault();return true}}true===b.data(a.target,this.widgetName+".preventClickEvent")&&b.removeData(a.target,this.widgetName+".preventClickEvent");this._mouseMoveDelegate=function(e){return c._mouseMove(e)};this._mouseUpDelegate=function(e){return c._mouseUp(e)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);a.preventDefault();return d=true}},_mouseMove:function(a){if(b.browser.msie&&
+!(document.documentMode>=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=
+false;a.target==this._mouseDownEvent.target&&b.data(a.target,this.widgetName+".preventClickEvent",true);this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
+;/*
+ * jQuery UI Position 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Position
+ */
+(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY,
+left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+=
+k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-=
+m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left=
+d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+=
+a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b),
+g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery);
+;/*
+ * jQuery UI Draggable 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Draggables
+ *
+ * Depends:
+ *	jquery.ui.core.js
+ *	jquery.ui.mouse.js
+ *	jquery.ui.widget.js
+ */
+(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper==
+"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b=
+this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;d(b.iframeFix===true?"iframe":b.iframeFix).each(function(){d('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")});return true},_mouseStart:function(a){var b=this.options;this.helper=
+this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});
+this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions();d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);return true},_mouseDrag:function(a,b){this.position=this._generatePosition(a);
+this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b=false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=
+d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&this.options.revert.call(this.element,b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",
+a)!==false&&this._clear();return false},_mouseUp:function(a){this.options.iframeFix===true&&d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});return d.ui.mouse.prototype._mouseUp.call(this,a)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle||!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==
+a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone().removeAttr("id"):this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&&a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a=
+{left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&
+d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=
+this.element.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions=
+{width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[(a.containment=="document"?0:d(window).scrollLeft())-this.offset.relative.left-this.offset.parent.left,(a.containment=="document"?0:d(window).scrollTop())-this.offset.relative.top-this.offset.parent.top,(a.containment=="document"?0:d(window).scrollLeft())+
+d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a.containment=="document"?0:d(window).scrollTop())+(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&a.containment.constructor!=Array){a=d(a.containment);var b=a[0];if(b){a.offset();var c=d(b).css("overflow")!="hidden";this.containment=[(parseInt(d(b).css("borderLeftWidth"),
+10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0),(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0),(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-
+this.margins.top-this.margins.bottom];this.relative_container=a}}else if(a.containment.constructor==Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&
+d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],
+this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,h=a.pageY;if(this.originalPosition){var g;if(this.containment){if(this.relative_container){g=this.relative_container.offset();g=[this.containment[0]+g.left,this.containment[1]+g.top,this.containment[2]+g.left,this.containment[3]+g.top]}else g=this.containment;if(a.pageX-this.offset.click.left<g[0])e=g[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<g[1])h=g[1]+this.offset.click.top;
+if(a.pageX-this.offset.click.left>g[2])e=g[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>g[3])h=g[3]+this.offset.click.top}if(b.grid){h=this.originalPageY+Math.round((h-this.originalPageY)/b.grid[1])*b.grid[1];h=g?!(h-this.offset.click.top<g[1]||h-this.offset.click.top>g[3])?h:!(h-this.offset.click.top<g[1])?h-b.grid[1]:h+b.grid[1]:h;e=this.originalPageX+Math.round((e-this.originalPageX)/b.grid[0])*b.grid[0];e=g?!(e-this.offset.click.left<g[0]||e-this.offset.click.left>g[2])?e:!(e-this.offset.click.left<
+g[0])?e-b.grid[0]:e+b.grid[0]:e}}return{top:h-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop()),left:e-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");
+this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(a,b,c){c=c||this._uiHash();d.ui.plugin.call(this,a,[b,c]);if(a=="drag")this.positionAbs=this._convertPositionTo("absolute");return d.Widget.prototype._trigger.call(this,a,b,c)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});d.extend(d.ui.draggable,{version:"1.8.13"});
+d.ui.plugin.add("draggable","connectToSortable",{start:function(a,b){var c=d(this).data("draggable"),f=c.options,e=d.extend({},b,{item:c.element});c.sortables=[];d(f.connectToSortable).each(function(){var h=d.data(this,"sortable");if(h&&!h.options.disabled){c.sortables.push({instance:h,shouldRevert:h.options.revert});h.refreshPositions();h._trigger("activate",a,e)}})},stop:function(a,b){var c=d(this).data("draggable"),f=d.extend({},b,{item:c.element});d.each(c.sortables,function(){if(this.instance.isOver){this.instance.isOver=
+0;c.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(a);this.instance.options.helper=this.instance.options._helper;c.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval=false;this.instance._trigger("deactivate",a,f)}})},drag:function(a,b){var c=d(this).data("draggable"),f=this;d.each(c.sortables,function(){this.instance.positionAbs=
+c.positionAbs;this.instance.helperProportions=c.helperProportions;this.instance.offset.click=c.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=d(f).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",true);this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return b.helper[0]};a.target=this.instance.currentItem[0];this.instance._mouseCapture(a,
+true);this.instance._mouseStart(a,true,true);this.instance.offset.click.top=c.offset.click.top;this.instance.offset.click.left=c.offset.click.left;this.instance.offset.parent.left-=c.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=c.offset.parent.top-this.instance.offset.parent.top;c._trigger("toSortable",a);c.dropped=this.instance.element;c.currentItem=c.element;this.instance.fromOutside=c}this.instance.currentItem&&this.instance._mouseDrag(a)}else if(this.instance.isOver){this.instance.isOver=
+0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",a,this.instance._uiHash(this.instance));this.instance._mouseStop(a,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&&this.instance.placeholder.remove();c._trigger("fromSortable",a);c.dropped=false}})}});d.ui.plugin.add("draggable","cursor",{start:function(){var a=d("body"),b=d(this).data("draggable").options;if(a.css("cursor"))b._cursor=
+a.css("cursor");a.css("cursor",b.cursor)},stop:function(){var a=d(this).data("draggable").options;a._cursor&&d("body").css("cursor",a._cursor)}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("opacity"))b._opacity=a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");
+if(a.scrollParent[0]!=document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){if(!c.axis||c.axis!="x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop+c.scrollSpeed;else if(a.pageY-b.overflowOffset.top<c.scrollSensitivity)b.scrollParent[0].scrollTop=
+f=b.scrollParent[0].scrollTop-c.scrollSpeed;if(!c.axis||c.axis!="y")if(b.overflowOffset.left+b.scrollParent[0].offsetWidth-a.pageX<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft+c.scrollSpeed;else if(a.pageX-b.overflowOffset.left<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft-c.scrollSpeed}else{if(!c.axis||c.axis!="x")if(a.pageY-d(document).scrollTop()<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()-c.scrollSpeed);
+else if(d(window).height()-(a.pageY-d(document).scrollTop())<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()+c.scrollSpeed);if(!c.axis||c.axis!="y")if(a.pageX-d(document).scrollLeft()<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()-c.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()+c.scrollSpeed)}f!==false&&d.ui.ddmanager&&!c.dropBehaviour&&d.ui.ddmanager.prepareOffsets(b,
+a)}});d.ui.plugin.add("draggable","snap",{start:function(){var a=d(this).data("draggable"),b=a.options;a.snapElements=[];d(b.snap.constructor!=String?b.snap.items||":data(draggable)":b.snap).each(function(){var c=d(this),f=c.offset();this!=a.element[0]&&a.snapElements.push({item:this,width:c.outerWidth(),height:c.outerHeight(),top:f.top,left:f.left})})},drag:function(a,b){for(var c=d(this).data("draggable"),f=c.options,e=f.snapTolerance,h=b.offset.left,g=h+c.helperProportions.width,n=b.offset.top,
+o=n+c.helperProportions.height,i=c.snapElements.length-1;i>=0;i--){var j=c.snapElements[i].left,l=j+c.snapElements[i].width,k=c.snapElements[i].top,m=k+c.snapElements[i].height;if(j-e<h&&h<l+e&&k-e<n&&n<m+e||j-e<h&&h<l+e&&k-e<o&&o<m+e||j-e<g&&g<l+e&&k-e<n&&n<m+e||j-e<g&&g<l+e&&k-e<o&&o<m+e){if(f.snapMode!="inner"){var p=Math.abs(k-o)<=e,q=Math.abs(m-n)<=e,r=Math.abs(j-g)<=e,s=Math.abs(l-h)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k-c.helperProportions.height,left:0}).top-c.margins.top;
+if(q)b.position.top=c._convertPositionTo("relative",{top:m,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j-c.helperProportions.width}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l}).left-c.margins.left}var t=p||q||r||s;if(f.snapMode!="outer"){p=Math.abs(k-n)<=e;q=Math.abs(m-o)<=e;r=Math.abs(j-h)<=e;s=Math.abs(l-g)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k,left:0}).top-c.margins.top;if(q)b.position.top=
+c._convertPositionTo("relative",{top:m-c.helperProportions.height,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l-c.helperProportions.width}).left-c.margins.left}if(!c.snapElements[i].snapping&&(p||q||r||s||t))c.options.snap.snap&&c.options.snap.snap.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=p||q||r||s||t}else{c.snapElements[i].snapping&&
+c.options.snap.release&&c.options.snap.release.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=false}}}});d.ui.plugin.add("draggable","stack",{start:function(){var a=d(this).data("draggable").options;a=d.makeArray(d(a.stack)).sort(function(c,f){return(parseInt(d(c).css("zIndex"),10)||0)-(parseInt(d(f).css("zIndex"),10)||0)});if(a.length){var b=parseInt(a[0].style.zIndex)||0;d(a).each(function(c){this.style.zIndex=b+c});this[0].style.zIndex=b+a.length}}});
+d.ui.plugin.add("draggable","zIndex",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("zIndex"))b._zIndex=a.css("zIndex");a.css("zIndex",b.zIndex)},stop:function(a,b){a=d(this).data("draggable").options;a._zIndex&&d(b.helper).css("zIndex",a._zIndex)}})})(jQuery);
+;/*
+ * jQuery UI Droppable 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Droppables
+ *
+ * Depends:
+ *	jquery.ui.core.js
+ *	jquery.ui.widget.js
+ *	jquery.ui.mouse.js
+ *	jquery.ui.draggable.js
+ */
+(function(d){d.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"},_create:function(){var a=this.options,b=a.accept;this.isover=0;this.isout=1;this.accept=d.isFunction(b)?b:function(c){return c.is(b)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};d.ui.ddmanager.droppables[a.scope]=d.ui.ddmanager.droppables[a.scope]||[];d.ui.ddmanager.droppables[a.scope].push(this);
+a.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var a=d.ui.ddmanager.droppables[this.options.scope],b=0;b<a.length;b++)a[b]==this&&a.splice(b,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(a,b){if(a=="accept")this.accept=d.isFunction(b)?b:function(c){return c.is(b)};d.Widget.prototype._setOption.apply(this,arguments)},_activate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&
+this.element.addClass(this.options.activeClass);b&&this._trigger("activate",a,this.ui(b))},_deactivate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);b&&this._trigger("deactivate",a,this.ui(b))},_over:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.addClass(this.options.hoverClass);
+this._trigger("over",a,this.ui(b))}},_out:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("out",a,this.ui(b))}},_drop:function(a,b){var c=b||d.ui.ddmanager.current;if(!c||(c.currentItem||c.element)[0]==this.element[0])return false;var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var g=
+d.data(this,"droppable");if(g.options.greedy&&!g.options.disabled&&g.options.scope==c.options.scope&&g.accept.call(g.element[0],c.currentItem||c.element)&&d.ui.intersect(c,d.extend(g,{offset:g.element.offset()}),g.options.tolerance)){e=true;return false}});if(e)return false;if(this.accept.call(this.element[0],c.currentItem||c.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass);this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("drop",
+a,this.ui(c));return this.element}return false},ui:function(a){return{draggable:a.currentItem||a.element,helper:a.helper,position:a.position,offset:a.positionAbs}}});d.extend(d.ui.droppable,{version:"1.8.13"});d.ui.intersect=function(a,b,c){if(!b.offset)return false;var e=(a.positionAbs||a.position.absolute).left,g=e+a.helperProportions.width,f=(a.positionAbs||a.position.absolute).top,h=f+a.helperProportions.height,i=b.offset.left,k=i+b.proportions.width,j=b.offset.top,l=j+b.proportions.height;
+switch(c){case "fit":return i<=e&&g<=k&&j<=f&&h<=l;case "intersect":return i<e+a.helperProportions.width/2&&g-a.helperProportions.width/2<k&&j<f+a.helperProportions.height/2&&h-a.helperProportions.height/2<l;case "pointer":return d.ui.isOver((a.positionAbs||a.position.absolute).top+(a.clickOffset||a.offset.click).top,(a.positionAbs||a.position.absolute).left+(a.clickOffset||a.offset.click).left,j,i,b.proportions.height,b.proportions.width);case "touch":return(f>=j&&f<=l||h>=j&&h<=l||f<j&&h>l)&&(e>=
+i&&e<=k||g>=i&&g<=k||e<i&&g>k);default:return false}};d.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,b){var c=d.ui.ddmanager.droppables[a.options.scope]||[],e=b?b.type:null,g=(a.currentItem||a.element).find(":data(droppable)").andSelf(),f=0;a:for(;f<c.length;f++)if(!(c[f].options.disabled||a&&!c[f].accept.call(c[f].element[0],a.currentItem||a.element))){for(var h=0;h<g.length;h++)if(g[h]==c[f].element[0]){c[f].proportions.height=0;continue a}c[f].visible=c[f].element.css("display")!=
+"none";if(c[f].visible){e=="mousedown"&&c[f]._activate.call(c[f],b);c[f].offset=c[f].element.offset();c[f].proportions={width:c[f].element[0].offsetWidth,height:c[f].element[0].offsetHeight}}}},drop:function(a,b){var c=false;d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(this.options){if(!this.options.disabled&&this.visible&&d.ui.intersect(a,this,this.options.tolerance))c=c||this._drop.call(this,b);if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],a.currentItem||
+a.element)){this.isout=1;this.isover=0;this._deactivate.call(this,b)}}});return c},drag:function(a,b){a.options.refreshPositions&&d.ui.ddmanager.prepareOffsets(a,b);d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var c=d.ui.intersect(a,this,this.options.tolerance);if(c=!c&&this.isover==1?"isout":c&&this.isover==0?"isover":null){var e;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");if(g.length){e=
+d.data(g[0],"droppable");e.greedyChild=c=="isover"?1:0}}if(e&&c=="isover"){e.isover=0;e.isout=1;e._out.call(e,b)}this[c]=1;this[c=="isout"?"isover":"isout"]=0;this[c=="isover"?"_over":"_out"].call(this,b);if(e&&c=="isout"){e.isout=0;e.isover=1;e._over.call(e,b)}}}})}}})(jQuery);
+;/*
+ * jQuery UI Resizable 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Resizables
+ *
+ * Depends:
+ *	jquery.ui.core.js
+ *	jquery.ui.mouse.js
+ *	jquery.ui.widget.js
+ */
+(function(e){e.widget("ui.resizable",e.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var b=this,a=this.options;this.element.addClass("ui-resizable");e.extend(this,{_aspectRatio:!!a.aspectRatio,aspectRatio:a.aspectRatio,originalElement:this.element,
+_proportionallyResizeElements:[],_helper:a.helper||a.ghost||a.animate?a.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&e.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(e('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),
+top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=
+this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=a.handles||(!e(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",
+nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var d=0;d<c.length;d++){var f=e.trim(c[d]),g=e('<div class="ui-resizable-handle '+("ui-resizable-"+f)+'"></div>');/sw|se|ne|nw/.test(f)&&g.css({zIndex:++a.zIndex});"se"==f&&g.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[f]=".ui-resizable-"+f;this.element.append(g)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor==
+String)this.handles[i]=e(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=e(this.handles[i],this.element),k=0;k=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,k);this._proportionallyResize()}e(this.handles[i])}};this._renderAxis(this.element);this._handles=e(".ui-resizable-handle",this.element).disableSelection();
+this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();e(this.element).addClass("ui-resizable-autohide").hover(function(){if(!a.disabled){e(this).removeClass("ui-resizable-autohide");b._handles.show()}},function(){if(!a.disabled)if(!b.resizing){e(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();
+var b=function(c){e(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a=
+false;for(var c in this.handles)if(e(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:e(document).scrollTop(),left:e(document).scrollLeft()};if(d.is(".ui-draggable")||/absolute/.test(d.css("position")))d.css({position:"absolute",top:c.top,left:c.left});e.browser.opera&&/relative/.test(d.css("position"))&&d.css({position:"relative",top:"auto",left:"auto"});
+this._renderProxy();c=m(this.helper.css("left"));var f=m(this.helper.css("top"));if(a.containment){c+=e(a.containment).scrollLeft()||0;f+=e(a.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:c,top:f};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:c,top:f};this.sizeDiff=
+{width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio:this.originalSize.width/this.originalSize.height||1;a=e(".ui-resizable-"+this.axis).css("cursor");e("body").css("cursor",a=="auto"?this.axis+"-resize":a);d.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,d=this._change[this.axis];
+if(!d)return false;c=d.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize",b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false},_mouseStop:function(b){this.resizing=
+false;var a=this.options,c=this;if(this._helper){var d=this._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName);d=f&&e.ui.hasScroll(d[0],"left")?0:c.sizeDiff.height;f=f?0:c.sizeDiff.width;f={width:c.helper.width()-f,height:c.helper.height()-d};d=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var g=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(e.extend(f,{top:g,left:d}));c.helper.height(c.size.height);
+c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}e("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",b);this._helper&&this.helper.remove();return false},_updateCache:function(b){this.offset=this.helper.offset();if(l(b.left))this.position.left=b.left;if(l(b.top))this.position.top=b.top;if(l(b.height))this.size.height=b.height;if(l(b.width))this.size.width=b.width},_updateRatio:function(b){var a=this.position,c=this.size,
+d=this.axis;if(b.height)b.width=c.height*this.aspectRatio;else if(b.width)b.height=c.width/this.aspectRatio;if(d=="sw"){b.left=a.left+(c.width-b.width);b.top=null}if(d=="nw"){b.top=a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this.options,c=this.axis,d=l(b.width)&&a.maxWidth&&a.maxWidth<b.width,f=l(b.height)&&a.maxHeight&&a.maxHeight<b.height,g=l(b.width)&&a.minWidth&&a.minWidth>b.width,h=l(b.height)&&a.minHeight&&a.minHeight>b.height;if(g)b.width=
+a.minWidth;if(h)b.height=a.minHeight;if(d)b.width=a.maxWidth;if(f)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+this.size.height,k=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(g&&k)b.left=i-a.minWidth;if(d&&k)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(f&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left=null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=
+this.helper||this.element,a=0;a<this._proportionallyResizeElements.length;a++){var c=this._proportionallyResizeElements[a];if(!this.borderDif){var d=[c.css("borderTopWidth"),c.css("borderRightWidth"),c.css("borderBottomWidth"),c.css("borderLeftWidth")],f=[c.css("paddingTop"),c.css("paddingRight"),c.css("paddingBottom"),c.css("paddingLeft")];this.borderDif=e.map(d,function(g,h){g=parseInt(g,10)||0;h=parseInt(f[h],10)||0;return g+h})}e.browser.msie&&(e(b).is(":hidden")||e(b).parents(":hidden").length)||
+c.css({height:b.height()-this.borderDif[0]-this.borderDif[2]||0,width:b.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var b=this.options;this.elementOffset=this.element.offset();if(this._helper){this.helper=this.helper||e('<div style="overflow:hidden;"></div>');var a=e.browser.msie&&e.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-
+c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,a){return{width:this.originalSize.width+a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+c}},se:function(b,a,c){return e.extend(this._change.s.apply(this,
+arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a,c]))},ne:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){e.ui.plugin.call(this,b,[a,this.ui()]);b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,
+element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});e.extend(e.ui.resizable,{version:"1.8.13"});e.ui.plugin.add("resizable","alsoResize",{start:function(){var b=e(this).data("resizable").options,a=function(c){e(c).each(function(){var d=e(this);d.data("resizable-alsoresize",{width:parseInt(d.width(),10),height:parseInt(d.height(),10),left:parseInt(d.css("left"),10),top:parseInt(d.css("top"),10),position:d.css("position")})})};
+if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize=b.alsoResize[0];a(b.alsoResize)}else e.each(b.alsoResize,function(c){a(c)});else a(b.alsoResize)},resize:function(b,a){var c=e(this).data("resizable");b=c.options;var d=c.originalSize,f=c.originalPosition,g={height:c.size.height-d.height||0,width:c.size.width-d.width||0,top:c.position.top-f.top||0,left:c.position.left-f.left||0},h=function(i,j){e(i).each(function(){var k=e(this),q=e(this).data("resizable-alsoresize"),
+p={},r=j&&j.length?j:k.parents(a.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(r,function(n,o){if((n=(q[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(e.browser.opera&&/relative/.test(k.css("position"))){c._revertToRelativePosition=true;k.css({position:"absolute",top:"auto",left:"auto"})}k.css(p)})};typeof b.alsoResize=="object"&&!b.alsoResize.nodeType?e.each(b.alsoResize,function(i,j){h(i,j)}):h(b.alsoResize)},stop:function(){var b=e(this).data("resizable"),a=b.options,
+c=function(d){e(d).each(function(){var f=e(this);f.css({position:f.data("resizable-alsoresize").position})})};if(b._revertToRelativePosition){b._revertToRelativePosition=false;typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?e.each(a.alsoResize,function(d){c(d)}):c(a.alsoResize)}e(this).removeData("resizable-alsoresize")}});e.ui.plugin.add("resizable","animate",{stop:function(b){var a=e(this).data("resizable"),c=a.options,d=a._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName),
+g=f&&e.ui.hasScroll(d[0],"left")?0:a.sizeDiff.height;f={width:a.size.width-(f?0:a.sizeDiff.width),height:a.size.height-g};g=parseInt(a.element.css("left"),10)+(a.position.left-a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(e.extend(f,h&&g?{top:h,left:g}:{}),{duration:c.animateDuration,easing:c.animateEasing,step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),
+10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};d&&d.length&&e(d[0]).css({width:i.width,height:i.height});a._updateCache(i);a._propagate("resize",b)}})}});e.ui.plugin.add("resizable","containment",{start:function(){var b=e(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof e?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement=e(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,
+top:0};b.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}}else{var d=e(a),f=[];e(["Top","Right","Left","Bottom"]).each(function(i,j){f[i]=m(d.css("padding"+j))});b.containerOffset=d.offset();b.containerPosition=d.position();b.containerSize={height:d.innerHeight()-f[3],width:d.innerWidth()-f[1]};c=b.containerOffset;var g=b.containerSize.height,h=b.containerSize.width;h=e.ui.hasScroll(a,"left")?a.scrollWidth:h;
+g=e.ui.hasScroll(a)?a.scrollHeight:g;b.parentData={element:a,left:c.left,top:c.top,width:h,height:g}}}},resize:function(b){var a=e(this).data("resizable"),c=a.options,d=a.containerOffset,f=a.position;b=a._aspectRatio||b.shiftKey;var g={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))g=d;if(f.left<(a._helper?d.left:0)){a.size.width+=a._helper?a.position.left-d.left:a.position.left-g.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?d.left:
+0}if(f.top<(a._helper?d.top:0)){a.size.height+=a._helper?a.position.top-d.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper?d.top:0}a.offset.left=a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-g.left:a.offset.left-g.left)+a.sizeDiff.width);d=Math.abs((a._helper?a.offset.top-g.top:a.offset.top-d.top)+a.sizeDiff.height);f=a.containerElement.get(0)==a.element.parent().get(0);g=/relative|absolute/.test(a.containerElement.css("position"));
+if(f&&g)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height=a.size.width/a.aspectRatio}if(d+a.size.height>=a.parentData.height){a.size.height=a.parentData.height-d;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=e(this).data("resizable"),a=b.options,c=b.containerOffset,d=b.containerPosition,f=b.containerElement,g=e(b.helper),h=g.offset(),i=g.outerWidth()-b.sizeDiff.width;g=g.outerHeight()-b.sizeDiff.height;b._helper&&
+!a.animate&&/relative/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g});b._helper&&!a.animate&&/static/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g})}});e.ui.plugin.add("resizable","ghost",{start:function(){var b=e(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25,display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost==
+"string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=e(this).data("resizable");b.ghost&&b.ghost.css({position:"relative",height:b.size.height,width:b.size.width})},stop:function(){var b=e(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});e.ui.plugin.add("resizable","grid",{resize:function(){var b=e(this).data("resizable"),a=b.options,c=b.size,d=b.originalSize,f=b.originalPosition,g=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;
+var h=Math.round((c.width-d.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-d.height)/(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else if(/^(ne)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}else{if(/^(sw)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else{b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}b.position.left=f.left-h}}});var m=function(b){return parseInt(b,
+10)||0},l=function(b){return!isNaN(parseInt(b,10))}})(jQuery);
+;/*
+ * jQuery UI Selectable 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Selectables
+ *
+ * Depends:
+ *	jquery.ui.core.js
+ *	jquery.ui.mouse.js
+ *	jquery.ui.widget.js
+ */
+(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(c.options.filter,c.element[0]);f.each(function(){var d=e(this),b=d.offset();e.data(this,"selectable-item",{element:this,$element:d,left:b.left,top:b.top,right:b.left+d.outerWidth(),bottom:b.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"),
+selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX,
+c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting");b.unselecting=true;f._trigger("unselecting",
+c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f=this;this.dragged=true;if(!this.options.disabled){var d=
+this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.right<b||a.top>i||a.bottom<g);else if(d.tolerance=="fit")k=a.left>b&&a.right<h&&a.top>g&&a.bottom<i;if(k){if(a.selected){a.$element.removeClass("ui-selected");a.selected=false}if(a.unselecting){a.$element.removeClass("ui-unselecting");
+a.unselecting=false}if(!a.selecting){a.$element.addClass("ui-selecting");a.selecting=true;f._trigger("selecting",c,{selecting:a.element})}}else{if(a.selecting)if(c.metaKey&&a.startselected){a.$element.removeClass("ui-selecting");a.selecting=false;a.$element.addClass("ui-selected");a.selected=true}else{a.$element.removeClass("ui-selecting");a.selecting=false;if(a.startselected){a.$element.addClass("ui-unselecting");a.unselecting=true}f._trigger("unselecting",c,{unselecting:a.element})}if(a.selected)if(!c.metaKey&&
+!a.startselected){a.$element.removeClass("ui-selected");a.selected=false;a.$element.addClass("ui-unselecting");a.unselecting=true;f._trigger("unselecting",c,{unselecting:a.element})}}}});return false}},_mouseStop:function(c){var f=this;this.dragged=false;e(".ui-unselecting",this.element[0]).each(function(){var d=e.data(this,"selectable-item");d.$element.removeClass("ui-unselecting");d.unselecting=false;d.startselected=false;f._trigger("unselected",c,{unselected:d.element})});e(".ui-selecting",this.element[0]).each(function(){var d=
+e.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected");d.selecting=false;d.selected=true;d.startselected=true;f._trigger("selected",c,{selected:d.element})});this._trigger("stop",c);this.helper.remove();return false}});e.extend(e.ui.selectable,{version:"1.8.13"})})(jQuery);
+;/*
+ * jQuery UI Sortable 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Sortables
+ *
+ * Depends:
+ *	jquery.ui.core.js
+ *	jquery.ui.mouse.js
+ *	jquery.ui.widget.js
+ */
+(function(d){d.widget("ui.sortable",d.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){var a=this.options;this.containerCache={};this.element.addClass("ui-sortable");
+this.refresh();this.floating=this.items.length?a.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData("sortable-item");return this},_setOption:function(a,b){if(a===
+"disabled"){this.options[a]=b;this.widget()[b?"addClass":"removeClass"]("ui-sortable-disabled")}else d.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(a,b){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(a);var c=null,e=this;d(a.target).parents().each(function(){if(d.data(this,"sortable-item")==e){c=d(this);return false}});if(d.data(a.target,"sortable-item")==e)c=d(a.target);if(!c)return false;if(this.options.handle&&
+!b){var f=false;d(this.options.handle,c).find("*").andSelf().each(function(){if(this==a.target)f=true});if(!f)return false}this.currentItem=c;this._removeCurrentsFromItems();return true},_mouseStart:function(a,b,c){b=this.options;var e=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,
+left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};
+this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();b.containment&&this._setContainment();if(b.cursor){if(d("body").css("cursor"))this._storedCursor=d("body").css("cursor");d("body").css("cursor",b.cursor)}if(b.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",b.opacity)}if(b.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",b.zIndex)}if(this.scrollParent[0]!=
+document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",a,e._uiHash(this));if(d.ui.ddmanager)d.ui.ddmanager.current=this;d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a);
+return true},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var b=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageY<b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop+b.scrollSpeed;else if(a.pageY-this.overflowOffset.top<
+b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop-b.scrollSpeed;if(this.overflowOffset.left+this.scrollParent[0].offsetWidth-a.pageX<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft+b.scrollSpeed;else if(a.pageX-this.overflowOffset.left<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft-b.scrollSpeed}else{if(a.pageY-d(document).scrollTop()<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()-
+b.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()+b.scrollSpeed);if(a.pageX-d(document).scrollLeft()<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()-b.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()+b.scrollSpeed)}c!==false&&d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,
+a)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(b=this.items.length-1;b>=0;b--){c=this.items[b];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!d.ui.contains(this.placeholder[0],e)&&(this.options.type=="semi-dynamic"?!d.ui.contains(this.element[0],
+e):true)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(a,c);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(a,b){if(a){d.ui.ddmanager&&!this.options.dropBehaviour&&d.ui.ddmanager.drop(this,a);if(this.options.revert){var c=this;b=c.placeholder.offset();
+c.reverting=true;d(this.helper).animate({left:b.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:b.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(a)})}else this._clear(a,b);return false}},cancel:function(){var a=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):
+this.currentItem.show();for(var b=this.containers.length-1;b>=0;b--){this.containers[b]._trigger("deactivate",null,a._uiHash(this));if(this.containers[b].containerCache.over){this.containers[b]._trigger("out",null,a._uiHash(this));this.containers[b].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();d.extend(this,{helper:null,
+dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?d(this.domPosition.prev).after(this.currentItem):d(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};d(b).each(function(){var e=(d(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);if(e)c.push((a.key||e[1]+"[]")+"="+(a.key&&a.expression?e[1]:e[2]))});!c.length&&a.key&&c.push(a.key+"=");return c.join("&")},
+toArray:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};b.each(function(){c.push(d(a.item||this).attr(a.attribute||"id")||"")});return c},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,g=a.left,h=g+a.width,i=a.top,k=i+a.height,j=this.offset.click.top,l=this.offset.click.left;j=e+j>i&&e+j<k&&b+l>g&&b+l<h;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||
+this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>a[this.floating?"width":"height"]?j:g<b+this.helperProportions.width/2&&c-this.helperProportions.width/2<h&&i<e+this.helperProportions.height/2&&f-this.helperProportions.height/2<k},_intersectsWithPointer:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left,a.width);b=b&&a;a=this._getDragVerticalDirection();
+var c=this._getDragHorizontalDirection();if(!b)return false;return this.floating?c&&c=="right"||a=="down"?2:1:a&&(a=="down"?2:1)},_intersectsWithSides:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top+a.height/2,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left+a.width/2,a.width);var c=this._getDragVerticalDirection(),e=this._getDragHorizontalDirection();return this.floating&&e?e=="right"&&a||e=="left"&&!a:c&&(c=="down"&&b||c=="up"&&!b)},
+_getDragVerticalDirection:function(){var a=this.positionAbs.top-this.lastPositionAbs.top;return a!=0&&(a>0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a);this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(a){var b=[],c=[],e=this._connectWith();
+if(e&&a)for(a=e.length-1;a>=0;a--)for(var f=d(e[a]),g=f.length-1;g>=0;g--){var h=d.data(f[g],"sortable");if(h&&h!=this&&!h.options.disabled)c.push([d.isFunction(h.options.items)?h.options.items.call(h.element):d(h.options.items,h.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),h])}c.push([d.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):d(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),
+this]);for(a=c.length-1;a>=0;a--)c[a][0].each(function(){b.push(this)});return d(b)},_removeCurrentsFromItems:function(){for(var a=this.currentItem.find(":data(sortable-item)"),b=0;b<this.items.length;b++)for(var c=0;c<a.length;c++)a[c]==this.items[b].item[0]&&this.items.splice(b,1)},_refreshItems:function(a){this.items=[];this.containers=[this];var b=this.items,c=[[d.isFunction(this.options.items)?this.options.items.call(this.element[0],a,{item:this.currentItem}):d(this.options.items,this.element),
+this]],e=this._connectWith();if(e)for(var f=e.length-1;f>=0;f--)for(var g=d(e[f]),h=g.length-1;h>=0;h--){var i=d.data(g[h],"sortable");if(i&&i!=this&&!i.options.disabled){c.push([d.isFunction(i.options.items)?i.options.items.call(i.element[0],a,{item:this.currentItem}):d(i.options.items,i.element),i]);this.containers.push(i)}}for(f=c.length-1;f>=0;f--){a=c[f][1];e=c[f][0];h=0;for(g=e.length;h<g;h++){i=d(e[h]);i.data("sortable-item",a);b.push({item:i,instance:a,width:0,height:0,left:0,top:0})}}},refreshPositions:function(a){if(this.offsetParent&&
+this.helper)this.offset.parent=this._getParentOffset();for(var b=this.items.length-1;b>=0;b--){var c=this.items[b];if(!(c.instance!=this.currentContainer&&this.currentContainer&&c.item[0]!=this.currentItem[0])){var e=this.options.toleranceElement?d(this.options.toleranceElement,c.item):c.item;if(!a){c.width=e.outerWidth();c.height=e.outerHeight()}e=e.offset();c.left=e.left;c.top=e.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(b=
+this.containers.length-1;b>=0;b--){e=this.containers[b].element.offset();this.containers[b].containerCache.left=e.left;this.containers[b].containerCache.top=e.top;this.containers[b].containerCache.width=this.containers[b].element.outerWidth();this.containers[b].containerCache.height=this.containers[b].element.outerHeight()}return this},_createPlaceholder:function(a){var b=a||this,c=b.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f=
+d(document.createElement(b.currentItem[0].nodeName)).addClass(e||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!e)f.style.visibility="hidden";return f},update:function(f,g){if(!(e&&!c.forcePlaceholderSize)){g.height()||g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10));g.width()||g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||
+0,10))}}}}b.placeholder=d(c.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);c.placeholder.update(b,b.placeholder)},_contactContainers:function(a){for(var b=null,c=null,e=this.containers.length-1;e>=0;e--)if(!d.ui.contains(this.currentItem[0],this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(b&&d.ui.contains(this.containers[e].element[0],b.element[0]))){b=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out",
+a,this._uiHash(this));this.containers[e].containerCache.over=0}if(b)if(this.containers.length===1){this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){b=1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],g=this.items.length-1;g>=0;g--)if(d.ui.contains(this.containers[c].element[0],this.items[g].item[0])){var h=this.items[g][this.containers[c].floating?"left":"top"];if(Math.abs(h-
+f)<b){b=Math.abs(h-f);e=this.items[g]}}if(e||this.options.dropOnEmpty){this.currentContainer=this.containers[c];e?this._rearrange(a,e,null,true):this._rearrange(a,null,this.containers[c].element,true);this._trigger("change",a,this._uiHash());this.containers[c]._trigger("change",a,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder);this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}}},_createHelper:function(a){var b=
+this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a,this.currentItem])):b.helper=="clone"?this.currentItem.clone():this.currentItem;a.parents("body").length||d(b.appendTo!="parent"?b.appendTo:this.currentItem[0].parentNode)[0].appendChild(a[0]);if(a[0]==this.currentItem[0])this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")};if(a[0].style.width==
+""||b.forceHelperSize)a.width(this.currentItem.width());if(a[0].style.height==""||b.forceHelperSize)a.height(this.currentItem.height());return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=
+this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a=
+{top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.currentItem.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),
+10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,d(a.containment=="document"?
+document:window).width()-this.helperProportions.width-this.margins.left,(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)){var b=d(a.containment)[0];a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"),
+10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(a,b){if(!b)b=
+this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&
+this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0]))this.offset.relative=this._getRelativeOffset();
+var f=a.pageX,g=a.pageY;if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.left<this.containment[0])f=this.containment[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<this.containment[1])g=this.containment[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>this.containment[2])f=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-
+this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:!(g-this.offset.click.top<this.containment[1])?g-b.grid[1]:g+b.grid[1]:g;f=this.originalPageX+Math.round((f-this.originalPageX)/b.grid[0])*b.grid[0];f=this.containment?!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:!(f-this.offset.click.left<this.containment[0])?f-b.grid[0]:f+b.grid[0]:f}}return{top:g-
+this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())}},_rearrange:function(a,b,c,e){c?c[0].appendChild(this.placeholder[0]):b.item[0].parentNode.insertBefore(this.placeholder[0],
+this.direction=="down"?b.item[0]:b.item[0].nextSibling);this.counter=this.counter?++this.counter:1;var f=this,g=this.counter;window.setTimeout(function(){g==f.counter&&f.refreshPositions(!e)},0)},_clear:function(a,b){this.reverting=false;var c=[];!this._noFinalSort&&this.currentItem[0].parentNode&&this.placeholder.before(this.currentItem);this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var e in this._storedCSS)if(this._storedCSS[e]=="auto"||this._storedCSS[e]=="static")this._storedCSS[e]=
+"";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!b&&c.push(function(f){this._trigger("receive",f,this._uiHash(this.fromOutside))});if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!b)c.push(function(f){this._trigger("update",f,this._uiHash())});if(!d.ui.contains(this.element[0],this.currentItem[0])){b||c.push(function(f){this._trigger("remove",
+f,this._uiHash())});for(e=this.containers.length-1;e>=0;e--)if(d.ui.contains(this.containers[e].element[0],this.currentItem[0])&&!b){c.push(function(f){return function(g){f._trigger("receive",g,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(g){f._trigger("update",g,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){b||c.push(function(f){return function(g){f._trigger("deactivate",g,this._uiHash(this))}}.call(this,
+this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out",g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop",
+a,this._uiHash());for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}return false}b||this._trigger("beforeStop",a,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!b){for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){d.Widget.prototype._trigger.apply(this,arguments)===false&&this.cancel()},
+_uiHash:function(a){var b=a||this;return{helper:b.helper,placeholder:b.placeholder||d([]),position:b.position,originalPosition:b.originalPosition,offset:b.positionAbs,item:b.currentItem,sender:a?a.element:null}}});d.extend(d.ui.sortable,{version:"1.8.13"})})(jQuery);
+;/*
+ * jQuery UI Accordion 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Accordion
+ *
+ * Depends:
+ *	jquery.ui.core.js
+ *	jquery.ui.widget.js
+ */
+(function(c){c.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var a=this,b=a.options;a.running=0;a.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix");
+a.headers=a.element.find(b.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){b.disabled||c(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){b.disabled||c(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){b.disabled||c(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){b.disabled||c(this).removeClass("ui-state-focus")});a.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");
+if(b.navigation){var d=a.element.find("a").filter(b.navigationFilter).eq(0);if(d.length){var h=d.closest(".ui-accordion-header");a.active=h.length?h:d.closest(".ui-accordion-content").prev()}}a.active=a._findActive(a.active||b.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");a.active.next().addClass("ui-accordion-content-active");a._createIcons();a.resize();a.element.attr("role","tablist");a.headers.attr("role","tab").bind("keydown.accordion",
+function(f){return a._keydown(f)}).next().attr("role","tabpanel");a.headers.not(a.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide();a.active.length?a.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):a.headers.eq(0).attr("tabIndex",0);c.browser.safari||a.headers.find("a").attr("tabIndex",-1);b.event&&a.headers.bind(b.event.split(" ").join(".accordion ")+".accordion",function(f){a._clickHandler.call(a,f,this);f.preventDefault()})},_createIcons:function(){var a=
+this.options;if(a.icons){c("<span></span>").addClass("ui-icon "+a.icons.header).prependTo(this.headers);this.active.children(".ui-icon").toggleClass(a.icons.header).toggleClass(a.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var a=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex");
+this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(a.autoHeight||a.fillHeight)b.css("height","");return c.Widget.prototype.destroy.call(this)},_setOption:function(a,b){c.Widget.prototype._setOption.apply(this,arguments);a=="active"&&this.activate(b);if(a=="icons"){this._destroyIcons();
+b&&this._createIcons()}if(a=="disabled")this.headers.add(this.headers.next())[b?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(a){if(!(this.options.disabled||a.altKey||a.ctrlKey)){var b=c.ui.keyCode,d=this.headers.length,h=this.headers.index(a.target),f=false;switch(a.keyCode){case b.RIGHT:case b.DOWN:f=this.headers[(h+1)%d];break;case b.LEFT:case b.UP:f=this.headers[(h-1+d)%d];break;case b.SPACE:case b.ENTER:this._clickHandler({target:a.target},a.target);
+a.preventDefault()}if(f){c(a.target).attr("tabIndex",-1);c(f).attr("tabIndex",0);f.focus();return false}return true}},resize:function(){var a=this.options,b;if(a.fillSpace){if(c.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}b=this.element.parent().height();c.browser.msie&&this.element.parent().css("overflow",d);this.headers.each(function(){b-=c(this).outerHeight(true)});this.headers.next().each(function(){c(this).height(Math.max(0,b-c(this).innerHeight()+
+c(this).height()))}).css("overflow","auto")}else if(a.autoHeight){b=0;this.headers.next().each(function(){b=Math.max(b,c(this).height("").height())}).height(b)}return this},activate:function(a){this.options.active=a;a=this._findActive(a)[0];this._clickHandler({target:a},a);return this},_findActive:function(a){return a?typeof a==="number"?this.headers.filter(":eq("+a+")"):this.headers.not(this.headers.not(a)):a===false?c([]):this.headers.filter(":eq(0)")},_clickHandler:function(a,b){var d=this.options;
+if(!d.disabled)if(a.target){a=c(a.currentTarget||b);b=a[0]===this.active[0];d.active=d.collapsible&&b?false:this.headers.index(a);if(!(this.running||!d.collapsible&&b)){var h=this.active;j=a.next();g=this.active.next();e={options:d,newHeader:b&&d.collapsible?c([]):a,oldHeader:this.active,newContent:b&&d.collapsible?c([]):j,oldContent:g};var f=this.headers.index(this.active[0])>this.headers.index(a[0]);this.active=b?c([]):a;this._toggle(j,g,e,b,f);h.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);
+if(!b){a.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);a.next().addClass("ui-accordion-content-active")}}}else if(d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");var g=this.active.next(),
+e={options:d,newHeader:c([]),oldHeader:d.active,newContent:c([]),oldContent:g},j=this.active=c([]);this._toggle(j,g,e)}},_toggle:function(a,b,d,h,f){var g=this,e=g.options;g.toShow=a;g.toHide=b;g.data=d;var j=function(){if(g)return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data);g.running=b.size()===0?a.size():b.size();if(e.animated){d={};d=e.collapsible&&h?{toShow:c([]),toHide:b,complete:j,down:f,autoHeight:e.autoHeight||e.fillSpace}:{toShow:a,toHide:b,complete:j,down:f,autoHeight:e.autoHeight||
+e.fillSpace};if(!e.proxied)e.proxied=e.animated;if(!e.proxiedDuration)e.proxiedDuration=e.duration;e.animated=c.isFunction(e.proxied)?e.proxied(d):e.proxied;e.duration=c.isFunction(e.proxiedDuration)?e.proxiedDuration(d):e.proxiedDuration;h=c.ui.accordion.animations;var i=e.duration,k=e.animated;if(k&&!h[k]&&!c.easing[k])k="slide";h[k]||(h[k]=function(l){this.slide(l,{easing:k,duration:i||700})});h[k](d)}else{if(e.collapsible&&h)a.toggle();else{b.hide();a.show()}j(true)}b.prev().attr({"aria-expanded":"false",
+"aria-selected":"false",tabIndex:-1}).blur();a.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");if(this.toHide.length)this.toHide.parent()[0].className=this.toHide.parent()[0].className;this._trigger("change",null,this.data)}}});c.extend(c.ui.accordion,{version:"1.8.13",
+animations:{slide:function(a,b){a=c.extend({easing:"swing",duration:300},a,b);if(a.toHide.size())if(a.toShow.size()){var d=a.toShow.css("overflow"),h=0,f={},g={},e;b=a.toShow;e=b[0].style.width;b.width(parseInt(b.parent().width(),10)-parseInt(b.css("paddingLeft"),10)-parseInt(b.css("paddingRight"),10)-(parseInt(b.css("borderLeftWidth"),10)||0)-(parseInt(b.css("borderRightWidth"),10)||0));c.each(["height","paddingTop","paddingBottom"],function(j,i){g[i]="hide";j=(""+c.css(a.toShow[0],i)).match(/^([\d+-.]+)(.*)$/);
+f[i]={value:j[1],unit:j[2]||"px"}});a.toShow.css({height:0,overflow:"hidden"}).show();a.toHide.filter(":hidden").each(a.complete).end().filter(":visible").animate(g,{step:function(j,i){if(i.prop=="height")h=i.end-i.start===0?0:(i.now-i.start)/(i.end-i.start);a.toShow[0].style[i.prop]=h*f[i.prop].value+f[i.prop].unit},duration:a.duration,easing:a.easing,complete:function(){a.autoHeight||a.toShow.css("height","");a.toShow.css({width:e,overflow:d});a.complete()}})}else a.toHide.animate({height:"hide",
+paddingTop:"hide",paddingBottom:"hide"},a);else a.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},a)},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1E3:200})}}})})(jQuery);
+;/*
+ * jQuery UI Autocomplete 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Autocomplete
+ *
+ * Depends:
+ *	jquery.ui.core.js
+ *	jquery.ui.widget.js
+ *	jquery.ui.position.js
+ */
+(function(d){var e=0;d.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var a=this,b=this.element[0].ownerDocument,g;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!(a.options.disabled||a.element.attr("readonly"))){g=
+false;var f=d.ui.keyCode;switch(c.keyCode){case f.PAGE_UP:a._move("previousPage",c);break;case f.PAGE_DOWN:a._move("nextPage",c);break;case f.UP:a._move("previous",c);c.preventDefault();break;case f.DOWN:a._move("next",c);c.preventDefault();break;case f.ENTER:case f.NUMPAD_ENTER:if(a.menu.active){g=true;c.preventDefault()}case f.TAB:if(!a.menu.active)return;a.menu.select(c);break;case f.ESCAPE:a.element.val(a.term);a.close(c);break;default:clearTimeout(a.searching);a.searching=setTimeout(function(){if(a.term!=
+a.element.val()){a.selectedItem=null;a.search(null,c)}},a.options.delay);break}}}).bind("keypress.autocomplete",function(c){if(g){g=false;c.preventDefault()}}).bind("focus.autocomplete",function(){if(!a.options.disabled){a.selectedItem=null;a.previous=a.element.val()}}).bind("blur.autocomplete",function(c){if(!a.options.disabled){clearTimeout(a.searching);a.closing=setTimeout(function(){a.close(c);a._change(c)},150)}});this._initSource();this.response=function(){return a._response.apply(a,arguments)};
+this.menu=d("<ul></ul>").addClass("ui-autocomplete").appendTo(d(this.options.appendTo||"body",b)[0]).mousedown(function(c){var f=a.menu.element[0];d(c.target).closest(".ui-menu-item").length||setTimeout(function(){d(document).one("mousedown",function(h){h.target!==a.element[0]&&h.target!==f&&!d.ui.contains(f,h.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,f){f=f.item.data("item.autocomplete");false!==a._trigger("focus",c,{item:f})&&/^key/.test(c.originalEvent.type)&&
+a.element.val(f.value)},selected:function(c,f){var h=f.item.data("item.autocomplete"),i=a.previous;if(a.element[0]!==b.activeElement){a.element.focus();a.previous=i;setTimeout(function(){a.previous=i;a.selectedItem=h},1)}false!==a._trigger("select",c,{item:h})&&a.element.val(h.value);a.term=a.element.val();a.close(c);a.selectedItem=h},blur:function(){a.menu.element.is(":visible")&&a.element.val()!==a.term&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");
+d.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();d.Widget.prototype.destroy.call(this)},_setOption:function(a,b){d.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource();if(a==="appendTo")this.menu.element.appendTo(d(b||"body",this.element[0].ownerDocument)[0]);a==="disabled"&&
+b&&this.xhr&&this.xhr.abort()},_initSource:function(){var a=this,b,g;if(d.isArray(this.options.source)){b=this.options.source;this.source=function(c,f){f(d.ui.autocomplete.filter(b,c.term))}}else if(typeof this.options.source==="string"){g=this.options.source;this.source=function(c,f){a.xhr&&a.xhr.abort();a.xhr=d.ajax({url:g,data:c,dataType:"json",autocompleteRequest:++e,success:function(h){this.autocompleteRequest===e&&f(h)},error:function(){this.autocompleteRequest===e&&f([])}})}}else this.source=
+this.options.source},search:function(a,b){a=a!=null?a:this.element.val();this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search",b)!==false)return this._search(a)},_search:function(a){this.pending++;this.element.addClass("ui-autocomplete-loading");this.source({term:a},this.response)},_response:function(a){if(!this.options.disabled&&a&&a.length){a=this._normalize(a);this._suggest(a);this._trigger("open")}else this.close();
+this.pending--;this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(a){clearTimeout(this.closing);if(this.menu.element.is(":visible")){this.menu.element.hide();this.menu.deactivate();this._trigger("close",a)}},_change:function(a){this.previous!==this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(a){if(a.length&&a[0].label&&a[0].value)return a;return d.map(a,function(b){if(typeof b==="string")return{label:b,value:b};return d.extend({label:b.label||
+b.value,value:b.value||b.label},b)})},_suggest:function(a){var b=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(b,a);this.menu.deactivate();this.menu.refresh();b.show();this._resizeMenu();b.position(d.extend({of:this.element},this.options.position));this.options.autoFocus&&this.menu.next(new d.Event("mouseover"))},_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(a,b){var g=this;
+d.each(b,function(c,f){g._renderItem(a,f)})},_renderItem:function(a,b){return d("<li></li>").data("item.autocomplete",b).append(d("<a></a>").text(b.label)).appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);else this.search(null,b)},widget:function(){return this.menu.element}});d.extend(d.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,
+"\\$&")},filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i");return d.grep(a,function(c){return g.test(c.label||c.value||c)})}})})(jQuery);
+(function(d){d.widget("ui.menu",{_create:function(){var e=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(a){if(d(a.target).closest(".ui-menu-item a").length){a.preventDefault();e.select(a)}});this.refresh()},refresh:function(){var e=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex",
+-1).mouseenter(function(a){e.activate(a,d(this).parent())}).mouseleave(function(){e.deactivate()})},activate:function(e,a){this.deactivate();if(this.hasScroll()){var b=a.offset().top-this.element.offset().top,g=this.element.scrollTop(),c=this.element.height();if(b<0)this.element.scrollTop(g+b);else b>=c&&this.element.scrollTop(g+b-c+a.height())}this.active=a.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",e,{item:a})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id");
+this._trigger("blur");this.active=null}},next:function(e){this.move("next",".ui-menu-item:first",e)},previous:function(e){this.move("prev",".ui-menu-item:last",e)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(e,a,b){if(this.active){e=this.active[e+"All"](".ui-menu-item").eq(0);e.length?this.activate(b,e):this.activate(b,this.element.children(a))}else this.activate(b,
+this.element.children(a))},nextPage:function(e){if(this.hasScroll())if(!this.active||this.last())this.activate(e,this.element.children(".ui-menu-item:first"));else{var a=this.active.offset().top,b=this.element.height(),g=this.element.children(".ui-menu-item").filter(function(){var c=d(this).offset().top-a-b+d(this).height();return c<10&&c>-10});g.length||(g=this.element.children(".ui-menu-item:last"));this.activate(e,g)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||
+this.last()?":first":":last"))},previousPage:function(e){if(this.hasScroll())if(!this.active||this.first())this.activate(e,this.element.children(".ui-menu-item:last"));else{var a=this.active.offset().top,b=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var g=d(this).offset().top-a+b-d(this).height();return g<10&&g>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(e,result)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||
+this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[d.fn.prop?"prop":"attr"]("scrollHeight")},select:function(e){this._trigger("selected",e,{item:this.active})}})})(jQuery);
+;/*
+ * jQuery UI Button 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Button
+ *
+ * Depends:
+ *	jquery.ui.core.js
+ *	jquery.ui.widget.js
+ */
+(function(a){var g,i=function(b){a(":ui-button",b.target.form).each(function(){var c=a(this).data("button");setTimeout(function(){c.refresh()},1)})},h=function(b){var c=b.name,d=b.form,f=a([]);if(c)f=d?a(d).find("[name='"+c+"']"):a("[name='"+c+"']",b.ownerDocument).filter(function(){return!this.form});return f};a.widget("ui.button",{options:{disabled:null,text:true,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",
+i);if(typeof this.options.disabled!=="boolean")this.options.disabled=this.element.attr("disabled");this._determineButtonType();this.hasTitle=!!this.buttonElement.attr("title");var b=this,c=this.options,d=this.type==="checkbox"||this.type==="radio",f="ui-state-hover"+(!d?" ui-state-active":"");if(c.label===null)c.label=this.buttonElement.html();if(this.element.is(":disabled"))c.disabled=true;this.buttonElement.addClass("ui-button ui-widget ui-state-default ui-corner-all").attr("role","button").bind("mouseenter.button",
+function(){if(!c.disabled){a(this).addClass("ui-state-hover");this===g&&a(this).addClass("ui-state-active")}}).bind("mouseleave.button",function(){c.disabled||a(this).removeClass(f)}).bind("focus.button",function(){a(this).addClass("ui-state-focus")}).bind("blur.button",function(){a(this).removeClass("ui-state-focus")}).bind("click.button",function(e){c.disabled&&e.stopImmediatePropagation()});d&&this.element.bind("change.button",function(){b.refresh()});if(this.type==="checkbox")this.buttonElement.bind("click.button",
+function(){if(c.disabled)return false;a(this).toggleClass("ui-state-active");b.buttonElement.attr("aria-pressed",b.element[0].checked)});else if(this.type==="radio")this.buttonElement.bind("click.button",function(){if(c.disabled)return false;a(this).addClass("ui-state-active");b.buttonElement.attr("aria-pressed",true);var e=b.element[0];h(e).not(e).map(function(){return a(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed",false)});else{this.buttonElement.bind("mousedown.button",
+function(){if(c.disabled)return false;a(this).addClass("ui-state-active");g=this;a(document).one("mouseup",function(){g=null})}).bind("mouseup.button",function(){if(c.disabled)return false;a(this).removeClass("ui-state-active")}).bind("keydown.button",function(e){if(c.disabled)return false;if(e.keyCode==a.ui.keyCode.SPACE||e.keyCode==a.ui.keyCode.ENTER)a(this).addClass("ui-state-active")}).bind("keyup.button",function(){a(this).removeClass("ui-state-active")});this.buttonElement.is("a")&&this.buttonElement.keyup(function(e){e.keyCode===
+a.ui.keyCode.SPACE&&a(this).click()})}this._setOption("disabled",c.disabled)},_determineButtonType:function(){this.type=this.element.is(":checkbox")?"checkbox":this.element.is(":radio")?"radio":this.element.is("input")?"input":"button";if(this.type==="checkbox"||this.type==="radio"){var b=this.element.parents().filter(":last"),c="label[for="+this.element.attr("id")+"]";this.buttonElement=b.find(c);if(!this.buttonElement.length){b=b.length?b.siblings():this.element.siblings();this.buttonElement=b.filter(c);
+if(!this.buttonElement.length)this.buttonElement=b.find(c)}this.element.addClass("ui-helper-hidden-accessible");(b=this.element.is(":checked"))&&this.buttonElement.addClass("ui-state-active");this.buttonElement.attr("aria-pressed",b)}else this.buttonElement=this.element},widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible");this.buttonElement.removeClass("ui-button ui-widget ui-state-default ui-corner-all ui-state-hover ui-state-active  ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only").removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html());
+this.hasTitle||this.buttonElement.removeAttr("title");a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments);if(b==="disabled")c?this.element.attr("disabled",true):this.element.removeAttr("disabled");this._resetButton()},refresh:function(){var b=this.element.is(":disabled");b!==this.options.disabled&&this._setOption("disabled",b);if(this.type==="radio")h(this.element[0]).each(function(){a(this).is(":checked")?a(this).button("widget").addClass("ui-state-active").attr("aria-pressed",
+true):a(this).button("widget").removeClass("ui-state-active").attr("aria-pressed",false)});else if(this.type==="checkbox")this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed",true):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed",false)},_resetButton:function(){if(this.type==="input")this.options.label&&this.element.val(this.options.label);else{var b=this.buttonElement.removeClass("ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only"),
+c=a("<span></span>").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,f=d.primary&&d.secondary,e=[];if(d.primary||d.secondary){if(this.options.text)e.push("ui-button-text-icon"+(f?"s":d.primary?"-primary":"-secondary"));d.primary&&b.prepend("<span class='ui-button-icon-primary ui-icon "+d.primary+"'></span>");d.secondary&&b.append("<span class='ui-button-icon-secondary ui-icon "+d.secondary+"'></span>");if(!this.options.text){e.push(f?"ui-button-icons-only":
+"ui-button-icon-only");this.hasTitle||b.attr("title",c)}}else e.push("ui-button-text-only");b.addClass(e.join(" "))}}});a.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c);a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass("ui-corner-left").end().filter(":last").addClass("ui-corner-right").end().end()},
+destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");a.Widget.prototype.destroy.call(this)}})})(jQuery);
+;/*
+ * jQuery UI Dialog 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Dialog
+ *
+ * Depends:
+ *	jquery.ui.core.js
+ *	jquery.ui.widget.js
+ *  jquery.ui.button.js
+ *	jquery.ui.draggable.js
+ *	jquery.ui.mouse.js
+ *	jquery.ui.position.js
+ *	jquery.ui.resizable.js
+ */
+(function(c,l){var m={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},n={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true},o=c.attrFn||{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true,click:true};c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,
+position:{my:"center",at:"center",collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&&c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var a=this,b=a.options,d=b.title||"&#160;",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("<div></div>")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+
+b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),
+h=c('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);return false}).appendTo(f);(a.uiDialogTitlebarCloseText=c("<span></span>")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("<span></span>").addClass("ui-dialog-title").attr("id",
+e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;f.find("*").add(f).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");
+a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d,e;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!==
+b.uiDialog[0]){e=c(this).css("z-index");isNaN(e)||(d=Math.max(d,e))}});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=
+1;d.uiDialog.css("z-index",c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target===
+f[0]&&e.shiftKey){g.focus(1);return false}}});c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._isOpen=true;a._trigger("open");return a}},_createButtons:function(a){var b=this,d=false,e=c("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("<div></div>").addClass("ui-dialog-buttonset").appendTo(e);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,
+function(){return!(d=true)});if(d){c.each(a,function(f,h){h=c.isFunction(h)?{click:h,text:f}:h;var i=c('<button type="button"></button>').click(function(){h.click.apply(b.element[0],arguments)}).appendTo(g);c.each(h,function(j,k){if(j!=="click")j in o?i[j](k):i.attr(j,k)});c.fn.button&&i.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",
+handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",f,a(h))},drag:function(f,h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition,
+originalSize:f.originalSize,position:f.position,size:f.size}}a=a===l?this.options.resizable:a;var d=this,e=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:a,start:function(f,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",f,b(h))},resize:function(f,h){d._trigger("resize",
+f,b(h))},stop:function(f,h){c(this).removeClass("ui-dialog-resizing");e.height=c(this).height();e.width=c(this).width();d._trigger("resizeStop",f,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(a){var b=[],d=[0,0],e;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):
+[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(g,f){if(+b[g]===b[g]){d[g]=b[g];b[g]=f}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(e=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(c.extend({of:window},a));e||this.uiDialog.hide()},_setOptions:function(a){var b=this,d={},e=false;c.each(a,function(g,f){b._setOption(g,f);
+if(g in m)e=true;if(g in n)d[g]=f});e&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",d)},_setOption:function(a,b){var d=this,e=d.uiDialog;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"):
+e.removeClass("ui-dialog-disabled");break;case "draggable":var g=e.is(":data(draggable)");g&&!b&&e.draggable("destroy");!g&&b&&d._makeDraggable();break;case "position":d._position(b);break;case "resizable":(g=e.is(":data(resizable)"))&&!b&&e.resizable("destroy");g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||"&#160;"));break}c.Widget.prototype._setOption.apply(d,arguments)},_size:function(){var a=
+this.options,b,d,e=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();d=Math.max(0,a.minHeight-b);if(a.height==="auto")if(c.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();a=this.element.css("height","auto").height();e||this.uiDialog.hide();this.element.height(Math.max(a,d))}else this.element.height(Math.max(a.height-
+b,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.13",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),
+create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){if(c(d.target).zIndex()<c.ui.dialog.overlay.maxZ)return false})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||c("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),
+height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){var b=c.inArray(a,this.instances);b!=-1&&this.oldInstances.push(this.instances.splice(b,1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var d=0;c.each(this.instances,function(){d=Math.max(d,this.css("z-index"))});this.maxZ=d},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);
+b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a<b?c(window).height()+"px":a+"px"}else return c(document).height()+"px"},width:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);b=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return a<b?c(window).width()+"px":a+"px"}else return c(document).width()+"px"},resize:function(){var a=c([]);c.each(c.ui.dialog.overlay.instances,
+function(){a=a.add(this)});a.css({width:0,height:0}).css({width:c.ui.dialog.overlay.width(),height:c.ui.dialog.overlay.height()})}});c.extend(c.ui.dialog.overlay.prototype,{destroy:function(){c.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);
+;/*
+ * jQuery UI Slider 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Slider
+ *
+ * Depends:
+ *	jquery.ui.core.js
+ *	jquery.ui.mouse.js
+ *	jquery.ui.widget.js
+ */
+(function(d){d.widget("ui.slider",d.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var b=this,a=this.options,c=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f=a.values&&a.values.length||1,e=[];this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+
+this.orientation+" ui-widget ui-widget-content ui-corner-all"+(a.disabled?" ui-slider-disabled ui-disabled":""));this.range=d([]);if(a.range){if(a.range===true){if(!a.values)a.values=[this._valueMin(),this._valueMin()];if(a.values.length&&a.values.length!==2)a.values=[a.values[0],a.values[0]]}this.range=d("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(a.range==="min"||a.range==="max"?" ui-slider-range-"+a.range:""))}for(var j=c.length;j<f;j+=1)e.push("<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>");
+this.handles=c.add(d(e.join("")).appendTo(b.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(g){g.preventDefault()}).hover(function(){a.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(a.disabled)d(this).blur();else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(g){d(this).data("index.ui-slider-handle",
+g)});this.handles.keydown(function(g){var k=true,l=d(this).data("index.ui-slider-handle"),i,h,m;if(!b.options.disabled){switch(g.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:k=false;if(!b._keySliding){b._keySliding=true;d(this).addClass("ui-state-active");i=b._start(g,l);if(i===false)return}break}m=b.options.step;i=b.options.values&&b.options.values.length?
+(h=b.values(l)):(h=b.value());switch(g.keyCode){case d.ui.keyCode.HOME:h=b._valueMin();break;case d.ui.keyCode.END:h=b._valueMax();break;case d.ui.keyCode.PAGE_UP:h=b._trimAlignValue(i+(b._valueMax()-b._valueMin())/5);break;case d.ui.keyCode.PAGE_DOWN:h=b._trimAlignValue(i-(b._valueMax()-b._valueMin())/5);break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(i===b._valueMax())return;h=b._trimAlignValue(i+m);break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(i===b._valueMin())return;h=b._trimAlignValue(i-
+m);break}b._slide(g,l,h);return k}}).keyup(function(g){var k=d(this).data("index.ui-slider-handle");if(b._keySliding){b._keySliding=false;b._stop(g,k);b._change(g,k);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy();
+return this},_mouseCapture:function(b){var a=this.options,c,f,e,j,g;if(a.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:b.pageX,y:b.pageY});f=this._valueMax()-this._valueMin()+1;j=this;this.handles.each(function(k){var l=Math.abs(c-j.values(k));if(f>l){f=l;e=d(this);g=k}});if(a.range===true&&this.values(1)===a.min){g+=1;e=d(this.handles[g])}if(this._start(b,g)===false)return false;
+this._mouseSliding=true;j._handleIndex=g;e.addClass("ui-state-active").focus();a=e.offset();this._clickOffset=!d(b.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:b.pageX-a.left-e.width()/2,top:b.pageY-a.top-e.height()/2-(parseInt(e.css("borderTopWidth"),10)||0)-(parseInt(e.css("borderBottomWidth"),10)||0)+(parseInt(e.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(b,g,c);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(b){var a=
+this._normValueFromMouse({x:b.pageX,y:b.pageY});this._slide(b,this._handleIndex,a);return false},_mouseStop:function(b){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(b,this._handleIndex);this._change(b,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(b){var a;if(this.orientation==="horizontal"){a=
+this.elementSize.width;b=b.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{a=this.elementSize.height;b=b.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}a=b/a;if(a>1)a=1;if(a<0)a=0;if(this.orientation==="vertical")a=1-a;b=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+a*b)},_start:function(b,a){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a);
+c.values=this.values()}return this._trigger("start",b,c)},_slide:function(b,a,c){var f;if(this.options.values&&this.options.values.length){f=this.values(a?0:1);if(this.options.values.length===2&&this.options.range===true&&(a===0&&c>f||a===1&&c<f))c=f;if(c!==this.values(a)){f=this.values();f[a]=c;b=this._trigger("slide",b,{handle:this.handles[a],value:c,values:f});this.values(a?0:1);b!==false&&this.values(a,c,true)}}else if(c!==this.value()){b=this._trigger("slide",b,{handle:this.handles[a],value:c});
+b!==false&&this.value(c)}},_stop:function(b,a){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a);c.values=this.values()}this._trigger("stop",b,c)},_change:function(b,a){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a);c.values=this.values()}this._trigger("change",b,c)}},value:function(b){if(arguments.length){this.options.value=
+this._trimAlignValue(b);this._refreshValue();this._change(null,0)}else return this._value()},values:function(b,a){var c,f,e;if(arguments.length>1){this.options.values[b]=this._trimAlignValue(a);this._refreshValue();this._change(null,b)}else if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;f=arguments[0];for(e=0;e<c.length;e+=1){c[e]=this._trimAlignValue(f[e]);this._change(null,e)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(b):
+this.value();else return this._values()},_setOption:function(b,a){var c,f=0;if(d.isArray(this.options.values))f=this.options.values.length;d.Widget.prototype._setOption.apply(this,arguments);switch(b){case "disabled":if(a){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.attr("disabled","disabled");this.element.addClass("ui-disabled")}else{this.handles.removeAttr("disabled");this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation();
+this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(c=0;c<f;c+=1)this._change(null,c);this._animateOff=false;break}},_value:function(){var b=this.options.value;return b=this._trimAlignValue(b)},_values:function(b){var a,c;if(arguments.length){a=this.options.values[b];
+return a=this._trimAlignValue(a)}else{a=this.options.values.slice();for(c=0;c<a.length;c+=1)a[c]=this._trimAlignValue(a[c]);return a}},_trimAlignValue:function(b){if(b<=this._valueMin())return this._valueMin();if(b>=this._valueMax())return this._valueMax();var a=this.options.step>0?this.options.step:1,c=(b-this._valueMin())%a;alignValue=b-c;if(Math.abs(c)*2>=a)alignValue+=c>0?a:-a;return parseFloat(alignValue.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},
+_refreshValue:function(){var b=this.options.range,a=this.options,c=this,f=!this._animateOff?a.animate:false,e,j={},g,k,l,i;if(this.options.values&&this.options.values.length)this.handles.each(function(h){e=(c.values(h)-c._valueMin())/(c._valueMax()-c._valueMin())*100;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";d(this).stop(1,1)[f?"animate":"css"](j,a.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(h===0)c.range.stop(1,1)[f?"animate":"css"]({left:e+"%"},a.animate);
+if(h===1)c.range[f?"animate":"css"]({width:e-g+"%"},{queue:false,duration:a.animate})}else{if(h===0)c.range.stop(1,1)[f?"animate":"css"]({bottom:e+"%"},a.animate);if(h===1)c.range[f?"animate":"css"]({height:e-g+"%"},{queue:false,duration:a.animate})}g=e});else{k=this.value();l=this._valueMin();i=this._valueMax();e=i!==l?(k-l)/(i-l)*100:0;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";this.handle.stop(1,1)[f?"animate":"css"](j,a.animate);if(b==="min"&&this.orientation==="horizontal")this.range.stop(1,
+1)[f?"animate":"css"]({width:e+"%"},a.animate);if(b==="max"&&this.orientation==="horizontal")this.range[f?"animate":"css"]({width:100-e+"%"},{queue:false,duration:a.animate});if(b==="min"&&this.orientation==="vertical")this.range.stop(1,1)[f?"animate":"css"]({height:e+"%"},a.animate);if(b==="max"&&this.orientation==="vertical")this.range[f?"animate":"css"]({height:100-e+"%"},{queue:false,duration:a.animate})}}});d.extend(d.ui.slider,{version:"1.8.13"})})(jQuery);
+;/*
+ * jQuery UI Tabs 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Tabs
+ *
+ * Depends:
+ *	jquery.ui.core.js
+ *	jquery.ui.widget.js
+ */
+(function(d,p){function u(){return++v}function w(){return++x}var v=0,x=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading&#8230;</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(true)},_setOption:function(b,e){if(b=="selected")this.options.collapsible&&
+e==this.options.selected||this.select(e);else{this.options[b]=e;this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+u()},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+w());return d.cookie.apply(null,[b].concat(d.makeArray(arguments)))},_ui:function(b,e){return{tab:b,panel:e,index:this.anchors.index(b)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=
+d(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(b){function e(g,f){g.css("display","");!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}var a=this,c=this.options,h=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=d(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);this.anchors.each(function(g,f){var i=d(f).attr("href"),l=i.split("#")[0],q;if(l&&(l===location.toString().split("#")[0]||
+(q=d("base")[0])&&l===q.href)){i=f.hash;f.href=i}if(h.test(i))a.panels=a.panels.add(a.element.find(a._sanitizeSelector(i)));else if(i&&i!=="#"){d.data(f,"href.tabs",i);d.data(f,"load.tabs",i.replace(/#.*$/,""));i=a._tabId(f);f.href="#"+i;f=a.element.find("#"+i);if(!f.length){f=d(c.panelTemplate).attr("id",i).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else c.disabled.push(g)});if(b){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");
+this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(c.selected===p){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){c.selected=g;return false}});if(typeof c.selected!=="number"&&c.cookie)c.selected=parseInt(a._cookie(),10);if(typeof c.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)c.selected=
+this.lis.index(this.lis.filter(".ui-tabs-selected"));c.selected=c.selected||(this.lis.length?0:-1)}else if(c.selected===null)c.selected=-1;c.selected=c.selected>=0&&this.anchors[c.selected]||c.selected<0?c.selected:0;c.disabled=d.unique(c.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(c.selected,c.disabled)!=-1&&c.disabled.splice(d.inArray(c.selected,c.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");
+if(c.selected>=0&&this.anchors.length){a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(c.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[c.selected],a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash))[0]))});this.load(c.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else c.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));
+this.element[c.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");c.cookie&&this._cookie(c.selected,c.cookie);b=0;for(var j;j=this.lis[b];b++)d(j)[d.inArray(b,c.disabled)!=-1&&!d(j).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");c.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(c.event!=="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+
+g)};this.lis.bind("mouseover.tabs",function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(c.fx)if(d.isArray(c.fx)){m=c.fx[0];o=c.fx[1]}else m=o=c.fx;var r=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",
+function(){e(f,o);a._trigger("show",null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},s=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")};
+this.anchors.bind(c.event+".tabs",function(){var g=this,f=d(g).closest("li"),i=a.panels.filter(":not(.ui-tabs-hide)"),l=a.element.find(a._sanitizeSelector(g.hash));if(f.hasClass("ui-tabs-selected")&&!c.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a.panels.filter(":animated").length||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}c.selected=a.anchors.index(this);a.abort();if(c.collapsible)if(f.hasClass("ui-tabs-selected")){c.selected=
+-1;c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){s(g,i)}).dequeue("tabs");this.blur();return false}else if(!i.length){c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this));this.blur();return false}c.cookie&&a._cookie(c.selected,c.cookie);if(l.length){i.length&&a.element.queue("tabs",function(){s(g,i)});a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";
+d.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(b){if(typeof b=="string")b=this.anchors.index(this.anchors.filter("[href$="+b+"]"));return b},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e=
+d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(c,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this,"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});b.cookie&&this._cookie(null,b.cookie);return this},add:function(b,
+e,a){if(a===p)a=this.anchors.length;var c=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,b).replace(/#\{label\}/g,e));b=!b.indexOf("#")?b.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var j=c.element.find("#"+b);j.length||(j=d(h.panelTemplate).attr("id",b).data("destroy.tabs",true));j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);j.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]);
+j.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");j.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){c._trigger("show",null,c._ui(c.anchors[0],c.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[a],this.panels[a]));return this},remove:function(b){b=this._getIndex(b);var e=this.options,a=this.lis.eq(b).remove(),c=this.panels.eq(b).remove();
+if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(b+(b+1<this.anchors.length?1:-1));e.disabled=d.map(d.grep(e.disabled,function(h){return h!=b}),function(h){return h>=b?--h:h});this._tabify();this._trigger("remove",null,this._ui(a.find("a")[0],c[0]));return this},enable:function(b){b=this._getIndex(b);var e=this.options;if(d.inArray(b,e.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=b});this._trigger("enable",null,
+this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(b){b=this._getIndex(b);var e=this.options;if(b!=e.selected){this.lis.eq(b).addClass("ui-state-disabled");e.disabled.push(b);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[b],this.panels[b]))}return this},select:function(b){b=this._getIndex(b);if(b==-1)if(this.options.collapsible&&this.options.selected!=-1)b=this.options.selected;else return this;this.anchors.eq(b).trigger(this.options.event+".tabs");return this},
+load:function(b){b=this._getIndex(b);var e=this,a=this.options,c=this.anchors.eq(b)[0],h=d.data(c,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(c,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(a.spinner){var j=d("span",c);j.data("label.tabs",j.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){e.element.find(e._sanitizeSelector(c.hash)).html(k);e._cleanup();a.cache&&d.data(c,
+"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.error(k,n,b,c)}catch(m){}}}));e.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},
+url:function(b,e){this.anchors.eq(b).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.13"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(b,e){var a=this,c=this.options,h=a._rotate||(a._rotate=function(j){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=c.selected;a.select(++k<a.anchors.length?k:0)},b);j&&j.stopPropagation()});e=a._unrotate||(a._unrotate=!e?function(j){j.clientX&&
+a.rotate(null)}:function(){t=c.selected;h()});if(b){this.element.bind("tabsshow",h);this.anchors.bind(c.event+".tabs",e);h()}else{clearTimeout(a.rotation);this.element.unbind("tabsshow",h);this.anchors.unbind(c.event+".tabs",e);delete this._rotate;delete this._unrotate}return this}})})(jQuery);
+;/*
+ * jQuery UI Datepicker 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Datepicker
+ *
+ * Depends:
+ *	jquery.ui.core.js
+ */
+(function(d,B){function M(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass=
+"ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su",
+"Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",
+minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false};d.extend(this._defaults,this.regional[""]);this.dpDiv=N(d('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}function N(a){return a.delegate("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a",
+"mouseout",function(){d(this).removeClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).removeClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).removeClass("ui-datepicker-next-hover")}).delegate("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a","mouseover",function(){if(!d.datepicker._isDisabledDatepicker(J.inline?a.parent()[0]:J.input[0])){d(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
+d(this).addClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).addClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).addClass("ui-datepicker-next-hover")}})}function H(a,b){d.extend(a,b);for(var c in b)if(b[c]==null||b[c]==B)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.13"}});var z=(new Date).getTime(),J;d.extend(M.prototype,{markerClassName:"hasDatepicker",log:function(){this.debug&&console.log.apply("",arguments)},
+_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){H(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]=f}}}e=a.nodeName.toLowerCase();f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a,
+b){return{id:a[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:N(d('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",
+function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&&b.append.remove();if(c){b.append=d('<span class="'+this._appendClass+'">'+c+"</span>");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c=="focus"||c=="both")a.focus(this._showDatepicker);
+if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("<img/>").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('<button type="button"></button>').addClass(this._triggerClass).html(f==""?c:d("<img/>").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker():d.datepicker._showDatepicker(a[0]);
+return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;g<f.length;g++)if(f[g].length>h){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a,c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=d(a);
+if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b),true);this._updateDatepicker(b);this._updateAlternate(b);b.dpDiv.show()}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+=1;this._dialogInput=d('<input type="text" id="'+("dp"+this.uuid)+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');
+this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}H(a.settings,e||{});b=b&&b.constructor==Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/
+2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,
+"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=
+false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().removeClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=
+true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().addClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false;
+for(var b=0;b<this._disabledInputs.length;b++)if(this._disabledInputs[b]==a)return true;return false},_getInst:function(a){try{return d.data(a,"datepicker")}catch(b){throw"Missing instance data for this datepicker";}},_optionDatepicker:function(a,b,c){var e=this._getInst(a);if(arguments.length==2&&typeof b=="string")return b=="defaults"?d.extend({},d.datepicker._defaults):e?b=="all"?d.extend({},e.settings):this._get(e,b):null;var f=b||{};if(typeof b=="string"){f={};f[b]=c}if(e){this._curInst==e&&
+this._hideDatepicker();var h=this._getDateDatepicker(a,true),i=this._getMinMaxDate(e,"min"),g=this._getMinMaxDate(e,"max");H(e.settings,f);if(i!==null&&f.dateFormat!==B&&f.minDate===B)e.settings.minDate=this._formatDate(e,i);if(g!==null&&f.dateFormat!==B&&f.maxDate===B)e.settings.maxDate=this._formatDate(e,g);this._attachments(d(a),e);this._autoSize(e);this._setDate(e,h);this._updateAlternate(e);this._updateDatepicker(e)}},_changeDatepicker:function(a,b,c){this._optionDatepicker(a,b,c)},_refreshDatepicker:function(a){(a=
+this._getInst(a))&&this._updateDatepicker(a)},_setDateDatepicker:function(a,b){if(a=this._getInst(a)){this._setDate(a,b);this._updateDatepicker(a);this._updateAlternate(a)}},_getDateDatepicker:function(a,b){(a=this._getInst(a))&&!a.inline&&this._setDateFromField(a,b);return a?this._getDate(a):null},_doKeyDown:function(a){var b=d.datepicker._getInst(a.target),c=true,e=b.dpDiv.is(".ui-datepicker-rtl");b._keyEvent=true;if(d.datepicker._datepickerShowing)switch(a.keyCode){case 9:d.datepicker._hideDatepicker();
+c=false;break;case 13:c=d("td."+d.datepicker._dayOverClass+":not(."+d.datepicker._currentClass+")",b.dpDiv);c[0]?d.datepicker._selectDay(a.target,b.selectedMonth,b.selectedYear,c[0]):d.datepicker._hideDatepicker();return false;case 27:d.datepicker._hideDatepicker();break;case 33:d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 34:d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,
+"stepMonths"),"M");break;case 35:if(a.ctrlKey||a.metaKey)d.datepicker._clearDate(a.target);c=a.ctrlKey||a.metaKey;break;case 36:if(a.ctrlKey||a.metaKey)d.datepicker._gotoToday(a.target);c=a.ctrlKey||a.metaKey;break;case 37:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?+1:-1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 38:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,
+-7,"D");c=a.ctrlKey||a.metaKey;break;case 39:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?-1:+1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 40:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,+7,"D");c=a.ctrlKey||a.metaKey;break;default:c=false}else if(a.keyCode==36&&a.ctrlKey)d.datepicker._showDatepicker(this);else c=false;if(c){a.preventDefault();
+a.stopPropagation()}},_doKeyPress:function(a){var b=d.datepicker._getInst(a.target);if(d.datepicker._get(b,"constrainInput")){b=d.datepicker._possibleChars(d.datepicker._get(b,"dateFormat"));var c=String.fromCharCode(a.charCode==B?a.keyCode:a.charCode);return a.ctrlKey||a.metaKey||c<" "||!b||b.indexOf(c)>-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a);
+d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target||a;if(a.nodeName.toLowerCase()!="input")a=d("input",a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);d.datepicker._curInst&&d.datepicker._curInst!=b&&d.datepicker._curInst.dpDiv.stop(true,true);var c=d.datepicker._get(b,"beforeShow");H(b.settings,c?c.apply(a,[a,b]):{});b.lastVal=
+null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value="";if(!d.datepicker._pos){d.datepicker._pos=d.datepicker._findPos(a);d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=
+null;b.dpDiv.empty();b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);c=d.datepicker._checkOffset(b,c,e);b.dpDiv.css({position:d.datepicker._inDialog&&d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){var i=b.dpDiv.find("iframe.ui-datepicker-cover");if(i.length){var g=d.datepicker._getBorders(b.dpDiv);i.css({left:-g[0],
+top:-g[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex(d(a).zIndex()+1);d.datepicker._datepickerShowing=true;d.effects&&d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}},_updateDatepicker:function(a){var b=d.datepicker._getBorders(a.dpDiv);J=a;a.dpDiv.empty().append(this._generateHTML(a));var c=a.dpDiv.find("iframe.ui-datepicker-cover");
+c.length&&c.css({left:-b[0],top:-b[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()});a.dpDiv.find("."+this._dayOverClass+" a").mouseover();b=this._getNumberOfMonths(a);c=b[1];a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");c>1&&a.dpDiv.addClass("ui-datepicker-multi-"+c).css("width",17*c+"em");a.dpDiv[(b[0]!=1||b[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");
+a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var e=a.yearshtml;setTimeout(function(){e===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml);e=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},
+_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),j=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e-
+g):0);b.top-=Math.min(b.top,b.top+f>j&&j>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1||d.expr.filters.hidden(a));)a=a[b?"previousSibling":"nextSibling"];a=d(a).offset();return[a.left,a.top]},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);this._curInst=
+null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();if(a=this._get(b,"onClose"))a.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b]);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},
+_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):
+0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e._selectingMonthYear=
+false;e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_clickMonthYear:function(a){var b=this._getInst(d(a)[0]);b.input&&b._selectingMonthYear&&setTimeout(function(){b.input.focus()},0);b._selectingMonthYear=!b._selectingMonthYear},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay=
+d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=d(a);this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);
+else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=
+a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?b.toString():b+"";if(b=="")return null;var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;e=typeof e!="string"?e:(new Date).getFullYear()%100+parseInt(e,10);for(var f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,
+g=(c?c.monthNames:null)||this._defaults.monthNames,j=c=-1,l=-1,u=-1,k=false,o=function(p){(p=A+1<a.length&&a.charAt(A+1)==p)&&A++;return p},m=function(p){var C=o(p);p=new RegExp("^\\d{1,"+(p=="@"?14:p=="!"?20:p=="y"&&C?4:p=="o"?3:2)+"}");p=b.substring(s).match(p);if(!p)throw"Missing number at position "+s;s+=p[0].length;return parseInt(p[0],10)},n=function(p,C,K){p=d.map(o(p)?K:C,function(w,x){return[[x,w]]}).sort(function(w,x){return-(w[1].length-x[1].length)});var E=-1;d.each(p,function(w,x){w=
+x[1];if(b.substr(s,w.length).toLowerCase()==w.toLowerCase()){E=x[0];s+=w.length;return false}});if(E!=-1)return E+1;else throw"Unknown name at position "+s;},r=function(){if(b.charAt(s)!=a.charAt(A))throw"Unexpected literal at position "+s;s++},s=0,A=0;A<a.length;A++)if(k)if(a.charAt(A)=="'"&&!o("'"))k=false;else r();else switch(a.charAt(A)){case "d":l=m("d");break;case "D":n("D",f,h);break;case "o":u=m("o");break;case "m":j=m("m");break;case "M":j=n("M",i,g);break;case "y":c=m("y");break;case "@":var v=
+new Date(m("@"));c=v.getFullYear();j=v.getMonth()+1;l=v.getDate();break;case "!":v=new Date((m("!")-this._ticksTo1970)/1E4);c=v.getFullYear();j=v.getMonth()+1;l=v.getDate();break;case "'":if(o("'"))r();else k=true;break;default:r()}if(c==-1)c=(new Date).getFullYear();else if(c<100)c+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c<=e?0:-100);if(u>-1){j=1;l=u;do{e=this._getDaysInMonth(c,j-1);if(l<=e)break;j++;l-=e}while(1)}v=this._daylightSavingAdjust(new Date(c,j-1,l));if(v.getFullYear()!=
+c||v.getMonth()+1!=j||v.getDate()!=l)throw"Invalid date";return v},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,
+h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:null)||this._defaults.monthNames;var i=function(o){(o=k+1<a.length&&a.charAt(k+1)==o)&&k++;return o},g=function(o,m,n){m=""+m;if(i(o))for(;m.length<n;)m="0"+m;return m},j=function(o,m,n,r){return i(o)?r[m]:n[m]},l="",u=false;if(b)for(var k=0;k<a.length;k++)if(u)if(a.charAt(k)=="'"&&!i("'"))u=false;else l+=a.charAt(k);else switch(a.charAt(k)){case "d":l+=g("d",b.getDate(),2);break;case "D":l+=j("D",b.getDay(),e,f);break;
+case "o":l+=g("o",(b.getTime()-(new Date(b.getFullYear(),0,0)).getTime())/864E5,3);break;case "m":l+=g("m",b.getMonth()+1,2);break;case "M":l+=j("M",b.getMonth(),h,c);break;case "y":l+=i("y")?b.getFullYear():(b.getYear()%100<10?"0":"")+b.getYear()%100;break;case "@":l+=b.getTime();break;case "!":l+=b.getTime()*1E4+this._ticksTo1970;break;case "'":if(i("'"))l+="'";else u=true;break;default:l+=a.charAt(k)}return l},_possibleChars:function(a){for(var b="",c=false,e=function(h){(h=f+1<a.length&&a.charAt(f+
+1)==h)&&f++;return h},f=0;f<a.length;f++)if(c)if(a.charAt(f)=="'"&&!e("'"))c=false;else b+=a.charAt(f);else switch(a.charAt(f)){case "d":case "m":case "y":case "@":b+="0123456789";break;case "D":case "M":return null;case "'":if(e("'"))b+="'";else c=true;break;default:b+=a.charAt(f)}return b},_get:function(a,b){return a.settings[b]!==B?a.settings[b]:this._defaults[b]},_setDateFromField:function(a,b){if(a.input.val()!=a.lastVal){var c=this._get(a,"dateFormat"),e=a.lastVal=a.input?a.input.val():null,
+f,h;f=h=this._getDefaultDate(a);var i=this._getFormatConfig(a);try{f=this.parseDate(c,e,i)||h}catch(g){this.log(g);e=b?"":e}a.selectedDay=f.getDate();a.drawMonth=a.selectedMonth=f.getMonth();a.drawYear=a.selectedYear=f.getFullYear();a.currentDay=e?f.getDate():0;a.currentMonth=e?f.getMonth():0;a.currentYear=e?f.getFullYear():0;this._adjustInstDate(a)}},_getDefaultDate:function(a){return this._restrictMinMax(a,this._determineDate(a,this._get(a,"defaultDate"),new Date))},_determineDate:function(a,b,
+c){var e=function(h){var i=new Date;i.setDate(i.getDate()+h);return i},f=function(h){try{return d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),h,d.datepicker._getFormatConfig(a))}catch(i){}var g=(h.toLowerCase().match(/^c/)?d.datepicker._getDate(a):null)||new Date,j=g.getFullYear(),l=g.getMonth();g=g.getDate();for(var u=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,k=u.exec(h);k;){switch(k[2]||"d"){case "d":case "D":g+=parseInt(k[1],10);break;case "w":case "W":g+=parseInt(k[1],10)*7;break;case "m":case "M":l+=
+parseInt(k[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(j,l));break;case "y":case "Y":j+=parseInt(k[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(j,l));break}k=u.exec(h)}return new Date(j,l,g)};if(b=(b=b==null||b===""?c:typeof b=="string"?f(b):typeof b=="number"?isNaN(b)?c:e(b):new Date(b.getTime()))&&b.toString()=="Invalid Date"?c:b){b.setHours(0);b.setMinutes(0);b.setSeconds(0);b.setMilliseconds(0)}return this._daylightSavingAdjust(b)},_daylightSavingAdjust:function(a){if(!a)return null;
+a.setHours(a.getHours()>12?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||
+a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),j=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay?
+new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),k=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=k&&n<k?k:n;this._daylightSavingAdjust(new Date(m,g,1))>n;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-j,1)),this._getFormatConfig(a));
+n=this._canAdjustMonth(a,-1,m,g)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+z+".datepicker._adjustDate('#"+a.id+"', -"+j+", 'M');\" title=\""+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>":f?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>";var r=this._get(a,"nextText");r=!h?r:this.formatDate(r,this._daylightSavingAdjust(new Date(m,
+g+j,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+z+".datepicker._adjustDate('#"+a.id+"', +"+j+", 'M');\" title=\""+r+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+r+"</span></a>":f?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+r+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+r+"</span></a>";j=this._get(a,"currentText");r=this._get(a,"gotoCurrent")&&
+a.currentDay?u:b;j=!h?j:this.formatDate(j,r,this._getFormatConfig(a));h=!a.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+z+'.datepicker._hideDatepicker();">'+this._get(a,"closeText")+"</button>":"";e=e?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(c?h:"")+(this._isInRange(a,r)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+
+z+".datepicker._gotoToday('#"+a.id+"');\">"+j+"</button>":"")+(c?"":h)+"</div>":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;j=this._get(a,"showWeek");r=this._get(a,"dayNames");this._get(a,"dayNamesShort");var s=this._get(a,"dayNamesMin"),A=this._get(a,"monthNames"),v=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),C=this._get(a,"showOtherMonths"),K=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var E=this._getDefaultDate(a),w="",x=0;x<i[0];x++){for(var O=
+"",G=0;G<i[1];G++){var P=this._daylightSavingAdjust(new Date(m,g,a.selectedDay)),t=" ui-corner-all",y="";if(l){y+='<div class="ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":"left");break;case i[1]-1:y+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:y+=" ui-datepicker-group-middle";t="";break}y+='">'}y+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+t+'">'+(/all|left/.test(t)&&x==0?c?
+f:n:"")+(/all|right/.test(t)&&x==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,k,o,x>0||G>0,A,v)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var D=j?'<th class="ui-datepicker-week-col">'+this._get(a,"weekHeader")+"</th>":"";for(t=0;t<7;t++){var q=(t+h)%7;D+="<th"+((t+h+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+r[q]+'">'+s[q]+"</span></th>"}y+=D+"</tr></thead><tbody>";D=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay,
+D);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;D=l?6:Math.ceil((t+D)/7);q=this._daylightSavingAdjust(new Date(m,g,1-t));for(var Q=0;Q<D;Q++){y+="<tr>";var R=!j?"":'<td class="ui-datepicker-week-col">'+this._get(a,"calculateWeek")(q)+"</td>";for(t=0;t<7;t++){var I=p?p.apply(a.input?a.input[0]:null,[q]):[true,""],F=q.getMonth()!=g,L=F&&!K||!I[0]||k&&q<k||o&&q>o;R+='<td class="'+((t+h+6)%7>=5?" ui-datepicker-week-end":"")+(F?" ui-datepicker-other-month":"")+(q.getTime()==P.getTime()&&g==a.selectedMonth&&
+a._keyEvent||E.getTime()==q.getTime()&&E.getTime()==P.getTime()?" "+this._dayOverClass:"")+(L?" "+this._unselectableClass+" ui-state-disabled":"")+(F&&!C?"":" "+I[1]+(q.getTime()==u.getTime()?" "+this._currentClass:"")+(q.getTime()==b.getTime()?" ui-datepicker-today":""))+'"'+((!F||C)&&I[2]?' title="'+I[2]+'"':"")+(L?"":' onclick="DP_jQuery_'+z+".datepicker._selectDay('#"+a.id+"',"+q.getMonth()+","+q.getFullYear()+', this);return false;"')+">"+(F&&!C?"&#xa0;":L?'<span class="ui-state-default">'+q.getDate()+
+"</span>":'<a class="ui-state-default'+(q.getTime()==b.getTime()?" ui-state-highlight":"")+(q.getTime()==u.getTime()?" ui-state-active":"")+(F?" ui-priority-secondary":"")+'" href="#">'+q.getDate()+"</a>")+"</td>";q.setDate(q.getDate()+1);q=this._daylightSavingAdjust(q)}y+=R+"</tr>"}g++;if(g>11){g=0;m++}y+="</tbody></table>"+(l?"</div>"+(i[0]>0&&G==i[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");O+=y}w+=O}w+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':
+"");a._keyEvent=false;return w},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='<div class="ui-datepicker-title">',o="";if(h||!j)o+='<span class="ui-datepicker-month">'+i[b]+"</span>";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+z+".datepicker._selectMonthYear('#"+a.id+"', this, 'M');\" onclick=\"DP_jQuery_"+z+".datepicker._clickMonthYear('#"+
+a.id+"');\">";for(var n=0;n<12;n++)if((!i||n>=e.getMonth())&&(!m||n<=f.getMonth()))o+='<option value="'+n+'"'+(n==b?' selected="selected"':"")+">"+g[n]+"</option>";o+="</select>"}u||(k+=o+(h||!(j&&l)?"&#xa0;":""));if(!a.yearshtml){a.yearshtml="";if(h||!l)k+='<span class="ui-datepicker-year">'+c+"</span>";else{g=this._get(a,"yearRange").split(":");var r=(new Date).getFullYear();i=function(s){s=s.match(/c[+-].*/)?c+parseInt(s.substring(1),10):s.match(/[+-].*/)?r+parseInt(s,10):parseInt(s,10);return isNaN(s)?
+r:s};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b,e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(a.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+z+".datepicker._selectMonthYear('#"+a.id+"', this, 'Y');\" onclick=\"DP_jQuery_"+z+".datepicker._clickMonthYear('#"+a.id+"');\">";b<=g;b++)a.yearshtml+='<option value="'+b+'"'+(b==c?' selected="selected"':"")+">"+b+"</option>";a.yearshtml+="</select>";k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+=
+(h||!(j&&l)?"&#xa0;":"")+o;k+="</div>";return k},_adjustInstDate:function(a,b,c){var e=a.drawYear+(c=="Y"?b:0),f=a.drawMonth+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,
+"max");b=c&&b<c?c:b;return b=a&&b>a?a:b},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");if(b)b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,
+b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a);c=this._daylightSavingAdjust(new Date(c,e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!=
+"string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));
+return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker=function(a){if(!this.length)return this;if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&
+arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));return this.each(function(){typeof a=="string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new M;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.13";window["DP_jQuery_"+z]=d})(jQuery);
+;/*
+ * jQuery UI Progressbar 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Progressbar
+ *
+ * Depends:
+ *   jquery.ui.core.js
+ *   jquery.ui.widget.js
+ */
+(function(b,d){b.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=b("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");
+this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===d)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){if(a==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*
+this._value()/this.options.max},_refreshValue:function(){var a=this.value(),c=this._percentage();if(this.oldValue!==a){this.oldValue=a;this._trigger("change")}this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.13"})})(jQuery);
+;/*
+ * jQuery UI Effects 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/
+ */
+jQuery.effects||function(f,j){function m(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1],
+16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return n.transparent;return n[f.trim(c).toLowerCase()]}function s(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return m(b)}function o(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,
+a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function p(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in t||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function u(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function k(c,a,b,d){if(typeof c=="object"){d=
+a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:b in f.fx.speeds?f.fx.speeds[b]:f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}function l(c){if(!c||typeof c==="number"||f.fx.speeds[c])return true;if(typeof c==="string"&&!f.effects[c])return true;return false}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor",
+"borderTopColor","borderColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=s(b.elem,a);b.end=m(b.end);b.colorInit=true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var n={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,
+0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,
+211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},q=["add","remove","toggle"],t={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b,
+d){if(f.isFunction(b)){d=b;b=null}return this.queue(function(){var e=f(this),g=e.attr("style")||" ",h=p(o.call(this)),r,v=e.attr("class");f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});r=p(o.call(this));e.attr("class",v);e.animate(u(h,r),{queue:false,duration:a,easding:b,complete:function(){f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments);f.dequeue(this)}})})};
+f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,a):f.effects.animateClass.apply(this,
+[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.13",save:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.data("ec.storage."+a[b],c[0].style[a[b]])},restore:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.css(a[b],c.data("ec.storage."+a[b]))},setMode:function(c,a){if(a=="toggle")a=c.is(":hidden")?"show":"hide";return a},getBaseline:function(c,a){var b;switch(c[0]){case "top":b=
+0;break;case "middle":b=0.5;break;case "bottom":b=1;break;default:b=c[0]/a.height}switch(c[1]){case "left":c=0;break;case "center":c=0.5;break;case "right":c=1;break;default:c=c[1]/a.width}return{x:c,y:b}},createWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent();var a={width:c.outerWidth(true),height:c.outerHeight(true),"float":c.css("float")},b=f("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0});
+c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c);return c},setTransition:function(c,
+a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)});return d.call(this,b)},_show:f.fn.show,show:function(c){if(l(c))return this._show.apply(this,arguments);else{var a=k.apply(this,arguments);
+a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(l(c))return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(l(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%",
+"pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*
+((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=
+e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=
+e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/
+h);return-(h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g))+b},easeOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*a)*Math.sin((a*e-c)*2*Math.PI/g)+d+b},easeInOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e/2)==2)return b+d;g||(g=e*0.3*1.5);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);if(a<1)return-0.5*
+h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)+b;return h*Math.pow(2,-10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)*0.5+d+b},easeInBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*(a/=e)*a*((g+1)*a-g)+b},easeOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*((a=a/e-1)*a*((g+1)*a+g)+1)+b},easeInOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;if((a/=e/2)<1)return d/2*a*a*(((g*=1.525)+1)*a-g)+b;return d/2*((a-=2)*a*(((g*=1.525)+1)*a+g)+2)+b},easeInBounce:function(c,a,b,d,e){return d-f.easing.easeOutBounce(c,
+e-a,0,d,e)+b},easeOutBounce:function(c,a,b,d,e){return(a/=e)<1/2.75?d*7.5625*a*a+b:a<2/2.75?d*(7.5625*(a-=1.5/2.75)*a+0.75)+b:a<2.5/2.75?d*(7.5625*(a-=2.25/2.75)*a+0.9375)+b:d*(7.5625*(a-=2.625/2.75)*a+0.984375)+b},easeInOutBounce:function(c,a,b,d,e){if(a<e/2)return f.easing.easeInBounce(c,a*2,0,d,e)*0.5+b;return f.easing.easeOutBounce(c,a*2-e,0,d,e)*0.5+d*0.5+b}})}(jQuery);
+;/*
+ * jQuery UI Effects Blind 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Blind
+ *
+ * Depends:
+ *	jquery.effects.core.js
+ */
+(function(b){b.effects.blind=function(c){return this.queue(function(){var a=b(this),g=["position","top","bottom","left","right"],f=b.effects.setMode(a,c.options.mode||"hide"),d=c.options.direction||"vertical";b.effects.save(a,g);a.show();var e=b.effects.createWrapper(a).css({overflow:"hidden"}),h=d=="vertical"?"height":"width";d=d=="vertical"?e.height():e.width();f=="show"&&e.css(h,0);var i={};i[h]=f=="show"?d:0;e.animate(i,c.duration,c.options.easing,function(){f=="hide"&&a.hide();b.effects.restore(a,
+g);b.effects.removeWrapper(a);c.callback&&c.callback.apply(a[0],arguments);a.dequeue()})})}})(jQuery);
+;/*
+ * jQuery UI Effects Bounce 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Bounce
+ *
+ * Depends:
+ *	jquery.effects.core.js
+ */
+(function(e){e.effects.bounce=function(b){return this.queue(function(){var a=e(this),l=["position","top","bottom","left","right"],h=e.effects.setMode(a,b.options.mode||"effect"),d=b.options.direction||"up",c=b.options.distance||20,m=b.options.times||5,i=b.duration||250;/show|hide/.test(h)&&l.push("opacity");e.effects.save(a,l);a.show();e.effects.createWrapper(a);var f=d=="up"||d=="down"?"top":"left";d=d=="up"||d=="left"?"pos":"neg";c=b.options.distance||(f=="top"?a.outerHeight({margin:true})/3:a.outerWidth({margin:true})/
+3);if(h=="show")a.css("opacity",0).css(f,d=="pos"?-c:c);if(h=="hide")c/=m*2;h!="hide"&&m--;if(h=="show"){var g={opacity:1};g[f]=(d=="pos"?"+=":"-=")+c;a.animate(g,i/2,b.options.easing);c/=2;m--}for(g=0;g<m;g++){var j={},k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing);c=h=="hide"?c*2:c/2}if(h=="hide"){g={opacity:0};g[f]=(d=="pos"?"-=":"+=")+c;a.animate(g,i/2,b.options.easing,function(){a.hide();e.effects.restore(a,l);e.effects.removeWrapper(a);
+b.callback&&b.callback.apply(this,arguments)})}else{j={};k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing,function(){e.effects.restore(a,l);e.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments)})}a.queue("fx",function(){a.dequeue()});a.dequeue()})}})(jQuery);
+;/*
+ * jQuery UI Effects Clip 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Clip
+ *
+ * Depends:
+ *	jquery.effects.core.js
+ */
+(function(b){b.effects.clip=function(e){return this.queue(function(){var a=b(this),i=["position","top","bottom","left","right","height","width"],f=b.effects.setMode(a,e.options.mode||"hide"),c=e.options.direction||"vertical";b.effects.save(a,i);a.show();var d=b.effects.createWrapper(a).css({overflow:"hidden"});d=a[0].tagName=="IMG"?d:a;var g={size:c=="vertical"?"height":"width",position:c=="vertical"?"top":"left"};c=c=="vertical"?d.height():d.width();if(f=="show"){d.css(g.size,0);d.css(g.position,
+c/2)}var h={};h[g.size]=f=="show"?c:0;h[g.position]=f=="show"?0:c/2;d.animate(h,{queue:false,duration:e.duration,easing:e.options.easing,complete:function(){f=="hide"&&a.hide();b.effects.restore(a,i);b.effects.removeWrapper(a);e.callback&&e.callback.apply(a[0],arguments);a.dequeue()}})})}})(jQuery);
+;/*
+ * jQuery UI Effects Drop 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Drop
+ *
+ * Depends:
+ *	jquery.effects.core.js
+ */
+(function(c){c.effects.drop=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right","opacity"],e=c.effects.setMode(a,d.options.mode||"hide"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a);var f=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var g=d.options.distance||(f=="top"?a.outerHeight({margin:true})/2:a.outerWidth({margin:true})/2);if(e=="show")a.css("opacity",0).css(f,b=="pos"?-g:g);var i={opacity:e==
+"show"?1:0};i[f]=(e=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+g;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){e=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
+;/*
+ * jQuery UI Effects Explode 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Explode
+ *
+ * Depends:
+ *	jquery.effects.core.js
+ */
+(function(j){j.effects.explode=function(a){return this.queue(function(){var c=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3,d=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3;a.options.mode=a.options.mode=="toggle"?j(this).is(":visible")?"hide":"show":a.options.mode;var b=j(this).show().css("visibility","hidden"),g=b.offset();g.top-=parseInt(b.css("marginTop"),10)||0;g.left-=parseInt(b.css("marginLeft"),10)||0;for(var h=b.outerWidth(true),i=b.outerHeight(true),e=0;e<c;e++)for(var f=
+0;f<d;f++)b.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-f*(h/d),top:-e*(i/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:h/d,height:i/c,left:g.left+f*(h/d)+(a.options.mode=="show"?(f-Math.floor(d/2))*(h/d):0),top:g.top+e*(i/c)+(a.options.mode=="show"?(e-Math.floor(c/2))*(i/c):0),opacity:a.options.mode=="show"?0:1}).animate({left:g.left+f*(h/d)+(a.options.mode=="show"?0:(f-Math.floor(d/2))*(h/d)),top:g.top+
+e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.mode=="show"?1:0},a.duration||500);setTimeout(function(){a.options.mode=="show"?b.css({visibility:"visible"}):b.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(b[0]);b.dequeue();j("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery);
+;/*
+ * jQuery UI Effects Fade 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Fade
+ *
+ * Depends:
+ *	jquery.effects.core.js
+ */
+(function(b){b.effects.fade=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide");c.animate({opacity:d},{queue:false,duration:a.duration,easing:a.options.easing,complete:function(){a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
+;/*
+ * jQuery UI Effects Fold 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Fold
+ *
+ * Depends:
+ *	jquery.effects.core.js
+ */
+(function(c){c.effects.fold=function(a){return this.queue(function(){var b=c(this),j=["position","top","bottom","left","right"],d=c.effects.setMode(b,a.options.mode||"hide"),g=a.options.size||15,h=!!a.options.horizFirst,k=a.duration?a.duration/2:c.fx.speeds._default/2;c.effects.save(b,j);b.show();var e=c.effects.createWrapper(b).css({overflow:"hidden"}),f=d=="show"!=h,l=f?["width","height"]:["height","width"];f=f?[e.width(),e.height()]:[e.height(),e.width()];var i=/([0-9]+)%/.exec(g);if(i)g=parseInt(i[1],
+10)/100*f[d=="hide"?0:1];if(d=="show")e.css(h?{height:0,width:g}:{height:g,width:0});h={};i={};h[l[0]]=d=="show"?f[0]:g;i[l[1]]=d=="show"?f[1]:0;e.animate(h,k,a.options.easing).animate(i,k,a.options.easing,function(){d=="hide"&&b.hide();c.effects.restore(b,j);c.effects.removeWrapper(b);a.callback&&a.callback.apply(b[0],arguments);b.dequeue()})})}})(jQuery);
+;/*
+ * jQuery UI Effects Highlight 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Highlight
+ *
+ * Depends:
+ *	jquery.effects.core.js
+ */
+(function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&&
+this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
+;/*
+ * jQuery UI Effects Pulsate 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Pulsate
+ *
+ * Depends:
+ *	jquery.effects.core.js
+ */
+(function(d){d.effects.pulsate=function(a){return this.queue(function(){var b=d(this),c=d.effects.setMode(b,a.options.mode||"show");times=(a.options.times||5)*2-1;duration=a.duration?a.duration/2:d.fx.speeds._default/2;isVisible=b.is(":visible");animateTo=0;if(!isVisible){b.css("opacity",0).show();animateTo=1}if(c=="hide"&&isVisible||c=="show"&&!isVisible)times--;for(c=0;c<times;c++){b.animate({opacity:animateTo},duration,a.options.easing);animateTo=(animateTo+1)%2}b.animate({opacity:animateTo},duration,
+a.options.easing,function(){animateTo==0&&b.hide();a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()}).dequeue()})}})(jQuery);
+;/*
+ * jQuery UI Effects Scale 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Scale
+ *
+ * Depends:
+ *	jquery.effects.core.js
+ */
+(function(c){c.effects.puff=function(b){return this.queue(function(){var a=c(this),e=c.effects.setMode(a,b.options.mode||"hide"),g=parseInt(b.options.percent,10)||150,h=g/100,i={height:a.height(),width:a.width()};c.extend(b.options,{fade:true,mode:e,percent:e=="hide"?g:100,from:e=="hide"?i:{height:i.height*h,width:i.width*h}});a.effect("scale",b.options,b.duration,b.callback);a.dequeue()})};c.effects.scale=function(b){return this.queue(function(){var a=c(this),e=c.extend(true,{},b.options),g=c.effects.setMode(a,
+b.options.mode||"effect"),h=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:g=="hide"?0:100),i=b.options.direction||"both",f=b.options.origin;if(g!="effect"){e.origin=f||["middle","center"];e.restore=true}f={height:a.height(),width:a.width()};a.from=b.options.from||(g=="show"?{height:0,width:0}:f);h={y:i!="horizontal"?h/100:1,x:i!="vertical"?h/100:1};a.to={height:f.height*h.y,width:f.width*h.x};if(b.options.fade){if(g=="show"){a.from.opacity=0;a.to.opacity=1}if(g=="hide"){a.from.opacity=
+1;a.to.opacity=0}}e.from=a.from;e.to=a.to;e.mode=g;a.effect("size",e,b.duration,b.callback);a.dequeue()})};c.effects.size=function(b){return this.queue(function(){var a=c(this),e=["position","top","bottom","left","right","width","height","overflow","opacity"],g=["position","top","bottom","left","right","overflow","opacity"],h=["width","height","overflow"],i=["fontSize"],f=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],k=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],
+p=c.effects.setMode(a,b.options.mode||"effect"),n=b.options.restore||false,m=b.options.scale||"both",l=b.options.origin,j={height:a.height(),width:a.width()};a.from=b.options.from||j;a.to=b.options.to||j;if(l){l=c.effects.getBaseline(l,j);a.from.top=(j.height-a.from.height)*l.y;a.from.left=(j.width-a.from.width)*l.x;a.to.top=(j.height-a.to.height)*l.y;a.to.left=(j.width-a.to.width)*l.x}var d={from:{y:a.from.height/j.height,x:a.from.width/j.width},to:{y:a.to.height/j.height,x:a.to.width/j.width}};
+if(m=="box"||m=="both"){if(d.from.y!=d.to.y){e=e.concat(f);a.from=c.effects.setTransition(a,f,d.from.y,a.from);a.to=c.effects.setTransition(a,f,d.to.y,a.to)}if(d.from.x!=d.to.x){e=e.concat(k);a.from=c.effects.setTransition(a,k,d.from.x,a.from);a.to=c.effects.setTransition(a,k,d.to.x,a.to)}}if(m=="content"||m=="both")if(d.from.y!=d.to.y){e=e.concat(i);a.from=c.effects.setTransition(a,i,d.from.y,a.from);a.to=c.effects.setTransition(a,i,d.to.y,a.to)}c.effects.save(a,n?e:g);a.show();c.effects.createWrapper(a);
+a.css("overflow","hidden").css(a.from);if(m=="content"||m=="both"){f=f.concat(["marginTop","marginBottom"]).concat(i);k=k.concat(["marginLeft","marginRight"]);h=e.concat(f).concat(k);a.find("*[width]").each(function(){child=c(this);n&&c.effects.save(child,h);var o={height:child.height(),width:child.width()};child.from={height:o.height*d.from.y,width:o.width*d.from.x};child.to={height:o.height*d.to.y,width:o.width*d.to.x};if(d.from.y!=d.to.y){child.from=c.effects.setTransition(child,f,d.from.y,child.from);
+child.to=c.effects.setTransition(child,f,d.to.y,child.to)}if(d.from.x!=d.to.x){child.from=c.effects.setTransition(child,k,d.from.x,child.from);child.to=c.effects.setTransition(child,k,d.to.x,child.to)}child.css(child.from);child.animate(child.to,b.duration,b.options.easing,function(){n&&c.effects.restore(child,h)})})}a.animate(a.to,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){a.to.opacity===0&&a.css("opacity",a.from.opacity);p=="hide"&&a.hide();c.effects.restore(a,
+n?e:g);c.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
+;/*
+ * jQuery UI Effects Shake 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Shake
+ *
+ * Depends:
+ *	jquery.effects.core.js
+ */
+(function(d){d.effects.shake=function(a){return this.queue(function(){var b=d(this),j=["position","top","bottom","left","right"];d.effects.setMode(b,a.options.mode||"effect");var c=a.options.direction||"left",e=a.options.distance||20,l=a.options.times||3,f=a.duration||a.options.duration||140;d.effects.save(b,j);b.show();d.effects.createWrapper(b);var g=c=="up"||c=="down"?"top":"left",h=c=="up"||c=="left"?"pos":"neg";c={};var i={},k={};c[g]=(h=="pos"?"-=":"+=")+e;i[g]=(h=="pos"?"+=":"-=")+e*2;k[g]=
+(h=="pos"?"-=":"+=")+e*2;b.animate(c,f,a.options.easing);for(e=1;e<l;e++)b.animate(i,f,a.options.easing).animate(k,f,a.options.easing);b.animate(i,f,a.options.easing).animate(c,f/2,a.options.easing,function(){d.effects.restore(b,j);d.effects.removeWrapper(b);a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()});b.dequeue()})}})(jQuery);
+;/*
+ * jQuery UI Effects Slide 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Slide
+ *
+ * Depends:
+ *	jquery.effects.core.js
+ */
+(function(c){c.effects.slide=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right"],f=c.effects.setMode(a,d.options.mode||"show"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a).css({overflow:"hidden"});var g=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var e=d.options.distance||(g=="top"?a.outerHeight({margin:true}):a.outerWidth({margin:true}));if(f=="show")a.css(g,b=="pos"?isNaN(e)?"-"+e:-e:e);
+var i={};i[g]=(f=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+e;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){f=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
+;/*
+ * jQuery UI Effects Transfer 1.8.13
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Transfer
+ *
+ * Depends:
+ *	jquery.effects.core.js
+ */
+(function(e){e.effects.transfer=function(a){return this.queue(function(){var b=e(this),c=e(a.options.to),d=c.offset();c={top:d.top,left:d.left,height:c.innerHeight(),width:c.innerWidth()};d=b.offset();var f=e('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(a.options.className).css({top:d.top,left:d.left,height:b.innerHeight(),width:b.innerWidth(),position:"absolute"}).animate(c,a.duration,a.options.easing,function(){f.remove();a.callback&&a.callback.apply(b[0],arguments);
+b.dequeue()})})}})(jQuery);
+;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/static/hdabo/js/jquery.jeditable.js	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,546 @@
+/*
+ * Jeditable - jQuery in place edit plugin
+ *
+ * Copyright (c) 2006-2009 Mika Tuupola, Dylan Verheul
+ *
+ * Licensed under the MIT license:
+ *   http://www.opensource.org/licenses/mit-license.php
+ *
+ * Project home:
+ *   http://www.appelsiini.net/projects/jeditable
+ *
+ * Based on editable by Dylan Verheul <dylan_at_dyve.net>:
+ *    http://www.dyve.net/jquery/?editable
+ *
+ */
+
+/**
+  * Version 1.7.2-dev
+  *
+  * ** means there is basic unit tests for this parameter. 
+  *
+  * @name  Jeditable
+  * @type  jQuery
+  * @param String  target             (POST) URL or function to send edited content to **
+  * @param Hash    options            additional options 
+  * @param String  options[method]    method to use to send edited content (POST or PUT) **
+  * @param Function options[callback] Function to run after submitting edited content **
+  * @param String  options[name]      POST parameter name of edited content
+  * @param String  options[id]        POST parameter name of edited div id
+  * @param Hash    options[submitdata] Extra parameters to send when submitting edited content.
+  * @param String  options[type]      text, textarea or select (or any 3rd party input type) **
+  * @param Integer options[rows]      number of rows if using textarea ** 
+  * @param Integer options[cols]      number of columns if using textarea **
+  * @param Mixed   options[height]    'auto', 'none' or height in pixels **
+  * @param Mixed   options[width]     'auto', 'none' or width in pixels **
+  * @param String  options[loadurl]   URL to fetch input content before editing **
+  * @param String  options[loadtype]  Request type for load url. Should be GET or POST.
+  * @param String  options[loadtext]  Text to display while loading external content.
+  * @param Mixed   options[loaddata]  Extra parameters to pass when fetching content before editing.
+  * @param Mixed   options[data]      Or content given as paramameter. String or function.**
+  * @param String  options[indicator] indicator html to show when saving
+  * @param String  options[tooltip]   optional tooltip text via title attribute **
+  * @param String  options[event]     jQuery event such as 'click' of 'dblclick' **
+  * @param String  options[submit]    submit button value, empty means no button **
+  * @param String  options[cancel]    cancel button value, empty means no button **
+  * @param String  options[cssclass]  CSS class to apply to input form. 'inherit' to copy from parent. **
+  * @param String  options[style]     Style to apply to input form 'inherit' to copy from parent. **
+  * @param String  options[select]    true or false, when true text is highlighted ??
+  * @param String  options[placeholder] Placeholder text or html to insert when element is empty. **
+  * @param String  options[onblur]    'cancel', 'submit', 'ignore' or function ??
+  *             
+  * @param Function options[onsubmit] function(settings, original) { ... } called before submit
+  * @param Function options[onreset]  function(settings, original) { ... } called before reset
+  * @param Function options[onerror]  function(settings, original, xhr) { ... } called on error
+  *             
+  * @param Hash    options[ajaxoptions]  jQuery Ajax options. See docs.jquery.com.
+  *             
+  */
+
+(function($) {
+
+    $.fn.editable = function(target, options) {
+            
+        if ('disable' == target) {
+            $(this).data('disabled.editable', true);
+            return;
+        }
+        if ('enable' == target) {
+            $(this).data('disabled.editable', false);
+            return;
+        }
+        if ('destroy' == target) {
+            $(this)
+                .unbind($(this).data('event.editable'))
+                .removeData('disabled.editable')
+                .removeData('event.editable');
+            return;
+        }
+        
+        var settings = $.extend({}, $.fn.editable.defaults, {target:target}, options);
+        
+        /* setup some functions */
+        var plugin   = $.editable.types[settings.type].plugin || function() { };
+        var submit   = $.editable.types[settings.type].submit || function() { };
+        var buttons  = $.editable.types[settings.type].buttons 
+                    || $.editable.types['defaults'].buttons;
+        var content  = $.editable.types[settings.type].content 
+                    || $.editable.types['defaults'].content;
+        var element  = $.editable.types[settings.type].element 
+                    || $.editable.types['defaults'].element;
+        var reset    = $.editable.types[settings.type].reset 
+                    || $.editable.types['defaults'].reset;
+        var callback = settings.callback || function() { };
+        var onedit   = settings.onedit   || function() { }; 
+        var onsubmit = settings.onsubmit || function() { };
+        var onreset  = settings.onreset  || function() { };
+        var onerror  = settings.onerror  || reset;
+          
+        /* Show tooltip. */
+        if (settings.tooltip) {
+            $(this).attr('title', settings.tooltip);
+        }
+        
+        settings.autowidth  = 'auto' == settings.width;
+        settings.autoheight = 'auto' == settings.height;
+        
+        return this.each(function() {
+                        
+            /* Save this to self because this changes when scope changes. */
+            var self = this;  
+                   
+            /* Inlined block elements lose their width and height after first edit. */
+            /* Save them for later use as workaround. */
+            var savedwidth  = $(self).width();
+            var savedheight = $(self).height();
+
+            /* Save so it can be later used by $.editable('destroy') */
+            $(this).data('event.editable', settings.event);
+            
+            /* If element is empty add something clickable (if requested) */
+            if (!$.trim($(this).html())) {
+                $(this).html(settings.placeholder);
+            }
+            
+            $(this).bind(settings.event, function(e) {
+                
+                /* Abort if element is disabled. */
+                if (true === $(this).data('disabled.editable')) {
+                    return;
+                }
+                
+                /* Prevent throwing an exeption if edit field is clicked again. */
+                if (self.editing) {
+                    return;
+                }
+                
+                /* Abort if onedit hook returns false. */
+                if (false === onedit.apply(this, [settings, self])) {
+                   return;
+                }
+                
+                /* Prevent default action and bubbling. */
+                e.preventDefault();
+                e.stopPropagation();
+                
+                /* Remove tooltip. */
+                if (settings.tooltip) {
+                    $(self).removeAttr('title');
+                }
+                
+                /* Figure out how wide and tall we are, saved width and height. */
+                /* Workaround for http://dev.jquery.com/ticket/2190 */
+                if (0 == $(self).width()) {
+                    settings.width  = savedwidth;
+                    settings.height = savedheight;
+                } else {
+                    if (settings.width != 'none') {
+                        settings.width = 
+                            settings.autowidth ? $(self).width()  : settings.width;
+                    }
+                    if (settings.height != 'none') {
+                        settings.height = 
+                            settings.autoheight ? $(self).height() : settings.height;
+                    }
+                }
+                
+                /* Remove placeholder text, replace is here because of IE. */
+                if ($(this).html().toLowerCase().replace(/(;|"|\/)/g, '') == 
+                    settings.placeholder.toLowerCase().replace(/(;|"|\/)/g, '')) {
+                        $(this).html('');
+                }
+                                
+                self.editing    = true;
+                self.revert     = $(self).html();
+                $(self).html('');
+
+                /* Create the form object. */
+                var form = $('<form />');
+                
+                /* Apply css or style or both. */
+                if (settings.cssclass) {
+                    if ('inherit' == settings.cssclass) {
+                        form.attr('class', $(self).attr('class'));
+                    } else {
+                        form.attr('class', settings.cssclass);
+                    }
+                }
+
+                if (settings.style) {
+                    if ('inherit' == settings.style) {
+                        form.attr('style', $(self).attr('style'));
+                        /* IE needs the second line or display wont be inherited. */
+                        form.css('display', $(self).css('display'));                
+                    } else {
+                        form.attr('style', settings.style);
+                    }
+                }
+
+                /* Add main input element to form and store it in input. */
+                var input = element.apply(form, [settings, self]);
+
+                /* Set input content via POST, GET, given data or existing value. */
+                var input_content;
+                
+                if (settings.loadurl) {
+                    var t = setTimeout(function() {
+                        input.disabled = true;
+                        content.apply(form, [settings.loadtext, settings, self]);
+                    }, 100);
+
+                    var loaddata = {};
+                    loaddata[settings.id] = self.id;
+                    if ($.isFunction(settings.loaddata)) {
+                        $.extend(loaddata, settings.loaddata.apply(self, [self.revert, settings]));
+                    } else {
+                        $.extend(loaddata, settings.loaddata);
+                    }
+                    $.ajax({
+                       type : settings.loadtype,
+                       url  : settings.loadurl,
+                       data : loaddata,
+                       async : false,
+                       success: function(result) {
+                          window.clearTimeout(t);
+                          input_content = result;
+                          input.disabled = false;
+                       }
+                    });
+                } else if (settings.data) {
+                    input_content = settings.data;
+                    if ($.isFunction(settings.data)) {
+                        input_content = settings.data.apply(self, [self.revert, settings]);
+                    }
+                } else {
+                    input_content = self.revert; 
+                }
+                content.apply(form, [input_content, settings, self]);
+
+                input.attr('name', settings.name);
+        
+                /* Add buttons to the form. */
+                buttons.apply(form, [settings, self]);
+         
+                /* Add created form to self. */
+                $(self).append(form);
+         
+                /* Attach 3rd party plugin if requested. */
+                plugin.apply(form, [settings, self]);
+
+                /* Focus to first visible form element. */
+                $(':input:visible:enabled:first', form).focus();
+
+                /* Highlight input contents when requested. */
+                if (settings.select) {
+                    input.select();
+                }
+        
+                /* discard changes if pressing esc */
+                input.keydown(function(e) {
+                    if (e.keyCode == 27) {
+                        e.preventDefault();
+                        reset.apply(form, [settings, self]);
+                    }
+                });
+
+                /* Discard, submit or nothing with changes when clicking outside. */
+                /* Do nothing is usable when navigating with tab. */
+                var t;
+                if ('cancel' == settings.onblur) {
+                    input.blur(function(e) {
+                        /* Prevent canceling if submit was clicked. */
+                        t = setTimeout(function() {
+                            reset.apply(form, [settings, self]);
+                        }, 500);
+                    });
+                } else if ('submit' == settings.onblur) {
+                    input.blur(function(e) {
+                        /* Prevent double submit if submit was clicked. */
+                        t = setTimeout(function() {
+                            form.submit();
+                        }, 200);
+                    });
+                } else if ($.isFunction(settings.onblur)) {
+                    input.blur(function(e) {
+                        settings.onblur.apply(self, [input.val(), settings]);
+                    });
+                } else {
+                    input.blur(function(e) {
+                      /* TODO: maybe something here */
+                    });
+                }
+
+                form.submit(function(e) {
+
+                    if (t) { 
+                        clearTimeout(t);
+                    }
+
+                    /* Do no submit. */
+                    e.preventDefault(); 
+            
+                    /* Call before submit hook. */
+                    /* If it returns false abort submitting. */                    
+                    if (false !== onsubmit.apply(form, [settings, self])) { 
+                        /* Custom inputs call before submit hook. */
+                        /* If it returns false abort submitting. */
+                        if (false !== submit.apply(form, [settings, self])) { 
+
+                          /* Check if given target is function */
+                          if ($.isFunction(settings.target)) {
+                              var str = settings.target.apply(self, [input.val(), settings]);
+                              $(self).html(str);
+                              self.editing = false;
+                              callback.apply(self, [self.innerHTML, settings]);
+                              /* TODO: this is not dry */                              
+                              if (!$.trim($(self).html())) {
+                                  $(self).html(settings.placeholder);
+                              }
+                          } else {
+                              /* Add edited content and id of edited element to POST. */
+                              var submitdata = {};
+                              submitdata[settings.name] = input.val();
+                              submitdata[settings.id] = self.id;
+                              /* Add extra data to be POST:ed. */
+                              if ($.isFunction(settings.submitdata)) {
+                                  $.extend(submitdata, settings.submitdata.apply(self, [self.revert, settings]));
+                              } else {
+                                  $.extend(submitdata, settings.submitdata);
+                              }
+
+                              /* Quick and dirty PUT support. */
+                              if ('PUT' == settings.method) {
+                                  submitdata['_method'] = 'put';
+                              }
+
+                              /* Show the saving indicator. */
+                              $(self).html(settings.indicator);
+                              
+                              /* Defaults for ajaxoptions. */
+                              var ajaxoptions = {
+                                  type    : 'POST',
+                                  data    : submitdata,
+                                  dataType: 'html',
+                                  url     : settings.target,
+                                  success : function(result, status) {
+                                      if (ajaxoptions.dataType == 'html') {
+                                        $(self).html(result);
+                                      }
+                                      self.editing = false;
+                                      callback.apply(self, [result, settings]);
+                                      if (!$.trim($(self).html())) {
+                                          $(self).html(settings.placeholder);
+                                      }
+                                  },
+                                  error   : function(xhr, status, error) {
+                                      onerror.apply(form, [settings, self, xhr]);
+                                  }
+                              };
+                              
+                              /* Override with what is given in settings.ajaxoptions. */
+                              $.extend(ajaxoptions, settings.ajaxoptions);   
+                              $.ajax(ajaxoptions);          
+                              
+                            }
+                        }
+                    }
+                    
+                    /* Show tooltip again. */
+                    $(self).attr('title', settings.tooltip);
+                    
+                    return false;
+                });
+            });
+            
+            /* Privileged methods */
+            this.reset = function(form) {
+                /* Prevent calling reset twice when blurring. */
+                if (this.editing) {
+                    /* Before reset hook, if it returns false abort reseting. */
+                    if (false !== onreset.apply(form, [settings, self])) { 
+                        $(self).html(self.revert);
+                        self.editing   = false;
+                        if (!$.trim($(self).html())) {
+                            $(self).html(settings.placeholder);
+                        }
+                        /* Show tooltip again. */
+                        if (settings.tooltip) {
+                            $(self).attr('title', settings.tooltip);                
+                        }
+                    }                    
+                }
+            };            
+        });
+
+    };
+
+
+    $.editable = {
+        types: {
+            defaults: {
+                element : function(settings, original) {
+                    var input = $('<input type="hidden"></input>');                
+                    $(this).append(input);
+                    return(input);
+                },
+                content : function(string, settings, original) {
+                    $(':input:first', this).val(string);
+                },
+                reset : function(settings, original) {
+                  original.reset(this);
+                },
+                buttons : function(settings, original) {
+                    var form = this;
+                    if (settings.submit) {
+                        /* If given html string use that. */
+                        if (settings.submit.match(/>$/)) {
+                            var submit = $(settings.submit).click(function() {
+                                if (submit.attr("type") != "submit") {
+                                    form.submit();
+                                }
+                            });
+                        /* Otherwise use button with given string as text. */
+                        } else {
+                            var submit = $('<button type="submit" />');
+                            submit.html(settings.submit);                            
+                        }
+                        $(this).append(submit);
+                    }
+                    if (settings.cancel) {
+                        /* If given html string use that. */
+                        if (settings.cancel.match(/>$/)) {
+                            var cancel = $(settings.cancel);
+                        /* otherwise use button with given string as text */
+                        } else {
+                            var cancel = $('<button type="cancel" />');
+                            cancel.html(settings.cancel);
+                        }
+                        $(this).append(cancel);
+
+                        $(cancel).click(function(event) {
+                            if ($.isFunction($.editable.types[settings.type].reset)) {
+                                var reset = $.editable.types[settings.type].reset;                                                                
+                            } else {
+                                var reset = $.editable.types['defaults'].reset;                                
+                            }
+                            reset.apply(form, [settings, original]);
+                            return false;
+                        });
+                    }
+                }
+            },
+            text: {
+                element : function(settings, original) {
+                    var input = $('<input />');
+                    if (settings.width  != 'none') { input.attr('width', settings.width);  }
+                    if (settings.height != 'none') { input.attr('height', settings.height); }
+                    /* https://bugzilla.mozilla.org/show_bug.cgi?id=236791 */
+                    //input[0].setAttribute('autocomplete','off');
+                    input.attr('autocomplete','off');
+                    $(this).append(input);
+                    return(input);
+                }
+            },
+            textarea: {
+                element : function(settings, original) {
+                    var textarea = $('<textarea />');
+                    if (settings.rows) {
+                        textarea.attr('rows', settings.rows);
+                    } else if (settings.height != "none") {
+                        textarea.height(settings.height);
+                    }
+                    if (settings.cols) {
+                        textarea.attr('cols', settings.cols);
+                    } else if (settings.width != "none") {
+                        textarea.width(settings.width);
+                    }
+                    $(this).append(textarea);
+                    return(textarea);
+                }
+            },
+            select: {
+               element : function(settings, original) {
+                    var select = $('<select />');
+                    $(this).append(select);
+                    return(select);
+                },
+                content : function(data, settings, original) {
+                    /* If it is string assume it is json. */
+                    if (String == data.constructor) {      
+                        eval ('var json = ' + data);
+                    } else {
+                    /* Otherwise assume it is a hash already. */
+                        var json = data;
+                    }
+                    for (var key in json) {
+                        if (!json.hasOwnProperty(key)) {
+                            continue;
+                        }
+                        if ('selected' == key) {
+                            continue;
+                        } 
+                        var option = $('<option />').val(key).append(json[key]);
+                        $('select', this).append(option);    
+                    }                    
+                    /* Loop option again to set selected. IE needed this... */ 
+                    $('select', this).children().each(function() {
+                        if ($(this).val() == json['selected'] || 
+                            $(this).text() == $.trim(original.revert)) {
+                                $(this).attr('selected', 'selected');
+                        }
+                    });
+                    /* Submit on change if no submit button defined. */
+                    if (!settings.submit) {
+                        var form = this;
+                        $('select', this).change(function() {
+                            form.submit();
+                        });
+                    }
+                }
+            }
+        },
+
+        /* Add new input type */
+        addInputType: function(name, input) {
+            $.editable.types[name] = input;
+        }
+    };
+
+    /* Publicly accessible defaults. */
+    $.fn.editable.defaults = {
+        name       : 'value',
+        id         : 'id',
+        type       : 'text',
+        width      : 'auto',
+        height     : 'auto',
+        event      : 'click.editable',
+        onblur     : 'cancel',
+        loadtype   : 'GET',
+        loadtext   : 'Loading...',
+        placeholder: 'Click to edit',
+        loaddata   : {},
+        submitdata : {},
+        ajaxoptions: {}
+    };
+
+})(jQuery);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/static/hdabo/js/jquery.js	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,8865 @@
+/*!
+ * jQuery JavaScript Library v1.6
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Mon May 2 13:50:00 2011 -0400
+ */
+(function( window, undefined ) {
+
+// Use the correct document accordingly with window argument (sandbox)
+var document = window.document,
+	navigator = window.navigator,
+	location = window.location;
+var jQuery = (function() {
+
+// 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, rootjQuery );
+	},
+
+	// Map over jQuery in case of overwrite
+	_jQuery = window.jQuery,
+
+	// Map over the $ in case of overwrite
+	_$ = window.$,
+
+	// 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\-]*)$)/,
+
+	// Check if a string has a non-whitespace character in it
+	rnotwhite = /\S/,
+
+	// Used for trimming whitespace
+	trimLeft = /^\s+/,
+	trimRight = /\s+$/,
+
+	// Check for digits
+	rdigit = /\d/,
+
+	// Match a standalone tag
+	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
+
+	// JSON RegExp
+	rvalidchars = /^[\],:{}\s]*$/,
+	rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
+	rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
+	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+
+	// Useragent RegExp
+	rwebkit = /(webkit)[ \/]([\w.]+)/,
+	ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
+	rmsie = /(msie) ([\w.]+)/,
+	rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
+
+	// Keep a UserAgent string for use with jQuery.browser
+	userAgent = navigator.userAgent,
+
+	// For matching the engine and version of the browser
+	browserMatch,
+
+	// The deferred used on DOM ready
+	readyList,
+
+	// The ready event handler
+	DOMContentLoaded,
+
+	// Save a reference to some core methods
+	toString = Object.prototype.toString,
+	hasOwn = Object.prototype.hasOwnProperty,
+	push = Array.prototype.push,
+	slice = Array.prototype.slice,
+	trim = String.prototype.trim,
+	indexOf = Array.prototype.indexOf,
+
+	// [[Class]] -> type pairs
+	class2type = {};
+
+jQuery.fn = jQuery.prototype = {
+	constructor: jQuery,
+	init: function( selector, context, rootjQuery ) {
+		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 && document.body ) {
+			this.context = document;
+			this[0] = document.body;
+			this.selector = selector;
+			this.length = 1;
+			return this;
+		}
+
+		// Handle HTML strings
+		if ( typeof selector === "string" ) {
+			// Are we dealing with HTML string or an ID?
+			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+				// Assume that strings that start and end with <> are HTML and skip the regex check
+				match = [ null, selector, null ];
+
+			} else {
+				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] ) {
+					context = context instanceof jQuery ? context[0] : context;
+					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 = jQuery.buildFragment( [ match[1] ], [ doc ] );
+						selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes;
+					}
+
+					return jQuery.merge( this, selector );
+
+				// HANDLE: $("#id")
+				} else {
+					elem = document.getElementById( match[2] );
+
+					// Check parentNode to catch when Blackberry 4.6 returns
+					// nodes that are no longer in the document #6963
+					if ( elem && elem.parentNode ) {
+						// 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: $(expr, $(...))
+			} else if ( !context || context.jquery ) {
+				return (context || rootjQuery).find( selector );
+
+			// HANDLE: $(expr, context)
+			// (which is just equivalent to: $(context).find(expr)
+			} else {
+				return this.constructor( 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.6",
+
+	// 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[ this.length + num ] : 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 = this.constructor();
+
+		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();
+
+		// Add the callback
+		readyList.done( 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 || this.constructor(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() {
+	var options, name, src, copy, copyIsArray, clone,
+		target = arguments[0] || {},
+		i = 1,
+		length = arguments.length,
+		deep = false;
+
+	// 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 plain objects or arrays
+				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+					if ( copyIsArray ) {
+						copyIsArray = false;
+						clone = src && jQuery.isArray(src) ? src : [];
+
+					} else {
+						clone = src && jQuery.isPlainObject(src) ? src : {};
+					}
+
+					// 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 ) {
+		if ( window.$ === jQuery ) {
+			window.$ = _$;
+		}
+
+		if ( deep && window.jQuery === jQuery ) {
+			window.jQuery = _jQuery;
+		}
+
+		return jQuery;
+	},
+
+	// Is the DOM ready to be used? Set to true once it occurs.
+	isReady: false,
+
+	// A counter to track how many items to wait for before
+	// the ready event fires. See #6781
+	readyWait: 1,
+
+	// Hold (or release) the ready event
+	holdReady: function( hold ) {
+		if ( hold ) {
+			jQuery.readyWait++;
+		} else {
+			jQuery.ready( true );
+		}
+	},
+
+	// Handle when the DOM is ready
+	ready: function( wait ) {
+		// Either a released hold or an DOMready/load event and not yet ready
+		if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
+			// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+			if ( !document.body ) {
+				return setTimeout( jQuery.ready, 1 );
+			}
+
+			// Remember that the DOM is ready
+			jQuery.isReady = true;
+
+			// If a normal DOM Ready event fired, decrement, and wait if need be
+			if ( wait !== true && --jQuery.readyWait > 0 ) {
+				return;
+			}
+
+			// If there are functions bound, to execute
+			readyList.resolveWith( document, [ jQuery ] );
+
+			// Trigger any bound ready events
+			if ( jQuery.fn.trigger ) {
+				jQuery( document ).trigger( "ready" ).unbind( "ready" );
+			}
+		}
+	},
+
+	bindReady: function() {
+		if ( readyList ) {
+			return;
+		}
+
+		readyList = jQuery._Deferred();
+
+		// Catch cases where $(document).ready() is called after the
+		// browser event has already occurred.
+		if ( document.readyState === "complete" ) {
+			// Handle it asynchronously to allow scripts the opportunity to delay ready
+			return setTimeout( jQuery.ready, 1 );
+		}
+
+		// 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 jQuery.type(obj) === "function";
+	},
+
+	isArray: Array.isArray || function( obj ) {
+		return jQuery.type(obj) === "array";
+	},
+
+	// A crude way of determining if an object is a window
+	isWindow: function( obj ) {
+		return obj && typeof obj === "object" && "setInterval" in obj;
+	},
+
+	isNaN: function( obj ) {
+		return obj == null || !rdigit.test( obj ) || isNaN( obj );
+	},
+
+	type: function( obj ) {
+		return obj == null ?
+			String( obj ) :
+			class2type[ toString.call(obj) ] || "object";
+	},
+
+	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 || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+			return false;
+		}
+
+		// Not own constructor property must be Object
+		if ( obj.constructor &&
+			!hasOwn.call(obj, "constructor") &&
+			!hasOwn.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 || hasOwn.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 );
+
+		// Attempt to parse using the native JSON parser first
+		if ( window.JSON && window.JSON.parse ) {
+			return window.JSON.parse( data );
+		}
+
+		// Make sure the incoming data is actual JSON
+		// Logic borrowed from http://json.org/json2.js
+		if ( rvalidchars.test( data.replace( rvalidescape, "@" )
+			.replace( rvalidtokens, "]" )
+			.replace( rvalidbraces, "")) ) {
+
+			return (new Function( "return " + data ))();
+
+		}
+		jQuery.error( "Invalid JSON: " + data );
+	},
+
+	// Cross-browser xml parsing
+	// (xml & tmp used internally)
+	parseXML: function( data , xml , tmp ) {
+
+		if ( window.DOMParser ) { // Standard
+			tmp = new DOMParser();
+			xml = tmp.parseFromString( data , "text/xml" );
+		} else { // IE
+			xml = new ActiveXObject( "Microsoft.XMLDOM" );
+			xml.async = "false";
+			xml.loadXML( data );
+		}
+
+		tmp = xml.documentElement;
+
+		if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) {
+			jQuery.error( "Invalid XML: " + data );
+		}
+
+		return xml;
+	},
+
+	noop: function() {},
+
+	// Evaluates a script in a global context
+	// Workarounds based on findings by Jim Driscoll
+	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+	globalEval: function( data ) {
+		if ( data && rnotwhite.test( data ) ) {
+			// We use execScript on Internet Explorer
+			// We use an anonymous function so that context is window
+			// rather than jQuery in Firefox
+			( window.execScript || function( data ) {
+				window[ "eval" ].call( window, data );
+			} )( data );
+		}
+	},
+
+	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 ( ; i < length; ) {
+					if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
+						break;
+					}
+				}
+			}
+		}
+
+		return object;
+	},
+
+	// Use native String.trim function wherever possible
+	trim: trim ?
+		function( text ) {
+			return text == null ?
+				"" :
+				trim.call( text );
+		} :
+
+		// Otherwise use our own trimming functionality
+		function( text ) {
+			return text == null ?
+				"" :
+				text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
+		},
+
+	// 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)
+			// Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
+			var type = jQuery.type( array );
+
+			if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
+				push.call( ret, array );
+			} else {
+				jQuery.merge( ret, array );
+			}
+		}
+
+		return ret;
+	},
+
+	inArray: function( elem, array ) {
+
+		if ( indexOf ) {
+			return indexOf.call( array, 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 = [], retVal;
+		inv = !!inv;
+
+		// Go through the array, only saving the items
+		// that pass the validator function
+		for ( var i = 0, length = elems.length; i < length; i++ ) {
+			retVal = !!callback( elems[ i ], i );
+			if ( inv !== retVal ) {
+				ret.push( elems[ i ] );
+			}
+		}
+
+		return ret;
+	},
+
+	// arg is for internal usage only
+	map: function( elems, callback, arg ) {
+		var value, key, ret = [],
+			i = 0,
+			length = elems.length,
+			// jquery objects are treated as arrays
+			isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
+
+		// Go through the array, translating each of the items to their
+		if ( isArray ) {
+			for ( ; i < length; i++ ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret[ ret.length ] = value;
+				}
+			}
+
+		// Go through every key on the object,
+		} else {
+			for ( key in elems ) {
+				value = callback( elems[ key ], key, arg );
+
+				if ( value != null ) {
+					ret[ ret.length ] = value;
+				}
+			}
+		}
+
+		// Flatten any nested arrays
+		return ret.concat.apply( [], ret );
+	},
+
+	// A global GUID counter for objects
+	guid: 1,
+
+	// Bind a function to a context, optionally partially applying any
+	// arguments.
+	proxy: function( fn, context ) {
+		if ( typeof context === "string" ) {
+			var tmp = fn[ context ];
+			context = fn;
+			fn = tmp;
+		}
+
+		// Quick check to determine if target is callable, in the spec
+		// this throws a TypeError, but we will just return undefined.
+		if ( !jQuery.isFunction( fn ) ) {
+			return undefined;
+		}
+
+		// Simulated bind
+		var args = slice.call( arguments, 2 ),
+			proxy = function() {
+				return fn.apply( context, args.concat( slice.call( arguments ) ) );
+			};
+
+		// Set the guid of unique handler to the same of original handler, so it can be removed
+		proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
+
+		return proxy;
+	},
+
+	// Mutifunctional method to get and set values to a collection
+	// The value/s can be optionally by executed if its a function
+	access: function( elems, key, value, exec, fn, pass ) {
+		var length = elems.length;
+
+		// Setting many attributes
+		if ( typeof key === "object" ) {
+			for ( var k in key ) {
+				jQuery.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;
+	},
+
+	now: function() {
+		return (new Date()).getTime();
+	},
+
+	// Use of jQuery.browser is frowned upon.
+	// More details: http://docs.jquery.com/Utilities/jQuery.browser
+	uaMatch: function( ua ) {
+		ua = ua.toLowerCase();
+
+		var match = rwebkit.exec( ua ) ||
+			ropera.exec( ua ) ||
+			rmsie.exec( ua ) ||
+			ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
+			[];
+
+		return { browser: match[1] || "", version: match[2] || "0" };
+	},
+
+	sub: function() {
+		function jQuerySub( selector, context ) {
+			return new jQuerySub.fn.init( selector, context );
+		}
+		jQuery.extend( true, jQuerySub, this );
+		jQuerySub.superclass = this;
+		jQuerySub.fn = jQuerySub.prototype = this();
+		jQuerySub.fn.constructor = jQuerySub;
+		jQuerySub.sub = this.sub;
+		jQuerySub.fn.init = function init( selector, context ) {
+			if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
+				context = jQuerySub( context );
+			}
+
+			return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
+		};
+		jQuerySub.fn.init.prototype = jQuerySub.fn;
+		var rootjQuerySub = jQuerySub(document);
+		return jQuerySub;
+	},
+
+	browser: {}
+});
+
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
+	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
+
+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;
+}
+
+// IE doesn't match non-breaking spaces with \s
+if ( rnotwhite.test( "\xA0" ) ) {
+	trimLeft = /^[\s\xA0]+/;
+	trimRight = /[\s\xA0]+$/;
+}
+
+// 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(e) {
+		setTimeout( doScrollCheck, 1 );
+		return;
+	}
+
+	// and execute any waiting functions
+	jQuery.ready();
+}
+
+// Expose jQuery to the global object
+return jQuery;
+
+})();
+
+
+var // Promise methods
+	promiseMethods = "done fail isResolved isRejected promise then always pipe".split( " " ),
+	// Static reference to slice
+	sliceDeferred = [].slice;
+
+jQuery.extend({
+	// Create a simple deferred (one callbacks list)
+	_Deferred: function() {
+		var // callbacks list
+			callbacks = [],
+			// stored [ context , args ]
+			fired,
+			// to avoid firing when already doing so
+			firing,
+			// flag to know if the deferred has been cancelled
+			cancelled,
+			// the deferred itself
+			deferred  = {
+
+				// done( f1, f2, ...)
+				done: function() {
+					if ( !cancelled ) {
+						var args = arguments,
+							i,
+							length,
+							elem,
+							type,
+							_fired;
+						if ( fired ) {
+							_fired = fired;
+							fired = 0;
+						}
+						for ( i = 0, length = args.length; i < length; i++ ) {
+							elem = args[ i ];
+							type = jQuery.type( elem );
+							if ( type === "array" ) {
+								deferred.done.apply( deferred, elem );
+							} else if ( type === "function" ) {
+								callbacks.push( elem );
+							}
+						}
+						if ( _fired ) {
+							deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] );
+						}
+					}
+					return this;
+				},
+
+				// resolve with given context and args
+				resolveWith: function( context, args ) {
+					if ( !cancelled && !fired && !firing ) {
+						// make sure args are available (#8421)
+						args = args || [];
+						firing = 1;
+						try {
+							while( callbacks[ 0 ] ) {
+								callbacks.shift().apply( context, args );
+							}
+						}
+						finally {
+							fired = [ context, args ];
+							firing = 0;
+						}
+					}
+					return this;
+				},
+
+				// resolve with this as context and given arguments
+				resolve: function() {
+					deferred.resolveWith( this, arguments );
+					return this;
+				},
+
+				// Has this deferred been resolved?
+				isResolved: function() {
+					return !!( firing || fired );
+				},
+
+				// Cancel
+				cancel: function() {
+					cancelled = 1;
+					callbacks = [];
+					return this;
+				}
+			};
+
+		return deferred;
+	},
+
+	// Full fledged deferred (two callbacks list)
+	Deferred: function( func ) {
+		var deferred = jQuery._Deferred(),
+			failDeferred = jQuery._Deferred(),
+			promise;
+		// Add errorDeferred methods, then and promise
+		jQuery.extend( deferred, {
+			then: function( doneCallbacks, failCallbacks ) {
+				deferred.done( doneCallbacks ).fail( failCallbacks );
+				return this;
+			},
+			always: function() {
+				return deferred.done.apply( deferred, arguments ).fail.apply( this, arguments );
+			},
+			fail: failDeferred.done,
+			rejectWith: failDeferred.resolveWith,
+			reject: failDeferred.resolve,
+			isRejected: failDeferred.isResolved,
+			pipe: function( fnDone, fnFail ) {
+				return jQuery.Deferred(function( newDefer ) {
+					jQuery.each( {
+						done: [ fnDone, "resolve" ],
+						fail: [ fnFail, "reject" ]
+					}, function( handler, data ) {
+						var fn = data[ 0 ],
+							action = data[ 1 ],
+							returned;
+						if ( jQuery.isFunction( fn ) ) {
+							deferred[ handler ](function() {
+								returned = fn.apply( this, arguments );
+								if ( jQuery.isFunction( returned.promise ) ) {
+									returned.promise().then( newDefer.resolve, newDefer.reject );
+								} else {
+									newDefer[ action ]( returned );
+								}
+							});
+						} else {
+							deferred[ handler ]( newDefer[ action ] );
+						}
+					});
+				}).promise();
+			},
+			// Get a promise for this deferred
+			// If obj is provided, the promise aspect is added to the object
+			promise: function( obj ) {
+				if ( obj == null ) {
+					if ( promise ) {
+						return promise;
+					}
+					promise = obj = {};
+				}
+				var i = promiseMethods.length;
+				while( i-- ) {
+					obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ];
+				}
+				return obj;
+			}
+		});
+		// Make sure only one callback list will be used
+		deferred.done( failDeferred.cancel ).fail( deferred.cancel );
+		// Unexpose cancel
+		delete deferred.cancel;
+		// Call given func if any
+		if ( func ) {
+			func.call( deferred, deferred );
+		}
+		return deferred;
+	},
+
+	// Deferred helper
+	when: function( firstParam ) {
+		var args = arguments,
+			i = 0,
+			length = args.length,
+			count = length,
+			deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
+				firstParam :
+				jQuery.Deferred();
+		function resolveFunc( i ) {
+			return function( value ) {
+				args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
+				if ( !( --count ) ) {
+					// Strange bug in FF4:
+					// Values changed onto the arguments object sometimes end up as undefined values
+					// outside the $.when method. Cloning the object into a fresh array solves the issue
+					deferred.resolveWith( deferred, sliceDeferred.call( args, 0 ) );
+				}
+			};
+		}
+		if ( length > 1 ) {
+			for( ; i < length; i++ ) {
+				if ( args[ i ] && jQuery.isFunction( args[ i ].promise ) ) {
+					args[ i ].promise().then( resolveFunc(i), deferred.reject );
+				} else {
+					--count;
+				}
+			}
+			if ( !count ) {
+				deferred.resolveWith( deferred, args );
+			}
+		} else if ( deferred !== firstParam ) {
+			deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
+		}
+		return deferred.promise();
+	}
+});
+
+
+
+jQuery.support = (function() {
+
+	var div = document.createElement( "div" ),
+		all,
+		a,
+		select,
+		opt,
+		input,
+		marginDiv,
+		support,
+		fragment,
+		body,
+		bodyStyle,
+		tds,
+		events,
+		eventName,
+		i,
+		isSupported;
+
+	// Preliminary tests
+	div.setAttribute("className", "t");
+	div.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
+
+	all = div.getElementsByTagName( "*" );
+	a = div.getElementsByTagName( "a" )[ 0 ];
+
+	// Can't get basic test support
+	if ( !all || !all.length || !a ) {
+		return {};
+	}
+
+	// First batch of supports tests
+	select = document.createElement( "select" );
+	opt = select.appendChild( document.createElement("option") );
+	input = div.getElementsByTagName( "input" )[ 0 ];
+
+	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 instead)
+		style: /top/.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: ( input.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: opt.selected,
+
+		// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+		getSetAttribute: div.className !== "t",
+
+		// Will be defined later
+		submitBubbles: true,
+		changeBubbles: true,
+		focusinBubbles: false,
+		deleteExpando: true,
+		noCloneEvent: true,
+		inlineBlockNeedsLayout: false,
+		shrinkWrapBlocks: false,
+		reliableMarginRight: true
+	};
+
+	// Make sure checked status is properly cloned
+	input.checked = true;
+	support.noCloneChecked = input.cloneNode( true ).checked;
+
+	// Make sure that the options inside disabled selects aren't marked as disabled
+	// (WebKit marks them as disabled)
+	select.disabled = true;
+	support.optDisabled = !opt.disabled;
+
+	// Test to see if it's possible to delete an expando from an element
+	// Fails in Internet Explorer
+	try {
+		delete div.test;
+	} catch( e ) {
+		support.deleteExpando = false;
+	}
+
+	if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
+		div.attachEvent( "onclick", function click() {
+			// Cloning a node shouldn't copy over any
+			// bound event handlers (IE does this)
+			support.noCloneEvent = false;
+			div.detachEvent( "onclick", click );
+		});
+		div.cloneNode( true ).fireEvent( "onclick" );
+	}
+
+	// Check if a radio maintains it's value
+	// after being appended to the DOM
+	input = document.createElement("input");
+	input.value = "t";
+	input.setAttribute("type", "radio");
+	support.radioValue = input.value === "t";
+
+	input.setAttribute("checked", "checked");
+	div.appendChild( input );
+	fragment = document.createDocumentFragment();
+	fragment.appendChild( div.firstChild );
+
+	// WebKit doesn't clone checked state correctly in fragments
+	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+	div.innerHTML = "";
+
+	// Figure out if the W3C box model works as expected
+	div.style.width = div.style.paddingLeft = "1px";
+
+	// We use our own, invisible, body
+	body = document.createElement( "body" );
+	bodyStyle = {
+		visibility: "hidden",
+		width: 0,
+		height: 0,
+		border: 0,
+		margin: 0,
+		// Set background to avoid IE crashes when removing (#9028)
+		background: "none"
+	};
+	for ( i in bodyStyle ) {
+		body.style[ i ] = bodyStyle[ i ];
+	}
+	body.appendChild( div );
+	document.documentElement.appendChild( body );
+
+	// Check if a disconnected checkbox will retain its checked
+	// value of true after appended to the DOM (IE6/7)
+	support.appendChecked = input.checked;
+
+	support.boxModel = div.offsetWidth === 2;
+
+	if ( "zoom" in div.style ) {
+		// Check if natively block-level elements act like inline-block
+		// elements when setting their display to 'inline' and giving
+		// them layout
+		// (IE < 8 does this)
+		div.style.display = "inline";
+		div.style.zoom = 1;
+		support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );
+
+		// Check if elements with layout shrink-wrap their children
+		// (IE 6 does this)
+		div.style.display = "";
+		div.innerHTML = "<div style='width:4px;'></div>";
+		support.shrinkWrapBlocks = ( div.offsetWidth !== 2 );
+	}
+
+	div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
+	tds = div.getElementsByTagName( "td" );
+
+	// Check if table cells still have offsetWidth/Height when they are set
+	// to display:none and there are still other visible table cells in a
+	// table row; if so, offsetWidth/Height are not reliable for use when
+	// determining if an element has been hidden directly using
+	// display:none (it is still safe to use offsets if a parent element is
+	// hidden; don safety goggles and see bug #4512 for more information).
+	// (only IE 8 fails this test)
+	isSupported = ( tds[ 0 ].offsetHeight === 0 );
+
+	tds[ 0 ].style.display = "";
+	tds[ 1 ].style.display = "none";
+
+	// Check if empty table cells still have offsetWidth/Height
+	// (IE < 8 fail this test)
+	support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
+	div.innerHTML = "";
+
+	// Check if div with explicit width and no margin-right incorrectly
+	// gets computed margin-right based on width of container. For more
+	// info see bug #3333
+	// Fails in WebKit before Feb 2011 nightlies
+	// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+	if ( document.defaultView && document.defaultView.getComputedStyle ) {
+		marginDiv = document.createElement( "div" );
+		marginDiv.style.width = "0";
+		marginDiv.style.marginRight = "0";
+		div.appendChild( marginDiv );
+		support.reliableMarginRight =
+			( parseInt( document.defaultView.getComputedStyle( marginDiv, null ).marginRight, 10 ) || 0 ) === 0;
+	}
+
+	// Remove the body element we added
+	body.innerHTML = "";
+	document.documentElement.removeChild( body );
+
+	// Technique from Juriy Zaytsev
+	// http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
+	// We only care about the case where non-standard event systems
+	// are used, namely in IE. Short-circuiting here helps us to
+	// avoid an eval call (in setAttribute) which can cause CSP
+	// to go haywire. See: https://developer.mozilla.org/en/Security/CSP
+	if ( div.attachEvent ) {
+		for( i in {
+			submit: 1,
+			change: 1,
+			focusin: 1
+		} ) {
+			eventName = "on" + i;
+			isSupported = ( eventName in div );
+			if ( !isSupported ) {
+				div.setAttribute( eventName, "return;" );
+				isSupported = ( typeof div[ eventName ] === "function" );
+			}
+			support[ i + "Bubbles" ] = isSupported;
+		}
+	}
+
+	return support;
+})();
+
+// Keep track of boxModel
+jQuery.boxModel = jQuery.support.boxModel;
+
+
+
+
+var rbrace = /^(?:\{.*\}|\[.*\])$/,
+	rmultiDash = /([a-z])([A-Z])/g;
+
+jQuery.extend({
+	cache: {},
+
+	// Please use with caution
+	uuid: 0,
+
+	// Unique for each copy of jQuery on the page
+	// Non-digits removed to match rinlinejQuery
+	expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
+
+	// The following elements throw uncatchable exceptions if you
+	// attempt to add expando properties to them.
+	noData: {
+		"embed": true,
+		// Ban all objects except for Flash (which handle expandos)
+		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
+		"applet": true
+	},
+
+	hasData: function( elem ) {
+		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+
+		return !!elem && !isEmptyDataObject( elem );
+	},
+
+	data: function( elem, name, data, pvt /* Internal Use Only */ ) {
+		if ( !jQuery.acceptData( elem ) ) {
+			return;
+		}
+
+		var internalKey = jQuery.expando, getByName = typeof name === "string", thisCache,
+
+			// We have to handle DOM nodes and JS objects differently because IE6-7
+			// can't GC object references properly across the DOM-JS boundary
+			isNode = elem.nodeType,
+
+			// Only DOM nodes need the global jQuery cache; JS object data is
+			// attached directly to the object so GC can occur automatically
+			cache = isNode ? jQuery.cache : elem,
+
+			// Only defining an ID for JS objects if its cache already exists allows
+			// the code to shortcut on the same path as a DOM node with no cache
+			id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando;
+
+		// Avoid doing any more work than we need to when trying to get data on an
+		// object that has no data at all
+		if ( (!id || (pvt && id && !cache[ id ][ internalKey ])) && getByName && data === undefined ) {
+			return;
+		}
+
+		if ( !id ) {
+			// Only DOM nodes need a new unique ID for each element since their data
+			// ends up in the global cache
+			if ( isNode ) {
+				elem[ jQuery.expando ] = id = ++jQuery.uuid;
+			} else {
+				id = jQuery.expando;
+			}
+		}
+
+		if ( !cache[ id ] ) {
+			cache[ id ] = {};
+
+			// TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
+			// metadata on plain JS objects when the object is serialized using
+			// JSON.stringify
+			if ( !isNode ) {
+				cache[ id ].toJSON = jQuery.noop;
+			}
+		}
+
+		// An object can be passed to jQuery.data instead of a key/value pair; this gets
+		// shallow copied over onto the existing cache
+		if ( typeof name === "object" || typeof name === "function" ) {
+			if ( pvt ) {
+				cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name);
+			} else {
+				cache[ id ] = jQuery.extend(cache[ id ], name);
+			}
+		}
+
+		thisCache = cache[ id ];
+
+		// Internal jQuery data is stored in a separate object inside the object's data
+		// cache in order to avoid key collisions between internal data and user-defined
+		// data
+		if ( pvt ) {
+			if ( !thisCache[ internalKey ] ) {
+				thisCache[ internalKey ] = {};
+			}
+
+			thisCache = thisCache[ internalKey ];
+		}
+
+		if ( data !== undefined ) {
+			thisCache[ name ] = data;
+		}
+
+		// TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should
+		// not attempt to inspect the internal events object using jQuery.data, as this
+		// internal data object is undocumented and subject to change.
+		if ( name === "events" && !thisCache[name] ) {
+			return thisCache[ internalKey ] && thisCache[ internalKey ].events;
+		}
+
+		return getByName ? thisCache[ name ] : thisCache;
+	},
+
+	removeData: function( elem, name, pvt /* Internal Use Only */ ) {
+		if ( !jQuery.acceptData( elem ) ) {
+			return;
+		}
+
+		var internalKey = jQuery.expando, isNode = elem.nodeType,
+
+			// See jQuery.data for more information
+			cache = isNode ? jQuery.cache : elem,
+
+			// See jQuery.data for more information
+			id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
+
+		// If there is already no cache entry for this object, there is no
+		// purpose in continuing
+		if ( !cache[ id ] ) {
+			return;
+		}
+
+		if ( name ) {
+			var thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ];
+
+			if ( thisCache ) {
+				delete thisCache[ name ];
+
+				// If there is no data left in the cache, we want to continue
+				// and let the cache object itself get destroyed
+				if ( !isEmptyDataObject(thisCache) ) {
+					return;
+				}
+			}
+		}
+
+		// See jQuery.data for more information
+		if ( pvt ) {
+			delete cache[ id ][ internalKey ];
+
+			// Don't destroy the parent cache unless the internal data object
+			// had been the only thing left in it
+			if ( !isEmptyDataObject(cache[ id ]) ) {
+				return;
+			}
+		}
+
+		var internalCache = cache[ id ][ internalKey ];
+
+		// Browsers that fail expando deletion also refuse to delete expandos on
+		// the window, but it will allow it on all other JS objects; other browsers
+		// don't care
+		if ( jQuery.support.deleteExpando || cache != window ) {
+			delete cache[ id ];
+		} else {
+			cache[ id ] = null;
+		}
+
+		// We destroyed the entire user cache at once because it's faster than
+		// iterating through each key, but we need to continue to persist internal
+		// data if it existed
+		if ( internalCache ) {
+			cache[ id ] = {};
+			// TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
+			// metadata on plain JS objects when the object is serialized using
+			// JSON.stringify
+			if ( !isNode ) {
+				cache[ id ].toJSON = jQuery.noop;
+			}
+
+			cache[ id ][ internalKey ] = internalCache;
+
+		// Otherwise, we need to eliminate the expando on the node to avoid
+		// false lookups in the cache for entries that no longer exist
+		} else if ( isNode ) {
+			// IE does not allow us to delete expando properties from nodes,
+			// nor does it have a removeAttribute function on Document nodes;
+			// we must handle all of these cases
+			if ( jQuery.support.deleteExpando ) {
+				delete elem[ jQuery.expando ];
+			} else if ( elem.removeAttribute ) {
+				elem.removeAttribute( jQuery.expando );
+			} else {
+				elem[ jQuery.expando ] = null;
+			}
+		}
+	},
+
+	// For internal use only.
+	_data: function( elem, name, data ) {
+		return jQuery.data( elem, name, data, true );
+	},
+
+	// A method for determining if a DOM node can handle the data expando
+	acceptData: function( elem ) {
+		if ( elem.nodeName ) {
+			var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
+
+			if ( match ) {
+				return !(match === true || elem.getAttribute("classid") !== match);
+			}
+		}
+
+		return true;
+	}
+});
+
+jQuery.fn.extend({
+	data: function( key, value ) {
+		var data = null;
+
+		if ( typeof key === "undefined" ) {
+			if ( this.length ) {
+				data = jQuery.data( this[0] );
+
+				if ( this[0].nodeType === 1 ) {
+			    var attr = this[0].attributes, name;
+					for ( var i = 0, l = attr.length; i < l; i++ ) {
+						name = attr[i].name;
+
+						if ( name.indexOf( "data-" ) === 0 ) {
+							name = jQuery.camelCase( name.substring(5) );
+
+							dataAttr( this[0], name, data[ name ] );
+						}
+					}
+				}
+			}
+
+			return data;
+
+		} 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 ) {
+			data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
+
+			// Try to fetch any internally stored data first
+			if ( data === undefined && this.length ) {
+				data = jQuery.data( this[0], key );
+				data = dataAttr( this[0], key, data );
+			}
+
+			return data === undefined && parts[1] ?
+				this.data( parts[0] ) :
+				data;
+
+		} else {
+			return this.each(function() {
+				var $this = jQuery( this ),
+					args = [ parts[0], value ];
+
+				$this.triggerHandler( "setData" + parts[1] + "!", args );
+				jQuery.data( this, key, value );
+				$this.triggerHandler( "changeData" + parts[1] + "!", args );
+			});
+		}
+	},
+
+	removeData: function( key ) {
+		return this.each(function() {
+			jQuery.removeData( this, key );
+		});
+	}
+});
+
+function dataAttr( elem, key, data ) {
+	// If nothing was found internally, try to fetch any
+	// data from the HTML5 data-* attribute
+	if ( data === undefined && elem.nodeType === 1 ) {
+		name = "data-" + key.replace( rmultiDash, "$1-$2" ).toLowerCase();
+
+		data = elem.getAttribute( name );
+
+		if ( typeof data === "string" ) {
+			try {
+				data = data === "true" ? true :
+				data === "false" ? false :
+				data === "null" ? null :
+				!jQuery.isNaN( data ) ? parseFloat( data ) :
+					rbrace.test( data ) ? jQuery.parseJSON( data ) :
+					data;
+			} catch( e ) {}
+
+			// Make sure we set the data so it isn't changed later
+			jQuery.data( elem, key, data );
+
+		} else {
+			data = undefined;
+		}
+	}
+
+	return data;
+}
+
+// TODO: This is a hack for 1.5 ONLY to allow objects with a single toJSON
+// property to be considered empty objects; this property always exists in
+// order to make sure JSON.stringify does not expose internal metadata
+function isEmptyDataObject( obj ) {
+	for ( var name in obj ) {
+		if ( name !== "toJSON" ) {
+			return false;
+		}
+	}
+
+	return true;
+}
+
+
+
+
+function handleQueueMarkDefer( elem, type, src ) {
+	var deferDataKey = type + "defer",
+		queueDataKey = type + "queue",
+		markDataKey = type + "mark",
+		defer = jQuery.data( elem, deferDataKey, undefined, true );
+	if ( defer &&
+		( src === "queue" || !jQuery.data( elem, queueDataKey, undefined, true ) ) &&
+		( src === "mark" || !jQuery.data( elem, markDataKey, undefined, true ) ) ) {
+		// Give room for hard-coded callbacks to fire first
+		// and eventually mark/queue something else on the element
+		setTimeout( function() {
+			if ( !jQuery.data( elem, queueDataKey, undefined, true ) &&
+				!jQuery.data( elem, markDataKey, undefined, true ) ) {
+				jQuery.removeData( elem, deferDataKey, true );
+				defer.resolve();
+			}
+		}, 0 );
+	}
+}
+
+jQuery.extend({
+
+	_mark: function( elem, type ) {
+		if ( elem ) {
+			type = (type || "fx") + "mark";
+			jQuery.data( elem, type, (jQuery.data(elem,type,undefined,true) || 0) + 1, true );
+		}
+	},
+
+	_unmark: function( force, elem, type ) {
+		if ( force !== true ) {
+			type = elem;
+			elem = force;
+			force = false;
+		}
+		if ( elem ) {
+			type = type || "fx";
+			var key = type + "mark",
+				count = force ? 0 : ( (jQuery.data( elem, key, undefined, true) || 1 ) - 1 );
+			if ( count ) {
+				jQuery.data( elem, key, count, true );
+			} else {
+				jQuery.removeData( elem, key, true );
+				handleQueueMarkDefer( elem, type, "mark" );
+			}
+		}
+	},
+
+	queue: function( elem, type, data ) {
+		if ( elem ) {
+			type = (type || "fx") + "queue";
+			var q = jQuery.data( elem, type, undefined, true );
+			// Speed up dequeue by getting out quickly if this is just a lookup
+			if ( data ) {
+				if ( !q || jQuery.isArray(data) ) {
+					q = jQuery.data( elem, type, jQuery.makeArray(data), true );
+				} else {
+					q.push( data );
+				}
+			}
+			return q || [];
+		}
+	},
+
+	dequeue: function( elem, type ) {
+		type = type || "fx";
+
+		var queue = jQuery.queue( elem, type ),
+			fn = queue.shift(),
+			defer;
+
+		// 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);
+			});
+		}
+
+		if ( !queue.length ) {
+			jQuery.removeData( elem, type + "queue", true );
+			handleQueueMarkDefer( elem, type, "queue" );
+		}
+	}
+});
+
+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() {
+			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", [] );
+	},
+	// Get a promise resolved when queues of a certain type
+	// are emptied (fx is the type by default)
+	promise: function( type, object ) {
+		if ( typeof type !== "string" ) {
+			object = type;
+			type = undefined;
+		}
+		type = type || "fx";
+		var defer = jQuery.Deferred(),
+			elements = this,
+			i = elements.length,
+			count = 1,
+			deferDataKey = type + "defer",
+			queueDataKey = type + "queue",
+			markDataKey = type + "mark";
+		function resolve() {
+			if ( !( --count ) ) {
+				defer.resolveWith( elements, [ elements ] );
+			}
+		}
+		while( i-- ) {
+			if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
+					( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
+						jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
+					jQuery.data( elements[ i ], deferDataKey, jQuery._Deferred(), true ) )) {
+				count++;
+				tmp.done( resolve );
+			}
+		}
+		resolve();
+		return defer.promise();
+	}
+});
+
+
+
+
+var rclass = /[\n\t\r]/g,
+	rspace = /\s+/,
+	rreturn = /\r/g,
+	rtype = /^(?:button|input)$/i,
+	rfocusable = /^(?:button|input|object|select|textarea)$/i,
+	rclickable = /^a(?:rea)?$/i,
+	rspecial = /^(?:data-|aria-)/,
+	rinvalidChar = /\:/,
+	formHook;
+
+jQuery.fn.extend({
+	attr: function( name, value ) {
+		return jQuery.access( this, name, value, true, jQuery.attr );
+	},
+
+	removeAttr: function( name ) {
+		return this.each(function() {
+			jQuery.removeAttr( this, name );
+		});
+	},
+	
+	prop: function( name, value ) {
+		return jQuery.access( this, name, value, true, jQuery.prop );
+	},
+	
+	removeProp: function( name ) {
+		return this.each(function() {
+			// try/catch handles cases where IE balks (such as removing a property on window)
+			try {
+				this[ name ] = undefined;
+				delete this[ name ];
+			} catch( e ) {}
+		});
+	},
+
+	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 ) {
+		var hooks, ret,
+			elem = this[0];
+		
+		if ( !arguments.length ) {
+			if ( elem ) {
+				hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];
+
+				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+					return ret;
+				}
+
+				return (elem.value || "").replace(rreturn, "");
+			}
+
+			return undefined;
+		}
+
+		var isFunction = jQuery.isFunction( value );
+
+		return this.each(function( i ) {
+			var self = jQuery(this), val;
+
+			if ( this.nodeType !== 1 ) {
+				return;
+			}
+
+			if ( isFunction ) {
+				val = value.call( this, i, self.val() );
+			} else {
+				val = value;
+			}
+
+			// Treat null/undefined as ""; convert numbers to string
+			if ( val == null ) {
+				val = "";
+			} else if ( typeof val === "number" ) {
+				val += "";
+			} else if ( jQuery.isArray( val ) ) {
+				val = jQuery.map(val, function ( value ) {
+					return value == null ? "" : value + "";
+				});
+			}
+
+			hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];
+
+			// If set returns undefined, fall back to normal setting
+			if ( !hooks || ("set" in hooks && hooks.set( this, val, "value" ) === undefined) ) {
+				this.value = val;
+			}
+		});
+	}
+});
+
+jQuery.extend({
+	valHooks: {
+		option: {
+			get: function( elem ) {
+				// attributes.value is undefined in Blackberry 4.7 but
+				// uses .value. See #6932
+				var val = elem.attributes.value;
+				return !val || val.specified ? elem.value : elem.text;
+			}
+		},
+		select: {
+			get: function( elem ) {
+				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 ];
+
+					// Don't return options that are disabled or in a disabled optgroup
+					if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
+							(!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
+
+						// Get the specific 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 );
+					}
+				}
+
+				// Fixes Bug #2551 -- select.val() broken in IE after form.reset()
+				if ( one && !values.length && options.length ) {
+					return jQuery( options[ index ] ).val();
+				}
+
+				return values;
+			},
+
+			set: function( elem, value ) {
+				var values = jQuery.makeArray( value );
+
+				jQuery(elem).find("option").each(function() {
+					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+				});
+
+				if ( !values.length ) {
+					elem.selectedIndex = -1;
+				}
+				return values;
+			}
+		}
+	},
+
+	attrFn: {
+		val: true,
+		css: true,
+		html: true,
+		text: true,
+		data: true,
+		width: true,
+		height: true,
+		offset: true
+	},
+	
+	attrFix: {
+		// Always normalize to ensure hook usage
+		tabindex: "tabIndex",
+		readonly: "readOnly"
+	},
+	
+	attr: function( elem, name, value, pass ) {
+		var nType = elem.nodeType;
+		
+		// don't get/set attributes on text, comment and attribute nodes
+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+			return undefined;
+		}
+
+		if ( pass && name in jQuery.attrFn ) {
+			return jQuery( elem )[ name ]( value );
+		}
+		
+		var ret, hooks,
+			notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+		
+		// Normalize the name if needed
+		name = notxml && jQuery.attrFix[ name ] || name;
+
+		// Get the appropriate hook, or the formHook
+		// if getSetAttribute is not supported and we have form objects in IE6/7
+		hooks = jQuery.attrHooks[ name ] ||
+			( formHook && (jQuery.nodeName( elem, "form" ) || rinvalidChar.test( name )) ?
+				formHook :
+				undefined );
+
+		if ( value !== undefined ) {
+
+			if ( value === null || (value === false && !rspecial.test( name )) ) {
+				jQuery.removeAttr( elem, name );
+				return undefined;
+
+			} else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
+				return ret;
+
+			} else {
+
+				// Set boolean attributes to the same name
+				if ( value === true && !rspecial.test( name ) ) {
+					value = name;
+				}
+
+				elem.setAttribute( name, "" + value );
+				return value;
+			}
+
+		} else {
+
+			if ( hooks && "get" in hooks && notxml ) {
+				return hooks.get( elem, name );
+
+			} else {
+
+				ret = elem.getAttribute( name );
+
+				// Non-existent attributes return null, we normalize to undefined
+				return ret === null ?
+					undefined :
+					ret;
+			}
+		}
+	},
+	
+	removeAttr: function( elem, name ) {
+		if ( elem.nodeType === 1 ) {
+			name = jQuery.attrFix[ name ] || name;
+		
+			if ( jQuery.support.getSetAttribute ) {
+				// Use removeAttribute in browsers that support it
+				elem.removeAttribute( name );
+			} else {
+				jQuery.attr( elem, name, "" );
+				elem.removeAttributeNode( elem.getAttributeNode( name ) );
+			}
+		}
+	},
+
+	attrHooks: {
+		type: {
+			set: function( elem, value ) {
+				// We can't allow the type property to be changed (since it causes problems in IE)
+				if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
+					jQuery.error( "type property can't be changed" );
+				} else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+					// Setting the type on a radio button after the value resets the value in IE6-9
+					// Reset value to it's default in case type is set after value
+					// This is for element creation
+					var val = elem.getAttribute("value");
+					elem.setAttribute( "type", value );
+					if ( val ) {
+						elem.value = val;
+					}
+					return value;
+				}
+			}
+		},
+		tabIndex: {
+			get: function( elem ) {
+				// 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/
+				var attributeNode = elem.getAttributeNode("tabIndex");
+
+				return attributeNode && attributeNode.specified ?
+					parseInt( attributeNode.value, 10 ) :
+					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+						0 :
+						undefined;
+			}
+		}
+	},
+	
+	propFix: {},
+	
+	prop: function( elem, name, value ) {
+		var nType = elem.nodeType;
+		
+		// don't get/set properties on text, comment and attribute nodes
+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+			return undefined;
+		}
+		
+		var ret, hooks,
+			notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+		
+		// Try to normalize/fix the name
+		name = notxml && jQuery.propFix[ name ] || name;
+		
+		hooks = jQuery.propHooks[ name ];
+		
+		if ( value !== undefined ) {
+			if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+				return ret;
+			
+			} else {
+				return (elem[ name ] = value);
+			}
+		
+		} else {
+			if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== undefined ) {
+				return ret;
+				
+			} else {
+				return elem[ name ];
+			}
+		}
+	},
+	
+	propHooks: {}
+});
+
+// IE6/7 do not support getting/setting some attributes with get/setAttribute
+if ( !jQuery.support.getSetAttribute ) {
+	jQuery.attrFix = jQuery.extend( jQuery.attrFix, {
+		"for": "htmlFor",
+		"class": "className",
+		maxlength: "maxLength",
+		cellspacing: "cellSpacing",
+		cellpadding: "cellPadding",
+		rowspan: "rowSpan",
+		colspan: "colSpan",
+		usemap: "useMap",
+		frameborder: "frameBorder"
+	});
+	
+	// Use this for any attribute on a form in IE6/7
+	formHook = jQuery.attrHooks.name = jQuery.attrHooks.value = jQuery.valHooks.button = {
+		get: function( elem, name ) {
+			var ret;
+			if ( name === "value" && !jQuery.nodeName( elem, "button" ) ) {
+				return elem.getAttribute( name );
+			}
+			ret = elem.getAttributeNode( name );
+			// Return undefined if not specified instead of empty string
+			return ret && ret.specified ?
+				ret.nodeValue :
+				undefined;
+		},
+		set: function( elem, value, name ) {
+			// Check form objects in IE (multiple bugs related)
+			// Only use nodeValue if the attribute node exists on the form
+			var ret = elem.getAttributeNode( name );
+			if ( ret ) {
+				ret.nodeValue = value;
+				return value;
+			}
+		}
+	};
+
+	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
+	// This is for removals
+	jQuery.each([ "width", "height" ], function( i, name ) {
+		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+			set: function( elem, value ) {
+				if ( value === "" ) {
+					elem.setAttribute( name, "auto" );
+					return value;
+				}
+			}
+		});
+	});
+}
+
+
+// Some attributes require a special call on IE
+if ( !jQuery.support.hrefNormalized ) {
+	jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
+		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+			get: function( elem ) {
+				var ret = elem.getAttribute( name, 2 );
+				return ret === null ? undefined : ret;
+			}
+		});
+	});
+}
+
+if ( !jQuery.support.style ) {
+	jQuery.attrHooks.style = {
+		get: function( elem ) {
+			// Return undefined in the case of empty string
+			// Normalize to lowercase since IE uppercases css property names
+			return elem.style.cssText.toLowerCase() || undefined;
+		},
+		set: function( elem, value ) {
+			return (elem.style.cssText = "" + value);
+		}
+	};
+}
+
+// Safari mis-reports the default selected property of an option
+// Accessing the parent's selectedIndex property fixes it
+if ( !jQuery.support.optSelected ) {
+	jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
+		get: function( elem ) {
+			var parent = elem.parentNode;
+
+			if ( parent ) {
+				parent.selectedIndex;
+
+				// Make sure that it also works with optgroups, see #5701
+				if ( parent.parentNode ) {
+					parent.parentNode.selectedIndex;
+				}
+			}
+		}
+	});
+}
+
+// Radios and checkboxes getter/setter
+if ( !jQuery.support.checkOn ) {
+	jQuery.each([ "radio", "checkbox" ], function() {
+		jQuery.valHooks[ this ] = {
+			get: function( elem ) {
+				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+				return elem.getAttribute("value") === null ? "on" : elem.value;
+			}
+		};
+	});
+}
+jQuery.each([ "radio", "checkbox" ], function() {
+	jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
+		set: function( elem, value ) {
+			if ( jQuery.isArray( value ) ) {
+				return (elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0);
+			}
+		}
+	});
+});
+
+
+
+
+var hasOwn = Object.prototype.hasOwnProperty,
+	rnamespaces = /\.(.*)$/,
+	rformElems = /^(?:textarea|input|select)$/i,
+	rperiod = /\./g,
+	rspaces = / /g,
+	rescape = /[^\w\s.|`]/g,
+	fcleanup = function( nm ) {
+		return nm.replace(rescape, "\\$&");
+	};
+
+/*
+ * 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;
+		}
+
+		if ( handler === false ) {
+			handler = returnFalse;
+		} else if ( !handler ) {
+			// Fixes bug #7229. Fix recommended by jdalton
+			return;
+		}
+
+		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,
+			eventHandle = elemData.handle;
+
+		if ( !events ) {
+			elemData.events = events = {};
+		}
+
+		if ( !eventHandle ) {
+			elemData.handle = eventHandle = function( e ) {
+				// Discard the second event of a jQuery.event.trigger() and
+				// when an event is called after a page has unloaded
+				return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
+					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;
+			if ( !handleObj.guid ) {
+				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 event optimization
+			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;
+		}
+
+		if ( handler === false ) {
+			handler = returnFalse;
+		}
+
+		var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
+			elemData = jQuery.hasData( elem ) && 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 ( 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 ( 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 ) {
+					jQuery.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, undefined, true );
+			}
+		}
+	},
+	
+	// Events that are safe to short-circuit if no handlers are attached.
+	// Native DOM events should not be added, they may have inline handlers.
+	customEvent: {
+		"getData": true,
+		"setData": true,
+		"changeData": true
+	},
+
+	trigger: function( event, data, elem, onlyHandlers ) {
+		// Event object or event type
+		var type = event.type || event,
+			namespaces = [],
+			exclusive;
+
+		if ( type.indexOf("!") >= 0 ) {
+			// Exclusive events trigger only for the exact event (no namespaces)
+			type = type.slice(0, -1);
+			exclusive = true;
+		}
+
+		if ( type.indexOf(".") >= 0 ) {
+			// Namespaced trigger; create a regexp to match event type in handle()
+			namespaces = type.split(".");
+			type = namespaces.shift();
+			namespaces.sort();
+		}
+
+		if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
+			// No jQuery handlers for this event type, and it can't have inline handlers
+			return;
+		}
+
+		// Caller can pass in an Event, Object, or just an event type string
+		event = typeof event === "object" ?
+			// jQuery.Event object
+			event[ jQuery.expando ] ? event :
+			// Object literal
+			new jQuery.Event( type, event ) :
+			// Just the event type (string)
+			new jQuery.Event( type );
+
+		event.type = type;
+		event.exclusive = exclusive;
+		event.namespace = namespaces.join(".");
+		event.namespace_re = new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)");
+		
+		// triggerHandler() and global events don't bubble or run the default action
+		if ( onlyHandlers || !elem ) {
+			event.preventDefault();
+			event.stopPropagation();
+		}
+
+		// Handle a global trigger
+		if ( !elem ) {
+			// TODO: Stop taunting the data cache; remove global events and always attach to document
+			jQuery.each( jQuery.cache, function() {
+				// internalKey variable is just used to make it easier to find
+				// and potentially change this stuff later; currently it just
+				// points to jQuery.expando
+				var internalKey = jQuery.expando,
+					internalCache = this[ internalKey ];
+				if ( internalCache && internalCache.events && internalCache.events[ type ] ) {
+					jQuery.event.trigger( event, data, internalCache.handle.elem );
+				}
+			});
+			return;
+		}
+
+		// Don't do events on text and comment nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		// Clean up the event in case it is being reused
+		event.result = undefined;
+		event.target = elem;
+
+		// Clone any incoming data and prepend the event, creating the handler arg list
+		data = data ? jQuery.makeArray( data ) : [];
+		data.unshift( event );
+
+		var cur = elem,
+			// IE doesn't like method names with a colon (#3533, #8272)
+			ontype = type.indexOf(":") < 0 ? "on" + type : "";
+
+		// Fire event on the current element, then bubble up the DOM tree
+		do {
+			var handle = jQuery._data( cur, "handle" );
+
+			event.currentTarget = cur;
+			if ( handle ) {
+				handle.apply( cur, data );
+			}
+
+			// Trigger an inline bound script
+			if ( ontype && jQuery.acceptData( cur ) && cur[ ontype ] && cur[ ontype ].apply( cur, data ) === false ) {
+				event.result = false;
+				event.preventDefault();
+			}
+
+			// Bubble up to document, then to window
+			cur = cur.parentNode || cur.ownerDocument || cur === event.target.ownerDocument && window;
+		} while ( cur && !event.isPropagationStopped() );
+
+		// If nobody prevented the default action, do it now
+		if ( !event.isDefaultPrevented() ) {
+			var old,
+				special = jQuery.event.special[ type ] || {};
+
+			if ( (!special._default || special._default.call( elem.ownerDocument, event ) === false) &&
+				!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
+
+				// Call a native DOM method on the target with the same name name as the event.
+				// Can't use an .isFunction)() check here because IE6/7 fails that test.
+				// IE<9 dies on focus to hidden element (#1486), may want to revisit a try/catch.
+				try {
+					if ( ontype && elem[ type ] ) {
+						// Don't re-trigger an onFOO event when we call its FOO() method
+						old = elem[ ontype ];
+
+						if ( old ) {
+							elem[ ontype ] = null;
+						}
+
+						jQuery.event.triggered = type;
+						elem[ type ]();
+					}
+				} catch ( ieError ) {}
+
+				if ( old ) {
+					elem[ ontype ] = old;
+				}
+
+				jQuery.event.triggered = undefined;
+			}
+		}
+		
+		return event.result;
+	},
+
+	handle: function( event ) {
+		event = jQuery.event.fix( event || window.event );
+		// Snapshot the handlers list since a called handler may add/remove events.
+		var handlers = ((jQuery._data( this, "events" ) || {})[ event.type ] || []).slice(0),
+			run_all = !event.exclusive && !event.namespace,
+			args = Array.prototype.slice.call( arguments, 0 );
+
+		// Use the fix-ed Event rather than the (read-only) native event
+		args[0] = event;
+		event.currentTarget = this;
+
+		for ( var j = 0, l = handlers.length; j < l; j++ ) {
+			var handleObj = handlers[ j ];
+
+			// Triggered event must 1) be non-exclusive and have no namespace, or
+			// 2) have namespace(s) a subset or equal to those in the bound event.
+			if ( run_all || event.namespace_re.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, args );
+
+				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 pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
+
+	fix: function( event ) {
+		if ( event[ jQuery.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 ) {
+			// Fixes #1925 where srcElement might not be defined either
+			event.target = event.srcElement || document;
+		}
+
+		// 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 eventDocument = event.target.ownerDocument || document,
+				doc = eventDocument.documentElement,
+				body = eventDocument.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 == null && (event.charCode != null || event.keyCode != null) ) {
+			event.which = event.charCode != null ? 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,
+					liveConvert( handleObj.origType, handleObj.selector ),
+					jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) );
+			},
+
+			remove: function( handleObj ) {
+				jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj );
+			}
+		},
+
+		beforeunload: {
+			setup: function( data, namespaces, eventHandle ) {
+				// We only want to do this special case on windows
+				if ( jQuery.isWindow( this ) ) {
+					this.onbeforeunload = eventHandle;
+				}
+			},
+
+			teardown: function( namespaces, eventHandle ) {
+				if ( this.onbeforeunload === eventHandle ) {
+					this.onbeforeunload = null;
+				}
+			}
+		}
+	}
+};
+
+jQuery.removeEvent = document.removeEventListener ?
+	function( elem, type, handle ) {
+		if ( elem.removeEventListener ) {
+			elem.removeEventListener( type, handle, false );
+		}
+	} :
+	function( elem, type, handle ) {
+		if ( elem.detachEvent ) {
+			elem.detachEvent( "on" + type, handle );
+		}
+	};
+
+jQuery.Event = function( src, props ) {
+	// Allow instantiation without the 'new' keyword
+	if ( !this.preventDefault ) {
+		return new jQuery.Event( src, props );
+	}
+
+	// Event object
+	if ( src && src.type ) {
+		this.originalEvent = src;
+		this.type = src.type;
+
+		// Events bubbling up the document may have been marked as prevented
+		// by a handler lower down the tree; reflect the correct value.
+		this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false ||
+			src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse;
+
+	// Event type
+	} else {
+		this.type = src;
+	}
+
+	// Put explicitly provided properties onto the event object
+	if ( props ) {
+		jQuery.extend( this, props );
+	}
+
+	// timeStamp is buggy for some events on Firefox(#3843)
+	// So we won't rely on the native value
+	this.timeStamp = jQuery.now();
+
+	// Mark it as fixed
+	this[ jQuery.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)
+		} else {
+			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 {
+
+		// Chrome does something similar, the parentNode property
+		// can be accessed but is null.
+		if ( parent && parent !== document && !parent.parentNode ) {
+			return;
+		}
+		// 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 ( !jQuery.nodeName( this, "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 ) {
+						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 ) {
+						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 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 ( jQuery.nodeName( elem, "select" ) ) {
+			val = elem.selectedIndex;
+		}
+
+		return val;
+	},
+
+	testChange = function testChange( e ) {
+		var elem = e.target, data, val;
+
+		if ( !rformElems.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";
+			e.liveFired = undefined;
+			jQuery.event.trigger( e, arguments[1], elem );
+		}
+	};
+
+	jQuery.event.special.change = {
+		filters: {
+			focusout: testChange,
+
+			beforedeactivate: testChange,
+
+			click: function( e ) {
+				var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";
+
+				if ( type === "radio" || type === "checkbox" || jQuery.nodeName( elem, "select" ) ) {
+					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 = jQuery.nodeName( elem, "input" ) ? elem.type : "";
+
+				if ( (e.keyCode === 13 && !jQuery.nodeName( elem, "textarea" ) ) ||
+					(e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||
+					type === "select-multiple" ) {
+					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
+			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 rformElems.test( this.nodeName );
+		},
+
+		teardown: function( namespaces ) {
+			jQuery.event.remove( this, ".specialChange" );
+
+			return rformElems.test( this.nodeName );
+		}
+	};
+
+	changeFilters = jQuery.event.special.change.filters;
+
+	// Handle when the input is .focus()'d
+	changeFilters.focus = changeFilters.beforeactivate;
+}
+
+function trigger( type, elem, args ) {
+	// Piggyback on a donor event to simulate a different one.
+	// Fake originalEvent to avoid donor's stopPropagation, but if the
+	// simulated event prevents default then we do the same on the donor.
+	// Don't pass args or remember liveFired; they apply to the donor event.
+	var event = jQuery.extend( {}, args[ 0 ] );
+	event.type = type;
+	event.originalEvent = {};
+	event.liveFired = undefined;
+	jQuery.event.handle.call( elem, event );
+	if ( event.isDefaultPrevented() ) {
+		args[ 0 ].preventDefault();
+	}
+}
+
+// Create "bubbling" focus and blur events
+if ( !jQuery.support.focusinBubbles ) {
+	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+		// Attach a single capturing handler while someone wants focusin/focusout
+		var attaches = 0;
+
+		jQuery.event.special[ fix ] = {
+			setup: function() {
+				if ( attaches++ === 0 ) {
+					document.addEventListener( orig, handler, true );
+				}
+			},
+			teardown: function() {
+				if ( --attaches === 0 ) {
+					document.removeEventListener( orig, handler, true );
+				}
+			}
+		};
+
+		function handler( donor ) {
+			// Donor event is always a native one; fix it and switch its type.
+			// Let focusin/out handler cancel the donor focus/blur event.
+			var e = jQuery.event.fix( donor );
+			e.type = fix;
+			e.originalEvent = {};
+			jQuery.event.trigger( e, null, e.target );
+			if ( e.isDefaultPrevented() ) {
+				donor.preventDefault();
+			}
+		}
+	});
+}
+
+jQuery.each(["bind", "one"], function( i, name ) {
+	jQuery.fn[ name ] = function( type, data, fn ) {
+		var handler;
+
+		// Handle object literals
+		if ( typeof type === "object" ) {
+			for ( var key in type ) {
+				this[ name ](key, data, type[key], fn);
+			}
+			return this;
+		}
+
+		if ( arguments.length === 2 || data === false ) {
+			fn = data;
+			data = undefined;
+		}
+
+		if ( name === "one" ) {
+			handler = function( event ) {
+				jQuery( this ).unbind( event, handler );
+				return fn.apply( this, arguments );
+			};
+			handler.guid = fn.guid || jQuery.guid++;
+		} else {
+			handler = 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] ) {
+			return jQuery.event.trigger( type, data, this[0], true );
+		}
+	},
+
+	toggle: function( fn ) {
+		// Save reference to arguments for access in closure
+		var args = arguments,
+			guid = fn.guid || jQuery.guid++,
+			i = 0,
+			toggler = 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;
+			};
+
+		// link all the functions, so any of them can unbind this click handler
+		toggler.guid = guid;
+		while ( i < args.length ) {
+			args[ i++ ].guid = guid;
+		}
+
+		return this.click( toggler );
+	},
+
+	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 ( typeof types === "object" && !types.preventDefault ) {
+			for ( var key in types ) {
+				context[ name ]( key, data, types[key], selector );
+			}
+
+			return this;
+		}
+
+		if ( name === "die" && !types &&
+					origSelector && origSelector.charAt(0) === "." ) {
+
+			context.unbind( origSelector );
+
+			return this;
+		}
+
+		if ( data === false || jQuery.isFunction( data ) ) {
+			fn = data || returnFalse;
+			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 ( liveMap[ type ] ) {
+				types.push( liveMap[ type ] + namespaces );
+				type = type + namespaces;
+
+			} else {
+				type = (liveMap[ type ] || type) + namespaces;
+			}
+
+			if ( name === "live" ) {
+				// bind live handler
+				for ( var j = 0, l = context.length; j < l; j++ ) {
+					jQuery.event.add( context[j], "live." + liveConvert( type, selector ),
+						{ data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
+				}
+
+			} else {
+				// unbind live handler
+				context.unbind( "live." + liveConvert( type, selector ), fn );
+			}
+		}
+
+		return this;
+	};
+});
+
+function liveHandler( event ) {
+	var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret,
+		elems = [],
+		selectors = [],
+		events = jQuery._data( this, "events" );
+
+	// Make sure we avoid non-left-click bubbling in Firefox (#3861) and disabled elements in IE (#6911)
+	if ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === "click" ) {
+		return;
+	}
+
+	if ( event.namespace ) {
+		namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)");
+	}
+
+	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++ ) {
+		close = match[i];
+
+		for ( j = 0; j < live.length; j++ ) {
+			handleObj = live[j];
+
+			if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) && !close.elem.disabled ) {
+				elem = close.elem;
+				related = null;
+
+				// Those two events require additional checking
+				if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
+					event.type = handleObj.preType;
+					related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
+
+					// Make sure not to accidentally match a child element with the same selector
+					if ( related && jQuery.contains( elem, related ) ) {
+						related = elem;
+					}
+				}
+
+				if ( !related || related !== elem ) {
+					elems.push({ elem: elem, handleObj: handleObj, level: close.level });
+				}
+			}
+		}
+	}
+
+	for ( i = 0, l = elems.length; i < l; i++ ) {
+		match = elems[i];
+
+		if ( maxLevel && match.level > maxLevel ) {
+			break;
+		}
+
+		event.currentTarget = match.elem;
+		event.data = match.handleObj.data;
+		event.handleObj = match.handleObj;
+
+		ret = match.handleObj.origHandler.apply( match.elem, arguments );
+
+		if ( ret === false || event.isPropagationStopped() ) {
+			maxLevel = match.level;
+
+			if ( ret === false ) {
+				stop = false;
+			}
+			if ( event.isImmediatePropagationStopped() ) {
+				break;
+			}
+		}
+	}
+
+	return stop;
+}
+
+function liveConvert( type, selector ) {
+	return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspaces, "&");
+}
+
+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( data, fn ) {
+		if ( fn == null ) {
+			fn = data;
+			data = null;
+		}
+
+		return arguments.length > 0 ?
+			this.bind( name, data, fn ) :
+			this.trigger( name );
+	};
+
+	if ( jQuery.attrFn ) {
+		jQuery.attrFn[ name ] = true;
+	}
+});
+
+
+
+/*!
+ * Sizzle CSS Selector Engine
+ *  Copyright 2011, 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,
+	rBackslash = /\\/g,
+	rNonWord = /\W/;
+
+// 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 || [];
+	context = context || document;
+
+	var origContext = context;
+
+	if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
+		return [];
+	}
+	
+	if ( !selector || typeof selector !== "string" ) {
+		return results;
+	}
+
+	var m, set, checkSet, extra, ret, cur, pop, i,
+		prune = true,
+		contextXML = Sizzle.isXML( context ),
+		parts = [],
+		soFar = selector;
+	
+	// Reset the position of the chunker regexp (start from head)
+	do {
+		chunker.exec( "" );
+		m = chunker.exec( soFar );
+
+		if ( m ) {
+			soFar = m[3];
+		
+			parts.push( m[1] );
+		
+			if ( m[2] ) {
+				extra = m[3];
+				break;
+			}
+		}
+	} while ( m );
+
+	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]) ) {
+
+			ret = Sizzle.find( parts.shift(), context, contextXML );
+			context = ret.expr ?
+				Sizzle.filter( ret.expr, ret.set )[0] :
+				ret.set[0];
+		}
+
+		if ( context ) {
+			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 ) {
+				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 ( i = 0; checkSet[i] != null; i++ ) {
+				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
+					results.push( set[i] );
+				}
+			}
+
+		} else {
+			for ( 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.matchesSelector = function( node, expr ) {
+	return Sizzle( expr, null, null, [node] ).length > 0;
+};
+
+Sizzle.find = function( expr, context, isXML ) {
+	var set;
+
+	if ( !expr ) {
+		return [];
+	}
+
+	for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
+		var match,
+			type = Expr.order[i];
+		
+		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( rBackslash, "" );
+				set = Expr.find[ type ]( match, context, isXML );
+
+				if ( set != null ) {
+					expr = expr.replace( Expr.match[ type ], "" );
+					break;
+				}
+			}
+		}
+	}
+
+	if ( !set ) {
+		set = typeof context.getElementsByTagName !== "undefined" ?
+			context.getElementsByTagName( "*" ) :
+			[];
+	}
+
+	return { set: set, expr: expr };
+};
+
+Sizzle.filter = function( expr, set, inplace, not ) {
+	var match, anyFound,
+		old = expr,
+		result = [],
+		curLoop = set,
+		isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
+
+	while ( expr && set.length ) {
+		for ( var type in Expr.filter ) {
+			if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
+				var found, item,
+					filter = Expr.filter[ type ],
+					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|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
+		TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
+		CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
+		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" );
+		},
+		type: function( elem ) {
+			return elem.getAttribute( "type" );
+		}
+	},
+
+	relative: {
+		"+": function(checkSet, part){
+			var isPartStr = typeof part === "string",
+				isTag = isPartStr && !rNonWord.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 elem,
+				isPartStr = typeof part === "string",
+				i = 0,
+				l = checkSet.length;
+
+			if ( isPartStr && !rNonWord.test( part ) ) {
+				part = part.toLowerCase();
+
+				for ( ; i < l; i++ ) {
+					elem = checkSet[i];
+
+					if ( elem ) {
+						var parent = elem.parentNode;
+						checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
+					}
+				}
+
+			} else {
+				for ( ; i < l; i++ ) {
+					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 nodeCheck,
+				doneName = done++,
+				checkFn = dirCheck;
+
+			if ( typeof part === "string" && !rNonWord.test( part ) ) {
+				part = part.toLowerCase();
+				nodeCheck = part;
+				checkFn = dirNodeCheck;
+			}
+
+			checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
+		},
+
+		"~": function( checkSet, part, isXML ) {
+			var nodeCheck,
+				doneName = done++,
+				checkFn = dirCheck;
+
+			if ( typeof part === "string" && !rNonWord.test( part ) ) {
+				part = part.toLowerCase();
+				nodeCheck = part;
+				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]);
+				// Check parentNode to catch when Blackberry 4.6 returns
+				// nodes that are no longer in the document #6963
+				return m && m.parentNode ? [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 ) {
+			if ( typeof context.getElementsByTagName !== "undefined" ) {
+				return context.getElementsByTagName( match[1] );
+			}
+		}
+	},
+	preFilter: {
+		CLASS: function( match, curLoop, inplace, result, not, isXML ) {
+			match = " " + match[1].replace( rBackslash, "" ) + " ";
+
+			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\r]/g, " ").indexOf(match) >= 0) ) {
+						if ( !inplace ) {
+							result.push( elem );
+						}
+
+					} else if ( inplace ) {
+						curLoop[i] = false;
+					}
+				}
+			}
+
+			return false;
+		},
+
+		ID: function( match ) {
+			return match[1].replace( rBackslash, "" );
+		},
+
+		TAG: function( match, curLoop ) {
+			return match[1].replace( rBackslash, "" ).toLowerCase();
+		},
+
+		CHILD: function( match ) {
+			if ( match[1] === "nth" ) {
+				if ( !match[2] ) {
+					Sizzle.error( match[0] );
+				}
+
+				match[2] = match[2].replace(/^\+|\s*/g, '');
+
+				// 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;
+			}
+			else if ( match[2] ) {
+				Sizzle.error( match[0] );
+			}
+
+			// TODO: Move to normal caching system
+			match[0] = done++;
+
+			return match;
+		},
+
+		ATTR: function( match, curLoop, inplace, result, not, isXML ) {
+			var name = match[1] = match[1].replace( rBackslash, "" );
+			
+			if ( !isXML && Expr.attrMap[name] ) {
+				match[1] = Expr.attrMap[name];
+			}
+
+			// Handle if an un-quoted value was used
+			match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
+
+			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
+			if ( elem.parentNode ) {
+				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 ) {
+			var attr = elem.getAttribute( "type" ), type = elem.type;
+			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) 
+			// use getAttribute instead to test this case
+			return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
+		},
+
+		radio: function( elem ) {
+			return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
+		},
+
+		checkbox: function( elem ) {
+			return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
+		},
+
+		file: function( elem ) {
+			return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
+		},
+
+		password: function( elem ) {
+			return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
+		},
+
+		submit: function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return (name === "input" || name === "button") && "submit" === elem.type;
+		},
+
+		image: function( elem ) {
+			return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
+		},
+
+		reset: function( elem ) {
+			return elem.nodeName.toLowerCase() === "input" && "reset" === elem.type;
+		},
+
+		button: function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return name === "input" && "button" === elem.type || name === "button";
+		},
+
+		input: function( elem ) {
+			return (/input|select|textarea|button/i).test( elem.nodeName );
+		},
+
+		focus: function( elem ) {
+			return elem === elem.ownerDocument.activeElement;
+		}
+	},
+	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 || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0;
+
+			} else if ( name === "not" ) {
+				var not = match[3];
+
+				for ( var j = 0, l = not.length; j < l; j++ ) {
+					if ( not[j] === elem ) {
+						return false;
+					}
+				}
+
+				return true;
+
+			} else {
+				Sizzle.error( 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,
+	fescape = function(all, num){
+		return "\\" + (num - 0 + 1);
+	};
+
+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, fescape) );
+}
+
+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 i = 0,
+			ret = results || [];
+
+		if ( toString.call(array) === "[object Array]" ) {
+			Array.prototype.push.apply( ret, array );
+
+		} else {
+			if ( typeof array.length === "number" ) {
+				for ( var l = array.length; i < l; i++ ) {
+					ret.push( array[i] );
+				}
+
+			} else {
+				for ( ; array[i]; i++ ) {
+					ret.push( array[i] );
+				}
+			}
+		}
+
+		return ret;
+	};
+}
+
+var sortOrder, siblingCheck;
+
+if ( document.documentElement.compareDocumentPosition ) {
+	sortOrder = function( a, b ) {
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
+			return a.compareDocumentPosition ? -1 : 1;
+		}
+
+		return a.compareDocumentPosition(b) & 4 ? -1 : 1;
+	};
+
+} else {
+	sortOrder = function( a, b ) {
+		var al, bl,
+			ap = [],
+			bp = [],
+			aup = a.parentNode,
+			bup = b.parentNode,
+			cur = aup;
+
+		// The nodes are identical, we can exit early
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+
+		// If the nodes are siblings (or identical) we can do a quick check
+		} else if ( aup === bup ) {
+			return siblingCheck( a, b );
+
+		// If no parents were found then the nodes are disconnected
+		} else if ( !aup ) {
+			return -1;
+
+		} else if ( !bup ) {
+			return 1;
+		}
+
+		// Otherwise they're somewhere else in the tree so we need
+		// to build up a full list of the parentNodes for comparison
+		while ( cur ) {
+			ap.unshift( cur );
+			cur = cur.parentNode;
+		}
+
+		cur = bup;
+
+		while ( cur ) {
+			bp.unshift( cur );
+			cur = cur.parentNode;
+		}
+
+		al = ap.length;
+		bl = bp.length;
+
+		// Start walking down the tree looking for a discrepancy
+		for ( var i = 0; i < al && i < bl; i++ ) {
+			if ( ap[i] !== bp[i] ) {
+				return siblingCheck( ap[i], bp[i] );
+			}
+		}
+
+		// We ended someplace up the tree so do a sibling check
+		return i === al ?
+			siblingCheck( a, bp[i], -1 ) :
+			siblingCheck( ap[i], b, 1 );
+	};
+
+	siblingCheck = function( a, b, ret ) {
+		if ( a === b ) {
+			return ret;
+		}
+
+		var cur = a.nextSibling;
+
+		while ( cur ) {
+			if ( cur === b ) {
+				return -1;
+			}
+
+			cur = cur.nextSibling;
+		}
+
+		return 1;
+	};
+}
+
+// Utility function for retreiving the text value of an array of DOM nodes
+Sizzle.getText = function( 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 += Sizzle.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(),
+		root = document.documentElement;
+
+	form.innerHTML = "<a name='" + id + "'/>";
+
+	// Inject it into the root element, check its status, and remove it quickly
+	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 );
+
+	// release memory in IE
+	root = form = null;
+})();
+
+(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 );
+		};
+	}
+
+	// release memory in IE
+	div = null;
+})();
+
+if ( document.querySelectorAll ) {
+	(function(){
+		var oldSizzle = Sizzle,
+			div = document.createElement("div"),
+			id = "__sizzle__";
+
+		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 && !Sizzle.isXML(context) ) {
+				// See if we find a selector to speed up
+				var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
+				
+				if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
+					// Speed-up: Sizzle("TAG")
+					if ( match[1] ) {
+						return makeArray( context.getElementsByTagName( query ), extra );
+					
+					// Speed-up: Sizzle(".CLASS")
+					} else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
+						return makeArray( context.getElementsByClassName( match[2] ), extra );
+					}
+				}
+				
+				if ( context.nodeType === 9 ) {
+					// Speed-up: Sizzle("body")
+					// The body element only exists once, optimize finding it
+					if ( query === "body" && context.body ) {
+						return makeArray( [ context.body ], extra );
+						
+					// Speed-up: Sizzle("#ID")
+					} else if ( match && match[3] ) {
+						var elem = context.getElementById( match[3] );
+
+						// Check parentNode to catch when Blackberry 4.6 returns
+						// nodes that are no longer in the document #6963
+						if ( elem && elem.parentNode ) {
+							// Handle the case where IE and Opera return items
+							// by name instead of ID
+							if ( elem.id === match[3] ) {
+								return makeArray( [ elem ], extra );
+							}
+							
+						} else {
+							return makeArray( [], extra );
+						}
+					}
+					
+					try {
+						return makeArray( context.querySelectorAll(query), extra );
+					} catch(qsaError) {}
+
+				// qSA works strangely on Element-rooted queries
+				// We can work around this by specifying an extra ID on the root
+				// and working up from there (Thanks to Andrew Dupont for the technique)
+				// IE 8 doesn't work on object elements
+				} else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+					var oldContext = context,
+						old = context.getAttribute( "id" ),
+						nid = old || id,
+						hasParent = context.parentNode,
+						relativeHierarchySelector = /^\s*[+~]/.test( query );
+
+					if ( !old ) {
+						context.setAttribute( "id", nid );
+					} else {
+						nid = nid.replace( /'/g, "\\$&" );
+					}
+					if ( relativeHierarchySelector && hasParent ) {
+						context = context.parentNode;
+					}
+
+					try {
+						if ( !relativeHierarchySelector || hasParent ) {
+							return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
+						}
+
+					} catch(pseudoError) {
+					} finally {
+						if ( !old ) {
+							oldContext.removeAttribute( "id" );
+						}
+					}
+				}
+			}
+		
+			return oldSizzle(query, context, extra, seed);
+		};
+
+		for ( var prop in oldSizzle ) {
+			Sizzle[ prop ] = oldSizzle[ prop ];
+		}
+
+		// release memory in IE
+		div = null;
+	})();
+}
+
+(function(){
+	var html = document.documentElement,
+		matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
+
+	if ( matches ) {
+		// Check to see if it's possible to do matchesSelector
+		// on a disconnected node (IE 9 fails this)
+		var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
+			pseudoWorks = false;
+
+		try {
+			// This should fail with an exception
+			// Gecko does not error, returns false instead
+			matches.call( document.documentElement, "[test!='']:sizzle" );
+	
+		} catch( pseudoError ) {
+			pseudoWorks = true;
+		}
+
+		Sizzle.matchesSelector = function( node, expr ) {
+			// Make sure that attribute selectors are quoted
+			expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
+
+			if ( !Sizzle.isXML( node ) ) {
+				try { 
+					if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
+						var ret = matches.call( node, expr );
+
+						// IE 9's matchesSelector returns false on disconnected nodes
+						if ( ret || !disconnectedMatch ||
+								// As well, disconnected nodes are said to be in a document
+								// fragment in IE 9, so check for that
+								node.document && node.document.nodeType !== 11 ) {
+							return ret;
+						}
+					}
+				} catch(e) {}
+			}
+
+			return Sizzle(expr, null, null, [node]).length > 0;
+		};
+	}
+})();
+
+(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]);
+		}
+	};
+
+	// release memory in IE
+	div = null;
+})();
+
+function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+		var elem = checkSet[i];
+
+		if ( elem ) {
+			var match = false;
+
+			elem = elem[dir];
+
+			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 ) {
+			var match = false;
+			
+			elem = elem[dir];
+
+			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;
+		}
+	}
+}
+
+if ( document.documentElement.contains ) {
+	Sizzle.contains = function( a, b ) {
+		return a !== b && (a.contains ? a.contains(b) : true);
+	};
+
+} else if ( document.documentElement.compareDocumentPosition ) {
+	Sizzle.contains = function( a, b ) {
+		return !!(a.compareDocumentPosition(b) & 16);
+	};
+
+} else {
+	Sizzle.contains = function() {
+		return false;
+	};
+}
+
+Sizzle.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 match,
+		tmpSet = [],
+		later = "",
+		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 = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+})();
+
+
+var runtil = /Until$/,
+	rparentsprev = /^(?:parents|prevUntil|prevAll)/,
+	// Note: This RegExp should be improved, or likely pulled from Sizzle
+	rmultiselector = /,/,
+	isSimple = /^.[^:#\[\.,]*$/,
+	slice = Array.prototype.slice,
+	POS = jQuery.expr.match.POS,
+	// methods guaranteed to produce a unique set when starting from a unique set
+	guaranteedUnique = {
+		children: true,
+		contents: true,
+		next: true,
+		prev: true
+	};
+
+jQuery.fn.extend({
+	find: function( selector ) {
+		var self = this,
+			i, l;
+
+		if ( typeof selector !== "string" ) {
+			return jQuery( selector ).filter(function() {
+				for ( i = 0, l = self.length; i < l; i++ ) {
+					if ( jQuery.contains( self[ i ], this ) ) {
+						return true;
+					}
+				}
+			});
+		}
+
+		var ret = this.pushStack( "", "find", selector ),
+			length, n, r;
+
+		for ( 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 ( n = length; n < ret.length; n++ ) {
+					for ( 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 && ( typeof selector === "string" ?
+			jQuery.filter( selector, this ).length > 0 :
+			this.filter( selector ).length > 0 );
+	},
+
+	closest: function( selectors, context ) {
+		var ret = [], i, l, cur = this[0];
+		
+		// Array
+		if ( jQuery.isArray( selectors ) ) {
+			var match, selector,
+				matches = {},
+				level = 1;
+
+			if ( cur && selectors.length ) {
+				for ( i = 0, l = selectors.length; i < l; i++ ) {
+					selector = selectors[i];
+
+					if ( !matches[ selector ] ) {
+						matches[ selector ] = 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, level: level });
+						}
+					}
+
+					cur = cur.parentNode;
+					level++;
+				}
+			}
+
+			return ret;
+		}
+
+		// String
+		var pos = POS.test( selectors ) || typeof selectors !== "string" ?
+				jQuery( selectors, context || this.context ) :
+				0;
+
+		for ( i = 0, l = this.length; i < l; i++ ) {
+			cur = this[i];
+
+			while ( cur ) {
+				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
+					ret.push( cur );
+					break;
+
+				} else {
+					cur = cur.parentNode;
+					if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
+						break;
+					}
+				}
+			}
+		}
+
+		ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
+
+		return this.pushStack( ret, "closest", selectors );
+	},
+
+	// 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 ) :
+				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : 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 ),
+			// The variable 'args' was introduced in
+			// https://github.com/jquery/jquery/commit/52a0238
+			// to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed.
+			// http://code.google.com/p/v8/issues/detail?id=1050
+			args = slice.call(arguments);
+
+		if ( !runtil.test( name ) ) {
+			selector = until;
+		}
+
+		if ( selector && typeof selector === "string" ) {
+			ret = jQuery.filter( selector, ret );
+		}
+
+		ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
+
+		if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
+			ret = ret.reverse();
+		}
+
+		return this.pushStack( ret, name, args.join(",") );
+	};
+});
+
+jQuery.extend({
+	filter: function( expr, elems, not ) {
+		if ( not ) {
+			expr = ":not(" + expr + ")";
+		}
+
+		return elems.length === 1 ?
+			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
+			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;
+	}
+});
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, keep ) {
+
+	// Can't pass null or undefined to indexOf in Firefox 4
+	// Set to 0 to skip string check
+	qualifier = qualifier || 0;
+
+	if ( jQuery.isFunction( qualifier ) ) {
+		return jQuery.grep(elements, function( elem, i ) {
+			var retVal = !!qualifier.call( elem, i, elem );
+			return retVal === 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;
+	});
+}
+
+
+
+
+var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
+	rleadingWhitespace = /^\s+/,
+	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
+	rtagName = /<([\w:]+)/,
+	rtbody = /<tbody/i,
+	rhtml = /<|&#?\w+;/,
+	rnocache = /<(?:script|object|embed|option|style)/i,
+	// checked="checked" or checked
+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+	rscriptType = /\/(java|ecma)script/i,
+	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( dataAndEvents, deepDataAndEvents ) {
+		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+		return this.map( function () {
+			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+		});
+	},
+
+	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, "<$1></$2>");
+
+			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 );
+
+				self.html( value.call(this, i, self.html()) );
+			});
+
+		} 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.length ?
+				this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
+				this;
+		}
+	},
+
+	detach: function( selector ) {
+		return this.remove( selector, true );
+	},
+
+	domManip: function( args, table, callback ) {
+		var results, first, fragment, parent,
+			value = args[0],
+			scripts = [];
+
+		// 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 = jQuery.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, lastIndex = l - 1; i < l; i++ ) {
+					callback.call(
+						table ?
+							root(this[i], first) :
+							this[i],
+						// Make sure that we do not leak memory by inadvertently discarding
+						// the original fragment (which might have attached data) instead of
+						// using it; in addition, use the original fragment object for the last
+						// item instead of first because it can end up being emptied incorrectly
+						// in certain situations (Bug #8070).
+						// Fragments from the fragment cache must always be cloned and never used
+						// in place.
+						results.cacheable || (l > 1 && i < lastIndex) ?
+							jQuery.clone( fragment, true, 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( src, dest ) {
+
+	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+		return;
+	}
+
+	var internalKey = jQuery.expando,
+		oldData = jQuery.data( src ),
+		curData = jQuery.data( dest, oldData );
+
+	// Switch to use the internal data object, if it exists, for the next
+	// stage of data copying
+	if ( (oldData = oldData[ internalKey ]) ) {
+		var events = oldData.events;
+				curData = curData[ internalKey ] = jQuery.extend({}, oldData);
+
+		if ( events ) {
+			delete curData.handle;
+			curData.events = {};
+
+			for ( var type in events ) {
+				for ( var i = 0, l = events[ type ].length; i < l; i++ ) {
+					jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );
+				}
+			}
+		}
+	}
+}
+
+function cloneFixAttributes( src, dest ) {
+	var nodeName;
+
+	// We do not need to do anything for non-Elements
+	if ( dest.nodeType !== 1 ) {
+		return;
+	}
+
+	// clearAttributes removes the attributes, which we don't want,
+	// but also removes the attachEvent events, which we *do* want
+	if ( dest.clearAttributes ) {
+		dest.clearAttributes();
+	}
+
+	// mergeAttributes, in contrast, only merges back on the
+	// original attributes, not the events
+	if ( dest.mergeAttributes ) {
+		dest.mergeAttributes( src );
+	}
+
+	nodeName = dest.nodeName.toLowerCase();
+
+	// IE6-8 fail to clone children inside object elements that use
+	// the proprietary classid attribute value (rather than the type
+	// attribute) to identify the type of content to display
+	if ( nodeName === "object" ) {
+		dest.outerHTML = src.outerHTML;
+
+	} else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
+		// IE6-8 fails to persist the checked state of a cloned checkbox
+		// or radio button. Worse, IE6-7 fail to give the cloned element
+		// a checked appearance if the defaultChecked value isn't also set
+		if ( src.checked ) {
+			dest.defaultChecked = dest.checked = src.checked;
+		}
+
+		// IE6-7 get confused and end up setting the value of a cloned
+		// checkbox/radio button to an empty string instead of "on"
+		if ( dest.value !== src.value ) {
+			dest.value = src.value;
+		}
+
+	// IE6-8 fails to return the selected option to the default selected
+	// state when cloning options
+	} else if ( nodeName === "option" ) {
+		dest.selected = src.defaultSelected;
+
+	// IE6-8 fails to set the defaultValue to the correct value when
+	// cloning other types of input fields
+	} else if ( nodeName === "input" || nodeName === "textarea" ) {
+		dest.defaultValue = src.defaultValue;
+	}
+
+	// Event data gets referenced instead of copied if the expando
+	// gets copied too
+	dest.removeAttribute( jQuery.expando );
+}
+
+jQuery.buildFragment = function( args, nodes, scripts ) {
+	var fragment, cacheable, cacheresults,
+		doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document);
+
+	// Only cache "small" (1/2 KB) HTML 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 &&
+		args[0].charAt(0) === "<" && !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
+
+		cacheable = true;
+
+		cacheresults = jQuery.fragments[ args[0] ];
+		if ( cacheresults && 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( insert[i] )[ original ]( elems );
+				ret = ret.concat( elems );
+			}
+
+			return this.pushStack( ret, name, insert.selector );
+		}
+	};
+});
+
+function getAll( elem ) {
+	if ( "getElementsByTagName" in elem ) {
+		return elem.getElementsByTagName( "*" );
+	
+	} else if ( "querySelectorAll" in elem ) {
+		return elem.querySelectorAll( "*" );
+
+	} else {
+		return [];
+	}
+}
+
+// Used in clean, fixes the defaultChecked property
+function fixDefaultChecked( elem ) {
+	if ( elem.type === "checkbox" || elem.type === "radio" ) {
+		elem.defaultChecked = elem.checked;
+	}
+}
+// Finds all inputs and passes them to fixDefaultChecked
+function findInputs( elem ) {
+	if ( jQuery.nodeName( elem, "input" ) ) {
+		fixDefaultChecked( elem );
+	} else if ( elem.getElementsByTagName ) {
+		jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
+	}
+}
+
+jQuery.extend({
+	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+		var clone = elem.cloneNode(true),
+				srcElements,
+				destElements,
+				i;
+
+		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
+				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
+			// IE copies events bound via attachEvent when using cloneNode.
+			// Calling detachEvent on the clone will also remove the events
+			// from the original. In order to get around this, we use some
+			// proprietary methods to clear the events. Thanks to MooTools
+			// guys for this hotness.
+
+			cloneFixAttributes( elem, clone );
+
+			// Using Sizzle here is crazy slow, so we use getElementsByTagName
+			// instead
+			srcElements = getAll( elem );
+			destElements = getAll( clone );
+
+			// Weird iteration because IE will replace the length property
+			// with an element if you are cloning the body and one of the
+			// elements on the page has a name or id of "length"
+			for ( i = 0; srcElements[i]; ++i ) {
+				cloneFixAttributes( srcElements[i], destElements[i] );
+			}
+		}
+
+		// Copy the events from the original to the clone
+		if ( dataAndEvents ) {
+			cloneCopyEvent( elem, clone );
+
+			if ( deepDataAndEvents ) {
+				srcElements = getAll( elem );
+				destElements = getAll( clone );
+
+				for ( i = 0; srcElements[i]; ++i ) {
+					cloneCopyEvent( srcElements[i], destElements[i] );
+				}
+			}
+		}
+
+		// Return the cloned set
+		return clone;
+	},
+
+	clean: function( elems, context, fragment, scripts ) {
+		var checkScriptType;
+
+		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" ) {
+				if ( !rhtml.test( elem ) ) {
+					elem = context.createTextNode( elem );
+				} else {
+					// Fix "XHTML"-style tags in all browsers
+					elem = elem.replace(rxhtmlTag, "<$1></$2>");
+
+					// 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;
+				}
+			}
+
+			// Resets defaultChecked for any radios and checkboxes
+			// about to be appended to the DOM in IE 6/7 (#8060)
+			var len;
+			if ( !jQuery.support.appendChecked ) {
+				if ( elem[0] && typeof (len = elem.length) === "number" ) {
+					for ( i = 0; i < len; i++ ) {
+						findInputs( elem[i] );
+					}
+				} else {
+					findInputs( elem );
+				}
+			}
+
+			if ( elem.nodeType ) {
+				ret.push( elem );
+			} else {
+				ret = jQuery.merge( ret, elem );
+			}
+		}
+
+		if ( fragment ) {
+			checkScriptType = function( elem ) {
+				return !elem.type || rscriptType.test( elem.type );
+			};
+			for ( 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 ) {
+						var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType );
+
+						ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
+					}
+					fragment.appendChild( ret[i] );
+				}
+			}
+		}
+
+		return ret;
+	},
+
+	cleanData: function( elems ) {
+		var data, id, cache = jQuery.cache, internalKey = jQuery.expando, special = jQuery.event.special,
+			deleteExpando = jQuery.support.deleteExpando;
+
+		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+			if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
+				continue;
+			}
+
+			id = elem[ jQuery.expando ];
+
+			if ( id ) {
+				data = cache[ id ] && cache[ id ][ internalKey ];
+
+				if ( data && data.events ) {
+					for ( var type in data.events ) {
+						if ( special[ type ] ) {
+							jQuery.event.remove( elem, type );
+
+						// This is a shortcut to avoid jQuery.event.remove's overhead
+						} else {
+							jQuery.removeEvent( elem, type, data.handle );
+						}
+					}
+
+					// Null the DOM reference to avoid IE6/7/8 leak (#7054)
+					if ( data.handle ) {
+						data.handle.elem = null;
+					}
+				}
+
+				if ( deleteExpando ) {
+					delete elem[ jQuery.expando ];
+
+				} else if ( elem.removeAttribute ) {
+					elem.removeAttribute( jQuery.expando );
+				}
+
+				delete cache[ id ];
+			}
+		}
+	}
+});
+
+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 );
+	}
+}
+
+
+
+
+var ralpha = /alpha\([^)]*\)/i,
+	ropacity = /opacity=([^)]*)/,
+	rdashAlpha = /-([a-z])/ig,
+	// fixed for IE9, see #8346
+	rupper = /([A-Z]|^ms)/g,
+	rnumpx = /^-?\d+(?:px)?$/i,
+	rnum = /^-?\d/,
+	rrelNum = /^[+\-]=/,
+	rrelNumFilter = /[^+\-\.\de]+/g,
+
+	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+	cssWidth = [ "Left", "Right" ],
+	cssHeight = [ "Top", "Bottom" ],
+	curCSS,
+
+	getComputedStyle,
+	currentStyle,
+
+	fcamelCase = function( all, letter ) {
+		return letter.toUpperCase();
+	};
+
+jQuery.fn.css = function( name, value ) {
+	// Setting 'undefined' is a no-op
+	if ( arguments.length === 2 && value === undefined ) {
+		return this;
+	}
+
+	return jQuery.access( this, name, value, true, function( elem, name, value ) {
+		return value !== undefined ?
+			jQuery.style( elem, name, value ) :
+			jQuery.css( elem, name );
+	});
+};
+
+jQuery.extend({
+	// Add in style property hooks for overriding the default
+	// behavior of getting and setting a style property
+	cssHooks: {
+		opacity: {
+			get: function( elem, computed ) {
+				if ( computed ) {
+					// We should always get a number back from opacity
+					var ret = curCSS( elem, "opacity", "opacity" );
+					return ret === "" ? "1" : ret;
+
+				} else {
+					return elem.style.opacity;
+				}
+			}
+		}
+	},
+
+	// Exclude the following css properties to add px
+	cssNumber: {
+		"zIndex": true,
+		"fontWeight": true,
+		"opacity": true,
+		"zoom": true,
+		"lineHeight": true,
+		"widows": true,
+		"orphans": true
+	},
+
+	// Add in properties whose names you wish to fix before
+	// setting or getting the value
+	cssProps: {
+		// normalize float css property
+		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
+	},
+
+	// Get and set the style property on a DOM Node
+	style: function( elem, name, value, extra ) {
+		// Don't set styles on text and comment nodes
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+			return;
+		}
+
+		// Make sure that we're working with the right name
+		var ret, type, origName = jQuery.camelCase( name ),
+			style = elem.style, hooks = jQuery.cssHooks[ origName ];
+
+		name = jQuery.cssProps[ origName ] || origName;
+
+		// Check if we're setting a value
+		if ( value !== undefined ) {
+			type = typeof value;
+
+			// Make sure that NaN and null values aren't set. See: #7116
+			if ( type === "number" && isNaN( value ) || value == null ) {
+				return;
+			}
+
+			// convert relative number strings (+= or -=) to relative numbers. #7345
+			if ( type === "string" && rrelNum.test( value ) ) {
+				value = +value.replace( rrelNumFilter, "" ) + parseFloat( jQuery.css( elem, name ) );
+			}
+
+			// If a number was passed in, add 'px' to the (except for certain CSS properties)
+			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+				value += "px";
+			}
+
+			// If a hook was provided, use that value, otherwise just set the specified value
+			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
+				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
+				// Fixes bug #5509
+				try {
+					style[ name ] = value;
+				} catch(e) {}
+			}
+
+		} else {
+			// If a hook was provided get the non-computed value from there
+			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+				return ret;
+			}
+
+			// Otherwise just get the value from the style object
+			return style[ name ];
+		}
+	},
+
+	css: function( elem, name, extra ) {
+		var ret, hooks;
+
+		// Make sure that we're working with the right name
+		name = jQuery.camelCase( name );
+		hooks = jQuery.cssHooks[ name ];
+		name = jQuery.cssProps[ name ] || name;
+
+		// cssFloat needs a special treatment
+		if ( name === "cssFloat" ) {
+			name = "float";
+		}
+
+		// If a hook was provided get the computed value from there
+		if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
+			return ret;
+
+		// Otherwise, if a way to get the computed value exists, use that
+		} else if ( curCSS ) {
+			return curCSS( elem, name );
+		}
+	},
+
+	// 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 ( name in options ) {
+			elem.style[ name ] = old[ name ];
+		}
+	},
+
+	camelCase: function( string ) {
+		return string.replace( rdashAlpha, fcamelCase );
+	}
+});
+
+// DEPRECATED, Use jQuery.css() instead
+jQuery.curCSS = jQuery.css;
+
+jQuery.each(["height", "width"], function( i, name ) {
+	jQuery.cssHooks[ name ] = {
+		get: function( elem, computed, extra ) {
+			var val;
+
+			if ( computed ) {
+				if ( elem.offsetWidth !== 0 ) {
+					val = getWH( elem, name, extra );
+
+				} else {
+					jQuery.swap( elem, cssShow, function() {
+						val = getWH( elem, name, extra );
+					});
+				}
+
+				if ( val <= 0 ) {
+					val = curCSS( elem, name, name );
+
+					if ( val === "0px" && currentStyle ) {
+						val = currentStyle( elem, name, name );
+					}
+
+					if ( val != null ) {
+						// Should return "auto" instead of 0, use 0 for
+						// temporary backwards-compat
+						return val === "" || val === "auto" ? "0px" : val;
+					}
+				}
+
+				if ( val < 0 || val == null ) {
+					val = elem.style[ name ];
+
+					// Should return "auto" instead of 0, use 0 for
+					// temporary backwards-compat
+					return val === "" || val === "auto" ? "0px" : val;
+				}
+
+				return typeof val === "string" ? val : val + "px";
+			}
+		},
+
+		set: function( elem, value ) {
+			if ( rnumpx.test( value ) ) {
+				// ignore negative width and height values #1599
+				value = parseFloat(value);
+
+				if ( value >= 0 ) {
+					return value + "px";
+				}
+
+			} else {
+				return value;
+			}
+		}
+	};
+});
+
+if ( !jQuery.support.opacity ) {
+	jQuery.cssHooks.opacity = {
+		get: function( elem, computed ) {
+			// IE uses filters for opacity
+			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
+				( parseFloat( RegExp.$1 ) / 100 ) + "" :
+				computed ? "1" : "";
+		},
+
+		set: function( elem, value ) {
+			var style = elem.style,
+				currentStyle = elem.currentStyle;
+
+			// 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 = jQuery.isNaN( value ) ?
+				"" :
+				"alpha(opacity=" + value * 100 + ")",
+				filter = currentStyle && currentStyle.filter || style.filter || "";
+
+			style.filter = ralpha.test( filter ) ?
+				filter.replace( ralpha, opacity ) :
+				filter + " " + opacity;
+		}
+	};
+}
+
+jQuery(function() {
+	// This hook cannot be added until DOM ready because the support test
+	// for it is not run until after DOM ready
+	if ( !jQuery.support.reliableMarginRight ) {
+		jQuery.cssHooks.marginRight = {
+			get: function( elem, computed ) {
+				// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+				// Work around by temporarily setting element display to inline-block
+				var ret;
+				jQuery.swap( elem, { "display": "inline-block" }, function() {
+					if ( computed ) {
+						ret = curCSS( elem, "margin-right", "marginRight" );
+					} else {
+						ret = elem.style.marginRight;
+					}
+				});
+				return ret;
+			}
+		};
+	}
+});
+
+if ( document.defaultView && document.defaultView.getComputedStyle ) {
+	getComputedStyle = function( elem, name ) {
+		var ret, defaultView, computedStyle;
+
+		name = name.replace( rupper, "-$1" ).toLowerCase();
+
+		if ( !(defaultView = elem.ownerDocument.defaultView) ) {
+			return undefined;
+		}
+
+		if ( (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
+			ret = computedStyle.getPropertyValue( name );
+			if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
+				ret = jQuery.style( elem, name );
+			}
+		}
+
+		return ret;
+	};
+}
+
+if ( document.documentElement.currentStyle ) {
+	currentStyle = function( elem, name ) {
+		var left,
+			ret = elem.currentStyle && elem.currentStyle[ name ],
+			rsLeft = elem.runtimeStyle && elem.runtimeStyle[ name ],
+			style = elem.style;
+
+		// 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
+			left = style.left;
+
+			// Put in the new values to get a computed value out
+			if ( rsLeft ) {
+				elem.runtimeStyle.left = elem.currentStyle.left;
+			}
+			style.left = name === "fontSize" ? "1em" : (ret || 0);
+			ret = style.pixelLeft + "px";
+
+			// Revert the changed values
+			style.left = left;
+			if ( rsLeft ) {
+				elem.runtimeStyle.left = rsLeft;
+			}
+		}
+
+		return ret === "" ? "auto" : ret;
+	};
+}
+
+curCSS = getComputedStyle || currentStyle;
+
+function getWH( elem, name, extra ) {
+	var which = name === "width" ? cssWidth : cssHeight,
+		val = name === "width" ? elem.offsetWidth : elem.offsetHeight;
+
+	if ( extra === "border" ) {
+		return val;
+	}
+
+	jQuery.each( which, function() {
+		if ( !extra ) {
+			val -= parseFloat(jQuery.css( elem, "padding" + this )) || 0;
+		}
+
+		if ( extra === "margin" ) {
+			val += parseFloat(jQuery.css( elem, "margin" + this )) || 0;
+
+		} else {
+			val -= parseFloat(jQuery.css( elem, "border" + this + "Width" )) || 0;
+		}
+	});
+
+	return val;
+}
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+	jQuery.expr.filters.hidden = function( elem ) {
+		var width = elem.offsetWidth,
+			height = elem.offsetHeight;
+
+		return (width === 0 && height === 0) || (!jQuery.support.reliableHiddenOffsets && (elem.style.display || jQuery.css( elem, "display" )) === "none");
+	};
+
+	jQuery.expr.filters.visible = function( elem ) {
+		return !jQuery.expr.filters.hidden( elem );
+	};
+}
+
+
+
+
+var r20 = /%20/g,
+	rbracket = /\[\]$/,
+	rCRLF = /\r?\n/g,
+	rhash = /#.*$/,
+	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+	rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
+	// #7653, #8125, #8152: local protocol detection
+	rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|widget):$/,
+	rnoContent = /^(?:GET|HEAD)$/,
+	rprotocol = /^\/\//,
+	rquery = /\?/,
+	rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
+	rselectTextarea = /^(?:select|textarea)/i,
+	rspacesAjax = /\s+/,
+	rts = /([?&])_=[^&]*/,
+	rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
+
+	// Keep a copy of the old load method
+	_load = jQuery.fn.load,
+
+	/* Prefilters
+	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+	 * 2) These are called:
+	 *    - BEFORE asking for a transport
+	 *    - AFTER param serialization (s.data is a string if s.processData is true)
+	 * 3) key is the dataType
+	 * 4) the catchall symbol "*" can be used
+	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+	 */
+	prefilters = {},
+
+	/* Transports bindings
+	 * 1) key is the dataType
+	 * 2) the catchall symbol "*" can be used
+	 * 3) selection will start with transport dataType and THEN go to "*" if needed
+	 */
+	transports = {},
+
+	// Document location
+	ajaxLocation,
+
+	// Document location segments
+	ajaxLocParts;
+
+// #8138, IE may throw an exception when accessing
+// a field from window.location if document.domain has been set
+try {
+	ajaxLocation = location.href;
+} catch( e ) {
+	// Use the href attribute of an A element
+	// since IE will modify it given document.location
+	ajaxLocation = document.createElement( "a" );
+	ajaxLocation.href = "";
+	ajaxLocation = ajaxLocation.href;
+}
+
+// Segment location into parts
+ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+	// dataTypeExpression is optional and defaults to "*"
+	return function( dataTypeExpression, func ) {
+
+		if ( typeof dataTypeExpression !== "string" ) {
+			func = dataTypeExpression;
+			dataTypeExpression = "*";
+		}
+
+		if ( jQuery.isFunction( func ) ) {
+			var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
+				i = 0,
+				length = dataTypes.length,
+				dataType,
+				list,
+				placeBefore;
+
+			// For each dataType in the dataTypeExpression
+			for(; i < length; i++ ) {
+				dataType = dataTypes[ i ];
+				// We control if we're asked to add before
+				// any existing element
+				placeBefore = /^\+/.test( dataType );
+				if ( placeBefore ) {
+					dataType = dataType.substr( 1 ) || "*";
+				}
+				list = structure[ dataType ] = structure[ dataType ] || [];
+				// then we add to the structure accordingly
+				list[ placeBefore ? "unshift" : "push" ]( func );
+			}
+		}
+	};
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
+		dataType /* internal */, inspected /* internal */ ) {
+
+	dataType = dataType || options.dataTypes[ 0 ];
+	inspected = inspected || {};
+
+	inspected[ dataType ] = true;
+
+	var list = structure[ dataType ],
+		i = 0,
+		length = list ? list.length : 0,
+		executeOnly = ( structure === prefilters ),
+		selection;
+
+	for(; i < length && ( executeOnly || !selection ); i++ ) {
+		selection = list[ i ]( options, originalOptions, jqXHR );
+		// If we got redirected to another dataType
+		// we try there if executing only and not done already
+		if ( typeof selection === "string" ) {
+			if ( !executeOnly || inspected[ selection ] ) {
+				selection = undefined;
+			} else {
+				options.dataTypes.unshift( selection );
+				selection = inspectPrefiltersOrTransports(
+						structure, options, originalOptions, jqXHR, selection, inspected );
+			}
+		}
+	}
+	// If we're only executing or nothing was selected
+	// we try the catchall dataType if not done already
+	if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
+		selection = inspectPrefiltersOrTransports(
+				structure, options, originalOptions, jqXHR, "*", inspected );
+	}
+	// unnecessary when only executing (prefilters)
+	// but it'll be ignored by the caller in that case
+	return selection;
+}
+
+jQuery.fn.extend({
+	load: function( url, params, callback ) {
+		if ( typeof url !== "string" && _load ) {
+			return _load.apply( this, arguments );
+
+		// 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 = undefined;
+
+			// 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 callback (responseText is used internally)
+			complete: function( jqXHR, status, responseText ) {
+				// Store the response as specified by the jqXHR object
+				responseText = jqXHR.responseText;
+				// If successful, inject the HTML into all the matched elements
+				if ( jqXHR.isResolved() ) {
+					// #4825: Get the actual response in case
+					// a dataFilter is present in ajaxSettings
+					jqXHR.done(function( r ) {
+						responseText = r;
+					});
+					// 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(responseText.replace(rscript, ""))
+
+							// Locate the specified elements
+							.find(selector) :
+
+						// If not, just inject the full result
+						responseText );
+				}
+
+				if ( callback ) {
+					self.each( callback, [ responseText, status, jqXHR ] );
+				}
+			}
+		});
+
+		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.replace( rCRLF, "\r\n" ) };
+					}) :
+					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+		}).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.each( [ "get", "post" ], function( i, method ) {
+	jQuery[ method ] = function( url, data, callback, type ) {
+		// shift arguments if data argument was omitted
+		if ( jQuery.isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = undefined;
+		}
+
+		return jQuery.ajax({
+			type: method,
+			url: url,
+			data: data,
+			success: callback,
+			dataType: type
+		});
+	};
+});
+
+jQuery.extend({
+
+	getScript: function( url, callback ) {
+		return jQuery.get( url, undefined, callback, "script" );
+	},
+
+	getJSON: function( url, data, callback ) {
+		return jQuery.get( url, data, callback, "json" );
+	},
+
+	// Creates a full fledged settings object into target
+	// with both ajaxSettings and settings fields.
+	// If target is omitted, writes into ajaxSettings.
+	ajaxSetup: function ( target, settings ) {
+		if ( !settings ) {
+			// Only one parameter, we extend ajaxSettings
+			settings = target;
+			target = jQuery.extend( true, jQuery.ajaxSettings, settings );
+		} else {
+			// target was provided, we extend into it
+			jQuery.extend( true, target, jQuery.ajaxSettings, settings );
+		}
+		// Flatten fields we don't want deep extended
+		for( var field in { context: 1, url: 1 } ) {
+			if ( field in settings ) {
+				target[ field ] = settings[ field ];
+			} else if( field in jQuery.ajaxSettings ) {
+				target[ field ] = jQuery.ajaxSettings[ field ];
+			}
+		}
+		return target;
+	},
+
+	ajaxSettings: {
+		url: ajaxLocation,
+		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+		global: true,
+		type: "GET",
+		contentType: "application/x-www-form-urlencoded",
+		processData: true,
+		async: true,
+		/*
+		timeout: 0,
+		data: null,
+		dataType: null,
+		username: null,
+		password: null,
+		cache: null,
+		traditional: false,
+		headers: {},
+		*/
+
+		accepts: {
+			xml: "application/xml, text/xml",
+			html: "text/html",
+			text: "text/plain",
+			json: "application/json, text/javascript",
+			"*": "*/*"
+		},
+
+		contents: {
+			xml: /xml/,
+			html: /html/,
+			json: /json/
+		},
+
+		responseFields: {
+			xml: "responseXML",
+			text: "responseText"
+		},
+
+		// List of data converters
+		// 1) key format is "source_type destination_type" (a single space in-between)
+		// 2) the catchall symbol "*" can be used for source_type
+		converters: {
+
+			// Convert anything to text
+			"* text": window.String,
+
+			// Text to html (true = no transformation)
+			"text html": true,
+
+			// Evaluate text as a json expression
+			"text json": jQuery.parseJSON,
+
+			// Parse text as xml
+			"text xml": jQuery.parseXML
+		}
+	},
+
+	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+	ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+	// Main method
+	ajax: function( url, options ) {
+
+		// If url is an object, simulate pre-1.5 signature
+		if ( typeof url === "object" ) {
+			options = url;
+			url = undefined;
+		}
+
+		// Force options to be an object
+		options = options || {};
+
+		var // Create the final options object
+			s = jQuery.ajaxSetup( {}, options ),
+			// Callbacks context
+			callbackContext = s.context || s,
+			// Context for global events
+			// It's the callbackContext if one was provided in the options
+			// and if it's a DOM node or a jQuery collection
+			globalEventContext = callbackContext !== s &&
+				( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
+						jQuery( callbackContext ) : jQuery.event,
+			// Deferreds
+			deferred = jQuery.Deferred(),
+			completeDeferred = jQuery._Deferred(),
+			// Status-dependent callbacks
+			statusCode = s.statusCode || {},
+			// ifModified key
+			ifModifiedKey,
+			// Headers (they are sent all at once)
+			requestHeaders = {},
+			requestHeadersNames = {},
+			// Response headers
+			responseHeadersString,
+			responseHeaders,
+			// transport
+			transport,
+			// timeout handle
+			timeoutTimer,
+			// Cross-domain detection vars
+			parts,
+			// The jqXHR state
+			state = 0,
+			// To know if global events are to be dispatched
+			fireGlobals,
+			// Loop variable
+			i,
+			// Fake xhr
+			jqXHR = {
+
+				readyState: 0,
+
+				// Caches the header
+				setRequestHeader: function( name, value ) {
+					if ( !state ) {
+						var lname = name.toLowerCase();
+						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+						requestHeaders[ name ] = value;
+					}
+					return this;
+				},
+
+				// Raw string
+				getAllResponseHeaders: function() {
+					return state === 2 ? responseHeadersString : null;
+				},
+
+				// Builds headers hashtable if needed
+				getResponseHeader: function( key ) {
+					var match;
+					if ( state === 2 ) {
+						if ( !responseHeaders ) {
+							responseHeaders = {};
+							while( ( match = rheaders.exec( responseHeadersString ) ) ) {
+								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+							}
+						}
+						match = responseHeaders[ key.toLowerCase() ];
+					}
+					return match === undefined ? null : match;
+				},
+
+				// Overrides response content-type header
+				overrideMimeType: function( type ) {
+					if ( !state ) {
+						s.mimeType = type;
+					}
+					return this;
+				},
+
+				// Cancel the request
+				abort: function( statusText ) {
+					statusText = statusText || "abort";
+					if ( transport ) {
+						transport.abort( statusText );
+					}
+					done( 0, statusText );
+					return this;
+				}
+			};
+
+		// Callback for when everything is done
+		// It is defined here because jslint complains if it is declared
+		// at the end of the function (which would be more logical and readable)
+		function done( status, statusText, responses, headers ) {
+
+			// Called once
+			if ( state === 2 ) {
+				return;
+			}
+
+			// State is "done" now
+			state = 2;
+
+			// Clear timeout if it exists
+			if ( timeoutTimer ) {
+				clearTimeout( timeoutTimer );
+			}
+
+			// Dereference transport for early garbage collection
+			// (no matter how long the jqXHR object will be used)
+			transport = undefined;
+
+			// Cache response headers
+			responseHeadersString = headers || "";
+
+			// Set readyState
+			jqXHR.readyState = status ? 4 : 0;
+
+			var isSuccess,
+				success,
+				error,
+				response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
+				lastModified,
+				etag;
+
+			// If successful, handle type chaining
+			if ( status >= 200 && status < 300 || status === 304 ) {
+
+				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+				if ( s.ifModified ) {
+
+					if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
+						jQuery.lastModified[ ifModifiedKey ] = lastModified;
+					}
+					if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
+						jQuery.etag[ ifModifiedKey ] = etag;
+					}
+				}
+
+				// If not modified
+				if ( status === 304 ) {
+
+					statusText = "notmodified";
+					isSuccess = true;
+
+				// If we have data
+				} else {
+
+					try {
+						success = ajaxConvert( s, response );
+						statusText = "success";
+						isSuccess = true;
+					} catch(e) {
+						// We have a parsererror
+						statusText = "parsererror";
+						error = e;
+					}
+				}
+			} else {
+				// We extract error from statusText
+				// then normalize statusText and status for non-aborts
+				error = statusText;
+				if( !statusText || status ) {
+					statusText = "error";
+					if ( status < 0 ) {
+						status = 0;
+					}
+				}
+			}
+
+			// Set data for the fake xhr object
+			jqXHR.status = status;
+			jqXHR.statusText = statusText;
+
+			// Success/Error
+			if ( isSuccess ) {
+				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+			} else {
+				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+			}
+
+			// Status-dependent callbacks
+			jqXHR.statusCode( statusCode );
+			statusCode = undefined;
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
+						[ jqXHR, s, isSuccess ? success : error ] );
+			}
+
+			// Complete
+			completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] );
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s] );
+				// Handle the global AJAX counter
+				if ( !( --jQuery.active ) ) {
+					jQuery.event.trigger( "ajaxStop" );
+				}
+			}
+		}
+
+		// Attach deferreds
+		deferred.promise( jqXHR );
+		jqXHR.success = jqXHR.done;
+		jqXHR.error = jqXHR.fail;
+		jqXHR.complete = completeDeferred.done;
+
+		// Status-dependent callbacks
+		jqXHR.statusCode = function( map ) {
+			if ( map ) {
+				var tmp;
+				if ( state < 2 ) {
+					for( tmp in map ) {
+						statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
+					}
+				} else {
+					tmp = map[ jqXHR.status ];
+					jqXHR.then( tmp, tmp );
+				}
+			}
+			return this;
+		};
+
+		// Remove hash character (#7531: and string promotion)
+		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+		// We also use the url parameter if available
+		s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+
+		// Extract dataTypes list
+		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
+
+		// Determine if a cross-domain request is in order
+		if ( s.crossDomain == null ) {
+			parts = rurl.exec( s.url.toLowerCase() );
+			s.crossDomain = !!( parts &&
+				( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
+					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
+						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
+			);
+		}
+
+		// Convert data if not already a string
+		if ( s.data && s.processData && typeof s.data !== "string" ) {
+			s.data = jQuery.param( s.data, s.traditional );
+		}
+
+		// Apply prefilters
+		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+		// If request was aborted inside a prefiler, stop there
+		if ( state === 2 ) {
+			return false;
+		}
+
+		// We can fire global events as of now if asked to
+		fireGlobals = s.global;
+
+		// Uppercase the type
+		s.type = s.type.toUpperCase();
+
+		// Determine if request has content
+		s.hasContent = !rnoContent.test( s.type );
+
+		// Watch for a new set of requests
+		if ( fireGlobals && jQuery.active++ === 0 ) {
+			jQuery.event.trigger( "ajaxStart" );
+		}
+
+		// More options handling for requests with no content
+		if ( !s.hasContent ) {
+
+			// If data is available, append data to url
+			if ( s.data ) {
+				s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
+			}
+
+			// Get ifModifiedKey before adding the anti-cache parameter
+			ifModifiedKey = s.url;
+
+			// Add anti-cache in url if needed
+			if ( s.cache === false ) {
+
+				var ts = jQuery.now(),
+					// try replacing _= if it is there
+					ret = s.url.replace( rts, "$1_=" + ts );
+
+				// if nothing was replaced, add timestamp to the end
+				s.url = ret + ( (ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
+			}
+		}
+
+		// Set the correct header, if data is being sent
+		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+			jqXHR.setRequestHeader( "Content-Type", s.contentType );
+		}
+
+		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+		if ( s.ifModified ) {
+			ifModifiedKey = ifModifiedKey || s.url;
+			if ( jQuery.lastModified[ ifModifiedKey ] ) {
+				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
+			}
+			if ( jQuery.etag[ ifModifiedKey ] ) {
+				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
+			}
+		}
+
+		// Set the Accepts header for the server, depending on the dataType
+		jqXHR.setRequestHeader(
+			"Accept",
+			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", */*; q=0.01" : "" ) :
+				s.accepts[ "*" ]
+		);
+
+		// Check for headers option
+		for ( i in s.headers ) {
+			jqXHR.setRequestHeader( i, s.headers[ i ] );
+		}
+
+		// Allow custom headers/mimetypes and early abort
+		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+				// Abort if not done already
+				jqXHR.abort();
+				return false;
+
+		}
+
+		// Install callbacks on deferreds
+		for ( i in { success: 1, error: 1, complete: 1 } ) {
+			jqXHR[ i ]( s[ i ] );
+		}
+
+		// Get transport
+		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+		// If no transport, we auto-abort
+		if ( !transport ) {
+			done( -1, "No Transport" );
+		} else {
+			jqXHR.readyState = 1;
+			// Send global event
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+			}
+			// Timeout
+			if ( s.async && s.timeout > 0 ) {
+				timeoutTimer = setTimeout( function(){
+					jqXHR.abort( "timeout" );
+				}, s.timeout );
+			}
+
+			try {
+				state = 1;
+				transport.send( requestHeaders, done );
+			} catch (e) {
+				// Propagate exception as error if not done
+				if ( status < 2 ) {
+					done( -1, e );
+				// Simply rethrow otherwise
+				} else {
+					jQuery.error( e );
+				}
+			}
+		}
+
+		return jqXHR;
+	},
+
+	// Serialize an array of form elements or a set of
+	// key/values into a query string
+	param: function( a, traditional ) {
+		var s = [],
+			add = function( 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 );
+			};
+
+		// 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 && !jQuery.isPlainObject( a ) ) ) {
+			// 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 ], traditional, add );
+			}
+		}
+
+		// Return the resulting serialization
+		return s.join( "&" ).replace( r20, "+" );
+	}
+});
+
+function buildParams( prefix, obj, traditional, add ) {
+	if ( jQuery.isArray( obj ) ) {
+		// Serialize array item.
+		jQuery.each( obj, function( i, v ) {
+			if ( traditional || rbracket.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, traditional, add );
+			}
+		});
+
+	} else if ( !traditional && obj != null && typeof obj === "object" ) {
+		// Serialize object item.
+		for ( var name in obj ) {
+			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+		}
+
+	} else {
+		// Serialize scalar item.
+		add( prefix, obj );
+	}
+}
+
+// This is still on the jQuery object... for now
+// Want to move this to jQuery.ajax some day
+jQuery.extend({
+
+	// Counter for holding the number of active queries
+	active: 0,
+
+	// Last-Modified header cache for next request
+	lastModified: {},
+	etag: {}
+
+});
+
+/* Handles responses to an ajax request:
+ * - sets all responseXXX fields accordingly
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+	var contents = s.contents,
+		dataTypes = s.dataTypes,
+		responseFields = s.responseFields,
+		ct,
+		type,
+		finalDataType,
+		firstDataType;
+
+	// Fill responseXXX fields
+	for( type in responseFields ) {
+		if ( type in responses ) {
+			jqXHR[ responseFields[type] ] = responses[ type ];
+		}
+	}
+
+	// Remove auto dataType and get content-type in the process
+	while( dataTypes[ 0 ] === "*" ) {
+		dataTypes.shift();
+		if ( ct === undefined ) {
+			ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
+		}
+	}
+
+	// Check if we're dealing with a known content-type
+	if ( ct ) {
+		for ( type in contents ) {
+			if ( contents[ type ] && contents[ type ].test( ct ) ) {
+				dataTypes.unshift( type );
+				break;
+			}
+		}
+	}
+
+	// Check to see if we have a response for the expected dataType
+	if ( dataTypes[ 0 ] in responses ) {
+		finalDataType = dataTypes[ 0 ];
+	} else {
+		// Try convertible dataTypes
+		for ( type in responses ) {
+			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+				finalDataType = type;
+				break;
+			}
+			if ( !firstDataType ) {
+				firstDataType = type;
+			}
+		}
+		// Or just use first one
+		finalDataType = finalDataType || firstDataType;
+	}
+
+	// If we found a dataType
+	// We add the dataType to the list if needed
+	// and return the corresponding response
+	if ( finalDataType ) {
+		if ( finalDataType !== dataTypes[ 0 ] ) {
+			dataTypes.unshift( finalDataType );
+		}
+		return responses[ finalDataType ];
+	}
+}
+
+// Chain conversions given the request and the original response
+function ajaxConvert( s, response ) {
+
+	// Apply the dataFilter if provided
+	if ( s.dataFilter ) {
+		response = s.dataFilter( response, s.dataType );
+	}
+
+	var dataTypes = s.dataTypes,
+		converters = {},
+		i,
+		key,
+		length = dataTypes.length,
+		tmp,
+		// Current and previous dataTypes
+		current = dataTypes[ 0 ],
+		prev,
+		// Conversion expression
+		conversion,
+		// Conversion function
+		conv,
+		// Conversion functions (transitive conversion)
+		conv1,
+		conv2;
+
+	// For each dataType in the chain
+	for( i = 1; i < length; i++ ) {
+
+		// Create converters map
+		// with lowercased keys
+		if ( i === 1 ) {
+			for( key in s.converters ) {
+				if( typeof key === "string" ) {
+					converters[ key.toLowerCase() ] = s.converters[ key ];
+				}
+			}
+		}
+
+		// Get the dataTypes
+		prev = current;
+		current = dataTypes[ i ];
+
+		// If current is auto dataType, update it to prev
+		if( current === "*" ) {
+			current = prev;
+		// If no auto and dataTypes are actually different
+		} else if ( prev !== "*" && prev !== current ) {
+
+			// Get the converter
+			conversion = prev + " " + current;
+			conv = converters[ conversion ] || converters[ "* " + current ];
+
+			// If there is no direct converter, search transitively
+			if ( !conv ) {
+				conv2 = undefined;
+				for( conv1 in converters ) {
+					tmp = conv1.split( " " );
+					if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
+						conv2 = converters[ tmp[1] + " " + current ];
+						if ( conv2 ) {
+							conv1 = converters[ conv1 ];
+							if ( conv1 === true ) {
+								conv = conv2;
+							} else if ( conv2 === true ) {
+								conv = conv1;
+							}
+							break;
+						}
+					}
+				}
+			}
+			// If we found no converter, dispatch an error
+			if ( !( conv || conv2 ) ) {
+				jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
+			}
+			// If found converter is not an equivalence
+			if ( conv !== true ) {
+				// Convert with 1 or 2 converters accordingly
+				response = conv ? conv( response ) : conv2( conv1(response) );
+			}
+		}
+	}
+	return response;
+}
+
+
+
+
+var jsc = jQuery.now(),
+	jsre = /(\=)\?(&|$)|\?\?/i;
+
+// Default jsonp settings
+jQuery.ajaxSetup({
+	jsonp: "callback",
+	jsonpCallback: function() {
+		return jQuery.expando + "_" + ( jsc++ );
+	}
+});
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+	var inspectData = s.contentType === "application/x-www-form-urlencoded" &&
+		( typeof s.data === "string" );
+
+	if ( s.dataTypes[ 0 ] === "jsonp" ||
+		s.jsonp !== false && ( jsre.test( s.url ) ||
+				inspectData && jsre.test( s.data ) ) ) {
+
+		var responseContainer,
+			jsonpCallback = s.jsonpCallback =
+				jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
+			previous = window[ jsonpCallback ],
+			url = s.url,
+			data = s.data,
+			replace = "$1" + jsonpCallback + "$2";
+
+		if ( s.jsonp !== false ) {
+			url = url.replace( jsre, replace );
+			if ( s.url === url ) {
+				if ( inspectData ) {
+					data = data.replace( jsre, replace );
+				}
+				if ( s.data === data ) {
+					// Add callback manually
+					url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
+				}
+			}
+		}
+
+		s.url = url;
+		s.data = data;
+
+		// Install callback
+		window[ jsonpCallback ] = function( response ) {
+			responseContainer = [ response ];
+		};
+
+		// Clean-up function
+		jqXHR.always(function() {
+			// Set callback back to previous value
+			window[ jsonpCallback ] = previous;
+			// Call if it was a function and we have a response
+			if ( responseContainer && jQuery.isFunction( previous ) ) {
+				window[ jsonpCallback ]( responseContainer[ 0 ] );
+			}
+		});
+
+		// Use data converter to retrieve json after script execution
+		s.converters["script json"] = function() {
+			if ( !responseContainer ) {
+				jQuery.error( jsonpCallback + " was not called" );
+			}
+			return responseContainer[ 0 ];
+		};
+
+		// force json dataType
+		s.dataTypes[ 0 ] = "json";
+
+		// Delegate to script
+		return "script";
+	}
+});
+
+
+
+
+// Install script dataType
+jQuery.ajaxSetup({
+	accepts: {
+		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+	},
+	contents: {
+		script: /javascript|ecmascript/
+	},
+	converters: {
+		"text script": function( text ) {
+			jQuery.globalEval( text );
+			return text;
+		}
+	}
+});
+
+// Handle cache's special case and global
+jQuery.ajaxPrefilter( "script", function( s ) {
+	if ( s.cache === undefined ) {
+		s.cache = false;
+	}
+	if ( s.crossDomain ) {
+		s.type = "GET";
+		s.global = false;
+	}
+});
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function(s) {
+
+	// This transport only deals with cross domain requests
+	if ( s.crossDomain ) {
+
+		var script,
+			head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
+
+		return {
+
+			send: function( _, callback ) {
+
+				script = document.createElement( "script" );
+
+				script.async = "async";
+
+				if ( s.scriptCharset ) {
+					script.charset = s.scriptCharset;
+				}
+
+				script.src = s.url;
+
+				// Attach handlers for all browsers
+				script.onload = script.onreadystatechange = function( _, isAbort ) {
+
+					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+
+						// Handle memory leak in IE
+						script.onload = script.onreadystatechange = null;
+
+						// Remove the script
+						if ( head && script.parentNode ) {
+							head.removeChild( script );
+						}
+
+						// Dereference the script
+						script = undefined;
+
+						// Callback if not abort
+						if ( !isAbort ) {
+							callback( 200, "success" );
+						}
+					}
+				};
+				// 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 );
+			},
+
+			abort: function() {
+				if ( script ) {
+					script.onload( 0, 1 );
+				}
+			}
+		};
+	}
+});
+
+
+
+
+var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
+	xhrOnUnloadAbort = window.ActiveXObject ? function() {
+		// Abort all pending requests
+		for ( var key in xhrCallbacks ) {
+			xhrCallbacks[ key ]( 0, 1 );
+		}
+	} : false,
+	xhrId = 0,
+	xhrCallbacks;
+
+// Functions to create xhrs
+function createStandardXHR() {
+	try {
+		return new window.XMLHttpRequest();
+	} catch( e ) {}
+}
+
+function createActiveXHR() {
+	try {
+		return new window.ActiveXObject( "Microsoft.XMLHTTP" );
+	} catch( e ) {}
+}
+
+// Create the request object
+// (This is still attached to ajaxSettings for backward compatibility)
+jQuery.ajaxSettings.xhr = window.ActiveXObject ?
+	/* Microsoft failed to properly
+	 * implement the XMLHttpRequest in IE7 (can't request local files),
+	 * so we use the ActiveXObject when it is available
+	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
+	 * we need a fallback.
+	 */
+	function() {
+		return !this.isLocal && createStandardXHR() || createActiveXHR();
+	} :
+	// For all other browsers, use the standard XMLHttpRequest object
+	createStandardXHR;
+
+// Determine support properties
+(function( xhr ) {
+	jQuery.extend( jQuery.support, {
+		ajax: !!xhr,
+		cors: !!xhr && ( "withCredentials" in xhr )
+	});
+})( jQuery.ajaxSettings.xhr() );
+
+// Create transport if the browser can provide an xhr
+if ( jQuery.support.ajax ) {
+
+	jQuery.ajaxTransport(function( s ) {
+		// Cross domain only allowed if supported through XMLHttpRequest
+		if ( !s.crossDomain || jQuery.support.cors ) {
+
+			var callback;
+
+			return {
+				send: function( headers, complete ) {
+
+					// Get a new xhr
+					var xhr = s.xhr(),
+						handle,
+						i;
+
+					// Open the socket
+					// Passing null username, generates a login popup on Opera (#2865)
+					if ( s.username ) {
+						xhr.open( s.type, s.url, s.async, s.username, s.password );
+					} else {
+						xhr.open( s.type, s.url, s.async );
+					}
+
+					// Apply custom fields if provided
+					if ( s.xhrFields ) {
+						for ( i in s.xhrFields ) {
+							xhr[ i ] = s.xhrFields[ i ];
+						}
+					}
+
+					// Override mime type if needed
+					if ( s.mimeType && xhr.overrideMimeType ) {
+						xhr.overrideMimeType( s.mimeType );
+					}
+
+					// X-Requested-With header
+					// For cross-domain requests, seeing as conditions for a preflight are
+					// akin to a jigsaw puzzle, we simply never set it to be sure.
+					// (it can always be set on a per-request basis or even using ajaxSetup)
+					// For same-domain requests, won't change header if already provided.
+					if ( !s.crossDomain && !headers["X-Requested-With"] ) {
+						headers[ "X-Requested-With" ] = "XMLHttpRequest";
+					}
+
+					// Need an extra try/catch for cross domain requests in Firefox 3
+					try {
+						for ( i in headers ) {
+							xhr.setRequestHeader( i, headers[ i ] );
+						}
+					} catch( _ ) {}
+
+					// Do send the request
+					// This may raise an exception which is actually
+					// handled in jQuery.ajax (so no try/catch here)
+					xhr.send( ( s.hasContent && s.data ) || null );
+
+					// Listener
+					callback = function( _, isAbort ) {
+
+						var status,
+							statusText,
+							responseHeaders,
+							responses,
+							xml;
+
+						// Firefox throws exceptions when accessing properties
+						// of an xhr when a network error occured
+						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
+						try {
+
+							// Was never called and is aborted or complete
+							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
+
+								// Only called once
+								callback = undefined;
+
+								// Do not keep as active anymore
+								if ( handle ) {
+									xhr.onreadystatechange = jQuery.noop;
+									if ( xhrOnUnloadAbort ) {
+										delete xhrCallbacks[ handle ];
+									}
+								}
+
+								// If it's an abort
+								if ( isAbort ) {
+									// Abort it manually if needed
+									if ( xhr.readyState !== 4 ) {
+										xhr.abort();
+									}
+								} else {
+									status = xhr.status;
+									responseHeaders = xhr.getAllResponseHeaders();
+									responses = {};
+									xml = xhr.responseXML;
+
+									// Construct response list
+									if ( xml && xml.documentElement /* #4958 */ ) {
+										responses.xml = xml;
+									}
+									responses.text = xhr.responseText;
+
+									// Firefox throws an exception when accessing
+									// statusText for faulty cross-domain requests
+									try {
+										statusText = xhr.statusText;
+									} catch( e ) {
+										// We normalize with Webkit giving an empty statusText
+										statusText = "";
+									}
+
+									// Filter status for non standard behaviors
+
+									// If the request is local and we have data: assume a success
+									// (success with no data won't get notified, that's the best we
+									// can do given current implementations)
+									if ( !status && s.isLocal && !s.crossDomain ) {
+										status = responses.text ? 200 : 404;
+									// IE - #1450: sometimes returns 1223 when it should be 204
+									} else if ( status === 1223 ) {
+										status = 204;
+									}
+								}
+							}
+						} catch( firefoxAccessException ) {
+							if ( !isAbort ) {
+								complete( -1, firefoxAccessException );
+							}
+						}
+
+						// Call complete if needed
+						if ( responses ) {
+							complete( status, statusText, responses, responseHeaders );
+						}
+					};
+
+					// if we're in sync mode or it's in cache
+					// and has been retrieved directly (IE6 & IE7)
+					// we need to manually fire the callback
+					if ( !s.async || xhr.readyState === 4 ) {
+						callback();
+					} else {
+						handle = ++xhrId;
+						if ( xhrOnUnloadAbort ) {
+							// Create the active xhrs callbacks list if needed
+							// and attach the unload handler
+							if ( !xhrCallbacks ) {
+								xhrCallbacks = {};
+								jQuery( window ).unload( xhrOnUnloadAbort );
+							}
+							// Add to list of active xhrs callbacks
+							xhrCallbacks[ handle ] = callback;
+						}
+						xhr.onreadystatechange = callback;
+					}
+				},
+
+				abort: function() {
+					if ( callback ) {
+						callback(0,1);
+					}
+				}
+			};
+		}
+	});
+}
+
+
+
+
+var elemdisplay = {},
+	iframe, iframeDoc,
+	rfxtypes = /^(?:toggle|show|hide)$/,
+	rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
+	timerId,
+	fxAttrs = [
+		// height animations
+		[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
+		// width animations
+		[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
+		// opacity animations
+		[ "opacity" ]
+	],
+	fxNow,
+	requestAnimationFrame = window.webkitRequestAnimationFrame ||
+	    window.mozRequestAnimationFrame ||
+	    window.oRequestAnimationFrame;
+
+jQuery.fn.extend({
+	show: function( speed, easing, callback ) {
+		var elem, display;
+
+		if ( speed || speed === 0 ) {
+			return this.animate( genFx("show", 3), speed, easing, callback);
+
+		} else {
+			for ( var i = 0, j = this.length; i < j; i++ ) {
+				elem = this[i];
+
+				if ( elem.style ) {
+					display = elem.style.display;
+
+					// Reset the inline display of this element to learn if it is
+					// being hidden by cascaded rules or not
+					if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
+						display = elem.style.display = "";
+					}
+
+					// Set elements which have been overridden with display: none
+					// in a stylesheet to whatever the default browser style is
+					// for such an element
+					if ( display === "" && jQuery.css( elem, "display" ) === "none" ) {
+						jQuery._data(elem, "olddisplay", defaultDisplay(elem.nodeName));
+					}
+				}
+			}
+
+			// Set the display of most of the elements in a second loop
+			// to avoid the constant reflow
+			for ( i = 0; i < j; i++ ) {
+				elem = this[i];
+
+				if ( elem.style ) {
+					display = elem.style.display;
+
+					if ( display === "" || display === "none" ) {
+						elem.style.display = jQuery._data(elem, "olddisplay") || "";
+					}
+				}
+			}
+
+			return this;
+		}
+	},
+
+	hide: function( speed, easing, callback ) {
+		if ( speed || speed === 0 ) {
+			return this.animate( genFx("hide", 3), speed, easing, callback);
+
+		} else {
+			for ( var i = 0, j = this.length; i < j; i++ ) {
+				if ( this[i].style ) {
+					var display = jQuery.css( this[i], "display" );
+
+					if ( display !== "none" && !jQuery._data( this[i], "olddisplay" ) ) {
+						jQuery._data( this[i], "olddisplay", display );
+					}
+				}
+			}
+
+			// Set the display of the elements in a second loop
+			// to avoid the constant reflow
+			for ( i = 0; i < j; i++ ) {
+				if ( this[i].style ) {
+					this[i].style.display = "none";
+				}
+			}
+
+			return this;
+		}
+	},
+
+	// Save the old toggle function
+	_toggle: jQuery.fn.toggle,
+
+	toggle: function( fn, fn2, callback ) {
+		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, callback);
+		}
+
+		return this;
+	},
+
+	fadeTo: function( speed, to, easing, callback ) {
+		return this.filter(":hidden").css("opacity", 0).show().end()
+					.animate({opacity: to}, speed, easing, callback);
+	},
+
+	animate: function( prop, speed, easing, callback ) {
+		var optall = jQuery.speed(speed, easing, callback);
+
+		if ( jQuery.isEmptyObject( prop ) ) {
+			return this.each( optall.complete, [ false ] );
+		}
+
+		return this[ optall.queue === false ? "each" : "queue" ](function() {
+			// XXX 'this' does not always have a nodeName when running the
+			// test suite
+
+			if ( optall.queue === false ) {
+				jQuery._mark( this );
+			}
+
+			var opt = jQuery.extend({}, optall),
+				isElement = this.nodeType === 1,
+				hidden = isElement && jQuery(this).is(":hidden"),
+				name, val, p,
+				display, e,
+				parts, start, end, unit;
+
+			// will store per property easing and be used to determine when an animation is complete
+			opt.animatedProperties = {};
+
+			for ( p in prop ) {
+
+				// property name normalization
+				name = jQuery.camelCase( p );
+				if ( p !== name ) {
+					prop[ name ] = prop[ p ];
+					delete prop[ p ];
+				}
+
+				val = prop[name];
+
+				if ( val === "hide" && hidden || val === "show" && !hidden ) {
+					return opt.complete.call(this);
+				}
+
+				if ( isElement && ( name === "height" || name === "width" ) ) {
+					// Make sure that nothing sneaks out
+					// Record all 3 overflow attributes because IE does not
+					// change the overflow attribute when overflowX and
+					// overflowY are set to the same value
+					opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
+
+					// Set display property to inline-block for height/width
+					// animations on inline elements that are having width/height
+					// animated
+					if ( jQuery.css( this, "display" ) === "inline" &&
+							jQuery.css( this, "float" ) === "none" ) {
+						if ( !jQuery.support.inlineBlockNeedsLayout ) {
+							this.style.display = "inline-block";
+
+						} else {
+							display = defaultDisplay(this.nodeName);
+
+							// inline-level elements accept inline-block;
+							// block-level elements need to be inline with layout
+							if ( display === "inline" ) {
+								this.style.display = "inline-block";
+
+							} else {
+								this.style.display = "inline";
+								this.style.zoom = 1;
+							}
+						}
+					}
+				}
+
+				// easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
+				opt.animatedProperties[name] = jQuery.isArray( val ) ?
+					val[1]:
+					opt.specialEasing && opt.specialEasing[name] || opt.easing || 'swing';
+			}
+
+			if ( opt.overflow != null ) {
+				this.style.overflow = "hidden";
+			}
+
+			for ( p in prop ) {
+				e = new jQuery.fx( this, opt, p );
+
+				val = prop[p];
+
+				if ( rfxtypes.test(val) ) {
+					e[ val === "toggle" ? hidden ? "show" : "hide" : val ]();
+
+				} else {
+					parts = rfxnum.exec(val);
+					start = e.cur();
+
+					if ( parts ) {
+						end = parseFloat( parts[2] );
+						unit = parts[3] || ( jQuery.cssNumber[ name ] ? "" : "px" );
+
+						// We need to compute starting value
+						if ( unit !== "px" ) {
+							jQuery.style( this, p, (end || 1) + unit);
+							start = ((end || 1) / e.cur()) * start;
+							jQuery.style( this, p, 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 ) {
+		if ( clearQueue ) {
+			this.queue([]);
+		}
+
+		this.each(function() {
+			var timers = jQuery.timers,
+				i = timers.length;
+			// clear marker counters if we know they won't be
+			if ( !gotoEnd ) {
+				jQuery._unmark( true, this );
+			}
+			// go in reverse order so anything added to the queue during the loop is ignored
+			while ( 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;
+	}
+
+});
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+	setTimeout( clearFxNow, 0 );
+	return ( fxNow = jQuery.now() );
+}
+
+function clearFxNow() {
+	fxNow = undefined;
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, num ) {
+	var obj = {};
+
+	jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {
+		obj[ this ] = type;
+	});
+
+	return obj;
+}
+
+// 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" },
+	fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return this.animate( props, speed, easing, callback );
+	};
+});
+
+jQuery.extend({
+	speed: function( speed, easing, fn ) {
+		var opt = speed && typeof speed === "object" ? jQuery.extend({}, 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 :
+			opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default;
+
+		// Queueing
+		opt.old = opt.complete;
+		opt.complete = function( noUnmark ) {
+			if ( opt.queue !== false ) {
+				jQuery.dequeue( this );
+			} else if ( noUnmark !== false ) {
+				jQuery._unmark( this );
+			}
+
+			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;
+
+		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 );
+	},
+
+	// Get the current size
+	cur: function() {
+		if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {
+			return this.elem[ this.prop ];
+		}
+
+		var parsed,
+			r = jQuery.css( this.elem, this.prop );
+		// Empty strings, null, undefined and "auto" are converted to 0,
+		// complex values such as "rotate(1rad)" are returned as is,
+		// simple values such as "10px" are parsed to Float.
+		return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
+	},
+
+	// Start an animation from one number to another
+	custom: function( from, to, unit ) {
+		var self = this,
+			fx = jQuery.fx,
+			raf;
+
+		this.startTime = fxNow || createFxNow();
+		this.start = from;
+		this.end = to;
+		this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
+		this.now = this.start;
+		this.pos = this.state = 0;
+
+		function t( gotoEnd ) {
+			return self.step(gotoEnd);
+		}
+
+		t.elem = this.elem;
+
+		if ( t() && jQuery.timers.push(t) && !timerId ) {
+			// Use requestAnimationFrame instead of setInterval if available
+			if ( requestAnimationFrame ) {
+				timerId = 1;
+				raf = function() {
+					// When timerId gets set to null at any point, this stops
+					if ( timerId ) {
+						requestAnimationFrame( raf );
+						fx.tick();
+					}
+				};
+				requestAnimationFrame( raf );
+			} else {
+				timerId = setInterval( fx.tick, fx.interval );
+			}
+		}
+	},
+
+	// 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 = fxNow || createFxNow(),
+			done = true,
+			elem = this.elem,
+			options = this.options,
+			i, n;
+
+		if ( gotoEnd || t >= options.duration + this.startTime ) {
+			this.now = this.end;
+			this.pos = this.state = 1;
+			this.update();
+
+			options.animatedProperties[ this.prop ] = true;
+
+			for ( i in options.animatedProperties ) {
+				if ( options.animatedProperties[i] !== true ) {
+					done = false;
+				}
+			}
+
+			if ( done ) {
+				// Reset the overflow
+				if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
+
+					jQuery.each( [ "", "X", "Y" ], function (index, value) {
+						elem.style[ "overflow" + value ] = options.overflow[index];
+					});
+				}
+
+				// Hide the element if the "hide" operation was done
+				if ( options.hide ) {
+					jQuery(elem).hide();
+				}
+
+				// Reset the properties, if the item has been hidden or shown
+				if ( options.hide || options.show ) {
+					for ( var p in options.animatedProperties ) {
+						jQuery.style( elem, p, options.orig[p] );
+					}
+				}
+
+				// Execute the complete function
+				options.complete.call( elem );
+			}
+
+			return false;
+
+		} else {
+			// classical easing cannot be used with an Infinity duration
+			if ( options.duration == Infinity ) {
+				this.now = t;
+			} else {
+				n = t - this.startTime;
+
+				this.state = n / options.duration;
+				// Perform the easing function, defaults to swing
+				this.pos = jQuery.easing[options.animatedProperties[this.prop]](this.state, n, 0, 1, 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,
+			i = timers.length;
+		while ( i-- ) {
+			if ( !timers[i]() ) {
+				timers.splice(i, 1);
+			}
+		}
+
+		if ( !timers.length ) {
+			jQuery.fx.stop();
+		}
+	},
+
+	interval: 13,
+
+	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;
+	};
+}
+
+// Try to restore the default display value of an element
+function defaultDisplay( nodeName ) {
+
+	if ( !elemdisplay[ nodeName ] ) {
+
+		var elem = jQuery( "<" + nodeName + ">" ).appendTo( "body" ),
+			display = elem.css( "display" );
+
+		elem.remove();
+
+		// If the simple way fails,
+		// get element's real default display by attaching it to a temp iframe
+		if ( display === "none" || display === "" ) {
+			// No iframe to use yet, so create it
+			if ( !iframe ) {
+				iframe = document.createElement( "iframe" );
+				iframe.frameBorder = iframe.width = iframe.height = 0;
+			}
+
+			document.body.appendChild( iframe );
+
+			// Create a cacheable copy of the iframe document on first call.
+			// IE and Opera will allow us to reuse the iframeDoc without re-writing the fake html
+			// document to it, Webkit & Firefox won't allow reusing the iframe document
+			if ( !iframeDoc || !iframe.createElement ) {
+				iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
+				iframeDoc.write( "<!doctype><html><body></body></html>" );
+			}
+
+			elem = iframeDoc.createElement( nodeName );
+
+			iframeDoc.body.appendChild( elem );
+
+			display = jQuery.css( elem, "display" );
+
+			document.body.removeChild( iframe );
+		}
+
+		// Store the correct default display
+		elemdisplay[ nodeName ] = display;
+	}
+
+	return elemdisplay[ nodeName ];
+}
+
+
+
+
+var rtable = /^t(?:able|d|h)$/i,
+	rroot = /^(?:body|html)$/i;
+
+if ( "getBoundingClientRect" in document.documentElement ) {
+	jQuery.fn.offset = function( options ) {
+		var elem = this[0], box;
+
+		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 );
+		}
+
+		try {
+			box = elem.getBoundingClientRect();
+		} catch(e) {}
+
+		var doc = elem.ownerDocument,
+			docElem = doc.documentElement;
+
+		// Make sure we're not dealing with a disconnected DOM node
+		if ( !box || !jQuery.contains( docElem, elem ) ) {
+			return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
+		}
+
+		var body = doc.body,
+			win = getWindow(doc),
+			clientTop  = docElem.clientTop  || body.clientTop  || 0,
+			clientLeft = docElem.clientLeft || body.clientLeft || 0,
+			scrollTop  = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop,
+			scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
+			top  = box.top  + scrollTop  - clientTop,
+			left = box.left + 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 computedStyle,
+			offsetParent = elem.offsetParent,
+			prevOffsetParent = elem,
+			doc = elem.ownerDocument,
+			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 && rtable.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.css(body, "marginTop") ) || 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 );
+		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.css(body, "marginTop") ) || 0;
+			left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
+		}
+
+		return { top: top, left: left };
+	},
+
+	setOffset: function( elem, options, i ) {
+		var position = jQuery.css( elem, "position" );
+
+		// set position first, in-case top/left are set even on static elem
+		if ( position === "static" ) {
+			elem.style.position = "relative";
+		}
+
+		var curElem = jQuery( elem ),
+			curOffset = curElem.offset(),
+			curCSSTop = jQuery.css( elem, "top" ),
+			curCSSLeft = jQuery.css( elem, "left" ),
+			calculatePosition = (position === "absolute" || position === "fixed") && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
+			props = {}, curPosition = {}, curTop, curLeft;
+
+		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+		if ( calculatePosition ) {
+			curPosition = curElem.position();
+			curTop = curPosition.top;
+			curLeft = curPosition.left;
+		} else {
+			curTop = parseFloat( curCSSTop ) || 0;
+			curLeft = parseFloat( curCSSLeft ) || 0;
+		}
+
+		if ( jQuery.isFunction( options ) ) {
+			options = options.call( elem, i, curOffset );
+		}
+
+		if (options.top != null) {
+			props.top = (options.top - curOffset.top) + curTop;
+		}
+		if (options.left != null) {
+			props.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 = rroot.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.css(elem, "marginTop") ) || 0;
+		offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
+
+		// Add offsetParent borders
+		parentOffset.top  += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
+		parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 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 && (!rroot.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, win;
+
+		if ( val === undefined ) {
+			elem = this[ 0 ];
+
+			if ( !elem ) {
+				return null;
+			}
+
+			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 ];
+		}
+
+		// 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;
+			}
+		});
+	};
+});
+
+function getWindow( elem ) {
+	return jQuery.isWindow( elem ) ?
+		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] ?
+			parseFloat( jQuery.css( this[0], type, "padding" ) ) :
+			null;
+	};
+
+	// outerHeight and outerWidth
+	jQuery.fn["outer" + name] = function( margin ) {
+		return this[0] ?
+			parseFloat( jQuery.css( this[0], type, 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 ]() ) );
+			});
+		}
+
+		if ( jQuery.isWindow( elem ) ) {
+			// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
+			// 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
+			var docElemProp = elem.document.documentElement[ "client" + name ];
+			return elem.document.compatMode === "CSS1Compat" && docElemProp ||
+				elem.document.body[ "client" + name ] || docElemProp;
+
+		// Get document width or height
+		} else if ( elem.nodeType === 9 ) {
+			// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
+			return 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
+		} else if ( size === undefined ) {
+			var orig = jQuery.css( elem, type ),
+				ret = parseFloat( orig );
+
+			return jQuery.isNaN( ret ) ? orig : ret;
+
+		// Set the width or height on the element (default to pixels if value is unitless)
+		} else {
+			return this.css( type, typeof size === "string" ? size : size + "px" );
+		}
+	};
+
+});
+
+
+window.jQuery = window.$ = jQuery;
+})(window);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/static/hdabo/js/jquery.min.js	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,16 @@
+/*!
+ * jQuery JavaScript Library v1.6
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Mon May 2 13:50:00 2011 -0400
+ */
+(function(a,b){function cw(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function ct(a){if(!ch[a]){var b=f("<"+a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d===""){ci||(ci=c.createElement("iframe"),ci.frameBorder=ci.width=ci.height=0),c.body.appendChild(ci);if(!cj||!ci.createElement)cj=(ci.contentWindow||ci.contentDocument).document,cj.write("<!doctype><html><body></body></html>");b=cj.createElement(a),cj.body.appendChild(b),d=f.css(b,"display"),c.body.removeChild(ci)}ch[a]=d}return ch[a]}function cs(a,b){var c={};f.each(cn.concat.apply([],cn.slice(0,b)),function(){c[this]=a});return c}function cr(){co=b}function cq(){setTimeout(cr,0);return co=f.now()}function cg(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function cf(){try{return new a.XMLHttpRequest}catch(b){}}function b_(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function b$(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bZ(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bD.test(a)?d(a,e):bZ(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bZ(a+"["+e+"]",b[e],c,d);else d(a,b)}function bY(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bS,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bY(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bY(a,c,d,e,"*",g));return l}function bX(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bO),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bB(a,b,c){var d=b==="width"?bv:bw,e=b==="width"?a.offsetWidth:a.offsetHeight;if(c==="border")return e;f.each(d,function(){c||(e-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?e+=parseFloat(f.css(a,"margin"+this))||0:e-=parseFloat(f.css(a,"border"+this+"Width"))||0});return e}function bl(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval(b.text||b.textContent||b.innerHTML||""),b.parentNode&&b.parentNode.removeChild(b)}function bk(a){f.nodeName(a,"input")?bj(a):a.getElementsByTagName&&f.grep(a.getElementsByTagName("input"),bj)}function bj(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bi(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bh(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bg(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bf(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function W(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(R.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(a,b){return(a&&a!=="*"?a+".":"")+b.replace(z,"`").replace(A,"&")}function M(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(x,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function K(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function E(){return!0}function D(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){name="data-"+c.replace(j,"$1-$2").toLowerCase(),d=a.getAttribute(name);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(e){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function H(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(H,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=d.userAgent,x,y,z,A=Object.prototype.toString,B=Object.prototype.hasOwnProperty,C=Array.prototype.push,D=Array.prototype.slice,E=String.prototype.trim,F=Array.prototype.indexOf,G={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?g=[null,a,null]:g=i.exec(a);if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6",length:0,size:function(){return this.length},toArray:function(){return D.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?C.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),y.done(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(D.apply(this,arguments),"slice",D.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:C,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;y.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!y){y=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",z,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",z),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&H()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):G[A.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!B.call(a,"constructor")&&!B.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||B.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:E?function(a){return a==null?"":E.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?C.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(F)return F.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=D.call(arguments,2),g=function(){return a.apply(c,f.concat(D.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(c,d){d&&d instanceof e&&!(d instanceof a)&&(d=a(d));return e.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){G["[object "+b+"]"]=b.toLowerCase()}),x=e.uaMatch(w),x.browser&&(e.browser[x.browser]=!0,e.browser.version=x.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?z=function(){c.removeEventListener("DOMContentLoaded",z,!1),e.ready()}:c.attachEvent&&(z=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",z),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g](h)}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b,d,e,f,g,h,i,j,k,l,m,n,o,p,q;a.setAttribute("className","t"),a.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",b=a.getElementsByTagName("*"),d=a.getElementsByTagName("a")[0];if(!b||!b.length||!d)return{};e=c.createElement("select"),f=e.appendChild(c.createElement("option")),g=a.getElementsByTagName("input")[0],i={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.55$/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:g.value==="on",optSelected:f.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},g.checked=!0,i.noCloneChecked=g.cloneNode(!0).checked,e.disabled=!0,i.optDisabled=!f.disabled;try{delete a.test}catch(r){i.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function click(){i.noCloneEvent=!1,a.detachEvent("onclick",click)}),a.cloneNode(!0).fireEvent("onclick")),g=c.createElement("input"),g.value="t",g.setAttribute("type","radio"),i.radioValue=g.value==="t",g.setAttribute("checked","checked"),a.appendChild(g),j=c.createDocumentFragment(),j.appendChild(a.firstChild),i.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",k=c.createElement("body"),l={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"};for(p in l)k.style[p]=l[p];k.appendChild(a),c.documentElement.appendChild(k),i.appendChecked=g.checked,i.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,i.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",i.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",m=a.getElementsByTagName("td"),q=m[0].offsetHeight===0,m[0].style.display="",m[1].style.display="none",i.reliableHiddenOffsets=q&&m[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(h=c.createElement("div"),h.style.width="0",h.style.marginRight="0",a.appendChild(h),i.reliableMarginRight=(parseInt(c.defaultView.getComputedStyle(h,null).marginRight,10)||0)===0),k.innerHTML="",c.documentElement.removeChild(k);if(a.attachEvent)for(p in{submit:1,change:1,focusin:1})o="on"+p,q=o in a,q||(a.setAttribute(o,"return;"),q=typeof a[o]=="function"),i[p+"Bubbles"]=q;return i}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[c]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[c]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function l(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark";while(g--)if(tmp=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,tmp.done(l);l();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:data-|aria-)/,u=/\:/,v;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.addClass(a.call(this,b,c.attr("class")||""))});if(a&&typeof a=="string"){var b=(a||"").split(o);for(var c=0,d=this.length;c<d;c++){var e=this[c];if(e.nodeType===1)if(!e.className)e.className=a;else{var g=" "+e.className+" ",h=e.className;for(var i=0,j=b.length;i<j;i++)g.indexOf(" "+b[i]+" ")<0&&(h+=" "+b[i]);e.className=f.trim(h)}}}return this},removeClass:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.removeClass(a.call(this,b,c.attr("class")))});if(a&&typeof a=="string"||a===b){var c=(a||"").split(o);for(var d=0,e=this.length;d<e;d++){var g=this[d];if(g.nodeType===1&&g.className)if(a){var h=(" "+g.className+" ").replace(n," ");for(var i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){var d=f(this);d.toggleClass(a.call(this,c,d.attr("class"),b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if((" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;return(e.value||"").replace(p,"")}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||"set"in c&&c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b=a.selectedIndex,c=[],d=a.options,e=a.type==="select-one";if(b<0)return null;for(var g=e?b:0,h=e?b+1:d.length;g<h;g++){var i=d[g];if(i.selected&&(f.support.optDisabled?!i.disabled:i.getAttribute("disabled")===null)&&(!i.parentNode.disabled||!f.nodeName(i.parentNode,"optgroup"))){value=f(i).val();if(e)return value;c.push(value)}}if(e&&!c.length&&d.length)return f(d[b]).val();return c},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex",readonly:"readOnly"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);var h,i,j=g!==1||!f.isXMLDoc(a);c=j&&f.attrFix[c]||c,i=f.attrHooks[c]||(v&&(f.nodeName(a,"form")||u.test(c))?v:b);if(d!==b){if(d===null||d===!1&&!t.test(c)){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;d===!0&&!t.test(c)&&(d=c),a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j)return i.get(a,c);h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.getAttribute("value");a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}},propFix:{},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);c=i&&f.propFix[c]||c,h=f.propHooks[c];return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),f.support.getSetAttribute||(f.attrFix=f.extend(f.attrFix,{"for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder"}),v=f.attrHooks.name=f.attrHooks.value=f.valHooks.button={get:function(a,c){var d;if(c==="value"&&!f.nodeName(a,"button"))return a.getAttribute(c);d=a.getAttributeNode(c);return d&&d.specified?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=Object.prototype.hasOwnProperty,x=/\.(.*)$/,y=/^(?:textarea|input|select)$/i,z=/\./g,A=/ /g,B=/[^\w\s.|`]/g,C=function(a){return a.replace(B,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=D;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=D);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),C).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.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 pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,N(a.origType,a.selector),f.extend({},a,{handler:M,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,N(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?E:D):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=E;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=E;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=E,this.stopPropagation()},isDefaultPrevented:D,isPropagationStopped:D,isImmediatePropagationStopped:D};var F=function(a){var b=a.relatedTarget;try{if(b&&b!==c&&!b.parentNode)return;while(b&&b!==this)b=b.parentNode;b!==this&&(a.type=a.data,f.event.handle.apply(this,arguments))}catch(d){}},G=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?G:F,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?G:F)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=b.type;(c==="submit"||c==="image")&&f(b).closest("form").length&&K("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=b.type;(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&K("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var H,I=function(a){var b=a.type,c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},J=function J(a){var c=a.target,d,e;if(!!y.test(c.nodeName)&&!c.readOnly){d=f._data(c,"_change_data"),e=I(c),(a.type!=="focusout"||c.type!=="radio")&&f._data(c,"_change_data",e);if(d===b||e===d)return;if(d!=null||e)a.type="change",a.liveFired=b,f.event.trigger(a,arguments[1],c)}};f.event.special.change={filters:{focusout:J,beforedeactivate:J,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&J.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&J.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",I(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in H)f.event.add(this,c+".specialChange",H[c]);return y.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return y.test(this.nodeName)}},H=f.event.special.change.filters,H.focus=H.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var L={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||D,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=x.exec(h),k="",j&&(k=j[0],h=h.replace(x,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,L[h]?(a.push(L[h]+k),h=h+k):h=(L[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+N(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+N(h,m),e)}return this}}),f.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){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=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|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){return a.nodeName.toLowerCase()==="input"&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(a===b){g=!0;return 0}if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var O=/Until$/,P=/^(?:parents|prevUntil|prevAll)/,Q=/,/,R=/^.[^:#\[\.,]*$/,S=Array.prototype.slice,T=f.expr.match.POS,U={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(W(this,a,!1),"not",a)},filter:function(a){return this.pushStack(W(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=T.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var X=/ jQuery\d+="(?:\d+|null)"/g,Y=/^\s+/,Z=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,$=/<([\w:]+)/,_=/<tbody/i,ba=/<|&#?\w+;/,bb=/<(?:script|object|embed|option|style)/i,bc=/checked\s*(?:[^=]|=\s*.checked.)/i,bd=/\/(java|ecma)script/i,be={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,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(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,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(X,""):null;if(typeof a=="string"&&!bb.test(a)&&(f.support.leadingWhitespace||!Y.test(a))&&!be[($.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Z,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bc.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bf(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bl)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i=b&&b[0]?b[0].ownerDocument||b[0]:c;a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!bb.test(a[0])&&(f.support.checkClone||!bc.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[];for(var i=0,j;(j=a[i])!=null;i++){typeof j=="number"&&(j+="");if(!j)continue;if(typeof j=="string")if(!ba.test(j))j=b.createTextNode(j);else{j=j.replace(Z,"<$1></$2>");var k=($.exec(j)||["",""])[1].toLowerCase(),l=be[k]||be._default,m=l[0],n=b.createElement("div");n.innerHTML=l[1]+j+l[2];while(m--)n=n.lastChild;if(!f.support.tbody){var o=_.test(j),p=k==="table"&&!o?n.firstChild&&n.firstChild.childNodes:l[1]==="<table>"&&!o?n.childNodes:[];for(var q=p.length-1;q>=0;--q)f.nodeName(p[q],"tbody")&&!p[q].childNodes.length&&p[q].parentNode.removeChild(p[q])}!f.support.leadingWhitespace&&Y.test(j)&&n.insertBefore(b.createTextNode(Y.exec(j)[0]),n.firstChild),j=n.childNodes}var r;if(!f.support.appendChecked)if(j[0]&&typeof (r=j.length)=="number")for(i=0;i<r;i++)bk(j[i]);else bk(j);j.nodeType?h.push(j):h=f.merge(h,j)}if(d){g=function(a){return!a.type||bd.test(a.type)};for(i=0;h[i];i++)if(e&&f.nodeName(h[i],"script")&&(!h[i].type||h[i].type.toLowerCase()==="text/javascript"))e.push(h[i].parentNode?h[i].parentNode.removeChild(h[i]):h[i]);else{if(h[i].nodeType===1){var s=f.grep(h[i].getElementsByTagName("script"),g);h.splice.apply(h,[i+1,0].concat(s))}d.appendChild(h[i])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bm=/alpha\([^)]*\)/i,bn=/opacity=([^)]*)/,bo=/-([a-z])/ig,bp=/([A-Z]|^ms)/g,bq=/^-?\d+(?:px)?$/i,br=/^-?\d/,bs=/^[+\-]=/,bt=/[^+\-\.\de]+/g,bu={position:"absolute",visibility:"hidden",display:"block"},bv=["Left","Right"],bw=["Top","Bottom"],bx,by,bz,bA=function(a,b){return b.toUpperCase()};f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bx(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{zIndex:!0,fontWeight:!0,opacity:!0,zoom:!0,lineHeight:!0,widows:!0,orphans:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d;if(h==="number"&&isNaN(d)||d==null)return;h==="string"&&bs.test(d)&&(d=+d.replace(bt,"")+parseFloat(f.css(a,c))),h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bx)return bx(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]},camelCase:function(a){return a.replace(bo,bA)}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){a.offsetWidth!==0?e=bB(a,b,d):f.swap(a,bu,function(){e=bB(a,b,d)});if(e<=0){e=bx(a,b,b),e==="0px"&&bz&&(e=bz(a,b,b));if(e!=null)return e===""||e==="auto"?"0px":e}if(e<0||e==null){e=a.style[b];return e===""||e==="auto"?"0px":e}return typeof e=="string"?e:e+"px"}},set:function(a,b){if(!bq.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bx(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(by=function(a,c){var d,e,g;c=c.replace(bp,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bz=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bq.test(d)&&br.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bx=by||bz,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bC=/%20/g,bD=/\[\]$/,bE=/\r?\n/g,bF=/#.*$/,bG=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bH=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\/\//,bL=/\?/,bM=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bN=/^(?:select|textarea)/i,bO=/\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV;try{bU=e.href}catch(bW){bU=c.createElement("a"),bU.href="",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bR)return bR.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bM,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bE,"\r\n")}}):{name:b.name,value:c.replace(bE,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bU,isLocal:bI.test(bV[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bX(bS),ajaxTransport:bX(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?b$(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=b_(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bF,"").replace(bK,bV[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]==="http:"?80:443))==(bV[3]||(bV[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bY(bS,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bL.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,"$1_="+x);d.url=y+(y===d.url?(bL.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bY(bT,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bZ(g,a[g],c,e);return d.join("&").replace(bC,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var ca=f.now(),cb=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+ca++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cb.test(b.url)||e&&cb.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cb,l),b.url===j&&(e&&(k=k.replace(cb,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cc=a.ActiveXObject?function(){for(var a in ce)ce[a](0,1)}:!1,cd=0,ce;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cf()||cg()}:cf,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cc&&delete ce[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cd,cc&&(ce||(ce={},f(a).unload(cc)),ce[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ch={},ci,cj,ck=/^(?:toggle|show|hide)$/,cl=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cm,cn=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],co,cp=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cs("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",ct(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cs("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cs("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g];if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=ct(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block")),b.animatedProperties[g]=f.isArray(h)?h[1]:b.specialEasing&&b.specialEasing[g]||b.easing||"swing"}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],ck.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=cl.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[g]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cs("show",1),slideUp:cs("hide",1),slideToggle:cs("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this),f.isFunction(d.old)&&d.old.call(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function h(a){return d.step(a)}var d=this,e=f.fx,g;this.startTime=co||cq(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,h.elem=this.elem,h()&&f.timers.push(h)&&!cm&&(cp?(cm=1,g=function(){cm&&(cp(g),e.tick())},cp(g)):cm=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=co||cq(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a=f.timers,b=a.length;while(b--)a[b]()||a.splice(b,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cm),cm=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){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:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cu=/^t(?:able|d|h)$/i,cv=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cw(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cu.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<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>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cv.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cv.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cw(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cw(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){return this[0]?parseFloat(f.css(this[0],d,"padding")):null},f.fn["outer"+c]=function(a){return this[0]?parseFloat(f.css(this[0],d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/static/hdabo/js/jquery.nyroModal-ie6.min.js	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,9 @@
+/*
+ * nyroModal v2.alpha
+ * for IE6
+ *
+ */
+jQuery(function($,undefined){var $b=$('body'),$w=$(window),$h=$('html'),shown=0,zIndex=100;function isFullScreen(){return screen.height==$w.height()+58;};$b.append('<style type="text/css">'+'.nyroModalCloseButton{font-size: 1px}'+'.nyroModalLink .nyroModalPrev, .nyroModalDom .nyroModalPrev, .nyroModalForm .nyroModalPrev, .nyroModalFormFile .nyroModalPrev {left: -10px}'+'</style>');$.nmObj({_reposition:function(){var elts=this.elts.cont.find('.nmReposition');if(elts.length){var outer=this.getInternal()._getOuter($b),fs=isFullScreen();var space={top:-(fs?outer.h.border/2:0),left:-(fs?outer.w.border/2:0)};elts.each(function(){var me=$(this),offset=me.offset();me.css({top:offset.top-space.top,left:offset.left-space.left});});this.elts.cont.after(elts);}
+this.elts.cont.css('overflow','auto');}});$.nmInternal({_calculateFullSize:function(){var scrollHeight=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),offsetHeight=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight),scrollWidth=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth),offsetWidth=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);this.fullSize={wW:$w.width(),wH:$w.height()};this.fullSize.h=scrollHeight<offsetHeight?$w.height():scrollHeight;this.fullSize.w=scrollWidth<offsetWidth?$w.width():scrollWidth;this.fullSize.viewW=Math.min(this.fullSize.w,this.fullSize.wW);this.fullSize.viewH=Math.min(this.fullSize.h,this.fullSize.wH);}});$.nmAnims({basic:{resize:function(nm,clb){var space=nm.getInternal()._getSpaceReposition(),outer=nm.getInternal()._getOuter(nm.elts.cont);nm.elts.cont.css({width:nm.sizes.w,height:nm.sizes.h,top:space.top+(nm.getInternal().fullSize.viewH-outer.h.total-nm.sizes.h)/2,left:space.left+(nm.getInternal().fullSize.viewW-outer.w.total-nm.sizes.w)/2});clb();}},fade:{resize:function(nm,clb){var space=nm.getInternal()._getSpaceReposition(),outer=nm.getInternal()._getOuter(nm.elts.cont);nm.elts.cont.animate({width:nm.sizes.w,height:nm.sizes.h,top:space.top+(nm.getInternal().fullSize.viewH-outer.h.total-nm.sizes.h)/2,left:space.left+(nm.getInternal().fullSize.viewW-outer.w.total-nm.sizes.w)/2},clb);}}});$.nmFilters({ie6:{is:function(){return true;},initElts:function(nm){nm.store.ie6=true;if(shown==0){$h.css({overflow:'hidden'});var w=$b.width(),h=$b.outerHeight(true)+'px';if($w.height()>=$b.outerHeight(true)){h=$w.height()+'px';}else
+w+=20;w+='px';$b.css({width:w,height:h,position:'static',overflow:'hidden'});}},beforeShowBg:function(nm){var space=nm.getInternal()._getSpaceReposition(),outer=nm.getInternal()._getOuter($b);nm.elts.bg.css({position:'absolute',top:space.top,left:space.left,width:nm.getInternal().fullSize.viewW+200,height:nm.getInternal().fullSize.viewH+200});shown++;},afterHideBg:function(nm){if(nm.store.ie6){nm.store.ie6=false;shown--;}
+if(shown==0){$h.css({overflow:''});$b.css({width:'',height:'',position:'',overflow:''});}},size:function(nm){if(!nm._hasFilter('image')&&!nm._hasFilter('swf')){if(nm.sizes.h<250)nm.sizes.h=250;if(nm.sizes.w<250)nm.sizes.w=250;else if(nm.sizes.w>1000)nm.sizes.w=1000;}},close:function(nm){if(nm.store.ie6){nm.store.ie6=false;shown--;}},beforeShowLoad:function(nm){var space=nm.getInternal()._getSpaceReposition(),outer=nm.getInternal()._getOuter(nm.elts.load);nm.elts.load.css({'z-index':zIndex++,position:'absolute',top:space.top+(nm.getInternal().fullSize.viewH-nm.elts.load.height()-outer.h.margin)/2,left:space.left+(nm.getInternal().fullSize.viewW-nm.elts.load.width()-outer.w.margin)/2});},beforeShowCont:function(nm){var space=nm.getInternal()._getSpaceReposition(),outer=nm.getInternal()._getOuter(nm.elts.cont);nm.elts.cont.css({'z-index':zIndex++,position:'absolute',top:space.top+(nm.getInternal().fullSize.viewH-outer.h.total-nm.sizes.h)/2,left:space.left+(nm.getInternal().fullSize.viewW-outer.w.total-nm.sizes.w)/2});}}});});
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/static/hdabo/js/jquery.nyroModal.min.js	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,32 @@
+/*
+ * nyroModal v2.0.0
+ * Core
+ *
+ * 
+ * Included parts:
+ * - anims.fade
+ * - filters.title
+ * - filters.gallery
+ * - filters.link
+ * - filters.dom
+ * - filters.image
+ * - filters.swf
+ * - filters.form
+ * - filters.formFile
+ * - filters.iframe
+ * - filters.iframeForm
+ * - filters.embedly
+ */
+ jQuery(function($,undefined){var $w=$(window),$d=$(document),$b=$('body'),baseHref=$('base').attr('href'),_nmObj={filters:[],callbacks:{},loadFilter:undefined,modal:false,closeOnEscape:true,closeOnClick:true,useKeyHandler:false,showCloseButton:true,closeButton:'<a href="#" class="nyroModalClose nyroModalCloseButton nmReposition" title="close">Close</a>',stack:false,header:undefined,footer:undefined,galleryLoop:true,galleryCounts:true,ltr:true,imageRegex:'[^\.]\.(jpg|jpeg|png|tiff|gif|bmp)\s*$',selIndicator:'nyroModalSel',swf:{allowFullScreen:'true',allowscriptaccess:'always',wmode:'transparent'},store:{},errorMsg:'An error occured',elts:{all:undefined,bg:undefined,load:undefined,cont:undefined,hidden:undefined},sizes:{initW:undefined,initH:undefined,w:undefined,h:undefined,minW:undefined,minH:undefined,wMargin:undefined,hMargin:undefined},anim:{def:undefined,showBg:undefined,hideBg:undefined,showLoad:undefined,hideLoad:undefined,showCont:undefined,hideCont:undefined,showTrans:undefined,hideTrans:undefined,resize:undefined},_open:false,_bgReady:false,_opened:false,_loading:false,_animated:false,_transition:false,_nmOpener:undefined,_nbContentLoading:0,_scripts:'',_scriptsShown:'',saveObj:function(){this.opener.data('nmObj',this);},open:function(){this.getInternal()._pushStack(this.opener);this._opened=false;this._bgReady=false;this._open=true;this._initElts();this._load();this._nbContentLoading=0;this._callAnim('showBg',$.proxy(function(){this._bgReady=true;if(this._nmOpener){this._nmOpener._close();this._nmOpener._bgReady=false;this._nmOpener._loading=false;this._nmOpener._animated=false;this._nmOpener._opened=false;this._nmOpener._open=false;this._nmOpener.elts.cont=this._nmOpener.elts.hidden=this._nmOpener.elts.load=this._nmOpener.elts.bg=this._nmOpener.elts.all=undefined;this._nmOpener.saveObj();this._nmOpener=undefined;}this._contentLoading();},this));},resize:function(){this.sizes.w=this.sizes.initW;this.sizes.h=this.sizes.initH;this._unreposition();this.size();this._callAnim('resize',$.proxy(function(){this._reposition();},this));},size:function(){var maxHeight=this.getInternal().fullSize.viewH-this.sizes.hMargin,maxWidth=this.getInternal().fullSize.viewW-this.sizes.wMargin;if(this.sizes.minW&&this.sizes.minW>this.sizes.w)this.sizes.w=this.sizes.minW;if(this.sizes.minH&&this.sizes.minH>this.sizes.h)this.sizes.h=this.sizes.minH;if(this.sizes.h>maxHeight||this.sizes.w>maxWidth){this.sizes.h=Math.min(this.sizes.h,maxHeight);this.sizes.w=Math.min(this.sizes.w,maxWidth);}this._callFilters('size');},getForNewLinks:function(){var ret;if(this.stack){ret=$.extend(true,{},this);ret._nmOpener=undefined;ret.elts.all=undefined;}else{ret=$.extend({},this);ret._nmOpener=this;}ret.filters=[];ret.opener=undefined;ret._open=false;return ret;},keyHandle:function(e){this.keyEvent=e;this._callFilters('keyHandle');this.keyEvent=undefined;delete(this.keyEvent);},getInternal:function(){return _internal;},_close:function(){this.getInternal()._removeStack(this.opener);this._opened=false;this._open=false;this._callFilters('close');},close:function(){this._close();this._callFilters('beforeClose');var self=this;this._unreposition();self._callAnim('hideCont',function(){self._callAnim('hideLoad',function(){self._callAnim('hideBg',function(){self._callFilters('afterClose');self.elts.cont.remove();self.elts.hidden.remove();self.elts.load.remove();self.elts.bg.remove();self.elts.all.remove();self.elts.cont=self.elts.hidden=self.elts.load=self.elts.bg=self.elts.all=undefined;});});});},_initElts:function(){if(!this.stack&&this.getInternal().stack.length>1)this.elts=$(_internal.stack[_internal.stack.length-2]).data('nmObj').elts;if(!this.elts.all||this.elts.all.closest('body').length==0)this.elts.all=this.elts.bg=this.elts.cont=this.elts.hidden=this.elts.load=undefined;if(!this.elts.all)this.elts.all=$('<div />').appendTo(this.getInternal()._container);if(!this.elts.bg)this.elts.bg=$('<div />').hide().appendTo(this.elts.all);if(!this.elts.cont)this.elts.cont=$('<div />').hide().appendTo(this.elts.all);if(!this.elts.hidden)this.elts.hidden=$('<div />').hide().appendTo(this.elts.all);this.elts.hidden.empty();if(!this.elts.load)this.elts.load=$('<div />').hide().appendTo(this.elts.all);this._callFilters('initElts');},_error:function(){this._callFilters('error');},_setCont:function(html,selector){if(selector){var tmp=[],i=0;html=html .replace(/\r\n/gi,'nyroModalLN').replace(/<script(.|\s)*?\/script>/gi,function(x){tmp[i]=x;return '<pre class=nyroModalScript rel="'+(i++)+'"></pre>';});var cur=$('<div>'+html+'</div>').find(selector);if(cur.length){html=cur.html().replace(/<pre class="?nyroModalScript"? rel="?(.?)"?><\/pre>/gi,function(x,y,z){return tmp[y];}).replace(/nyroModalLN/gi,"\r\n");}else{this._error();return;}}this.elts.hidden .append(this._filterScripts(html)).prepend(this.header).append(this.footer).wrapInner('<div class="nyroModal'+ucfirst(this.loadFilter)+'" />');this.sizes.initW=this.sizes.w=this.elts.hidden.width();this.sizes.initH=this.sizes.h=this.elts.hidden.height();var outer=this.getInternal()._getOuter(this.elts.cont);this.sizes.hMargin=outer.h.total;this.sizes.wMargin=outer.w.total;this.size();this.loading=false;this._callFilters('filledContent');this._contentLoading();},_filterScripts:function(data){if(typeof data!='string')return data;this._scripts=[];this._scriptsShown=[];var start=0,stStart='<script',stEnd='</script>',endLn=stEnd.length,pos,pos2,tmp;while((pos=data.indexOf(stStart,start))>-1){pos2=data.indexOf(stEnd)+endLn;tmp=$(data.substring(pos,pos2));if(!tmp.attr('src')||tmp.attr('rel')=='forceLoad'){if(tmp.attr('rev')=='shown')this._scriptsShown.push(tmp.get(0));else this._scripts.push(tmp.get(0));}data=data.substring(0,pos)+data.substr(pos2);start=pos;}return data;},_hasFilter:function(filter){var ret=false;$.each(this.filters,function(i,f){ret=ret||f==filter;});return ret;},_delFilter:function(filter){this.filters=$.map(this.filters,function(v){if(v!=filter)return v;});},_callFilters:function(fct){this.getInternal()._debug(fct);var ret=[],self=this;$.each(this.filters,function(i,f){ret[f]=self._callFilter(f,fct);});if(this.callbacks[fct]&&$.isFunction(this.callbacks[fct]))this.callbacks[fct](this);return ret;},_callFilter:function(f,fct){if(_filters[f]&&_filters[f][fct]&&$.isFunction(_filters[f][fct]))return _filters[f][fct](this);return undefined;},_callAnim:function(fct,clb){this.getInternal()._debug(fct);this._callFilters('before'+ucfirst(fct));if(!this._animated){this._animated=true;if(!$.isFunction(clb))clb=$.noop;var set=this.anim[fct]||this.anim.def||'basic';if(!_animations[set]||!_animations[set][fct]||!$.isFunction(_animations[set][fct]))set='basic';_animations[set][fct](this,$.proxy(function(){this._animated=false;this._callFilters('after'+ucfirst(fct));clb();},this));}},_load:function(){this.getInternal()._debug('_load');if(!this.loading&&this.loadFilter){this.loading=true;this._callFilter(this.loadFilter,'load');}},_contentLoading:function(){if(!this._animated&&this._bgReady){if(!this._transition&&this.elts.cont.html().length>0)this._transition=true;this._nbContentLoading++;if(!this.loading){if(!this._opened){this._opened=true;if(this._transition){var fct=$.proxy(function(){this._writeContent();this._callFilters('beforeShowCont');this._callAnim('hideTrans',$.proxy(function(){this._transition=false;this.elts.cont.append(this._scriptsShown);this._reposition();this._callFilters('afterShowCont');},this));},this);if(this._nbContentLoading==1){this._unreposition();this._callAnim('showTrans',fct);}else{fct();}}else{this._callAnim('hideLoad',$.proxy(function(){this._writeContent();this._callAnim('showCont',$.proxy(function(){this.elts.cont.append(this._scriptsShown);this._reposition();},this));},this));}}}else if(this._nbContentLoading==1){var outer=this.getInternal()._getOuter(this.elts.load);this.elts.load .css({position:'fixed',top:(this.getInternal().fullSize.viewH-this.elts.load.height()-outer.h.margin)/2,left:(this.getInternal().fullSize.viewW-this.elts.load.width()-outer.w.margin)/2});if(this._transition){this._unreposition();this._callAnim('showTrans',$.proxy(function(){this._contentLoading();},this));}else{this._callAnim('showLoad',$.proxy(function(){this._contentLoading();},this));}}}},_writeContent:function(){this.elts.cont .empty().append(this.elts.hidden.contents()).append(this._scripts).append(this.showCloseButton?this.closeButton:'').css({position:'fixed',width:this.sizes.w,height:this.sizes.h,top:(this.getInternal().fullSize.viewH-this.sizes.h-this.sizes.hMargin)/2,left:(this.getInternal().fullSize.viewW-this.sizes.w-this.sizes.wMargin)/2});},_reposition:function(){var elts=this.elts.cont.find('.nmReposition');if(elts.length){var space=this.getInternal()._getSpaceReposition();elts.each(function(){var me=$(this),offset=me.offset();me.css({position:'fixed',top:offset.top-space.top,left:offset.left-space.left});});this.elts.cont.after(elts);}this.elts.cont.css('overflow','auto');},_unreposition:function(){this.elts.cont.css('overflow','');var elts=this.elts.all.find('.nmReposition');if(elts.length)this.elts.cont.append(elts.removeAttr('style'));}},_internal={firstInit:true,stack:[],fullSize:{w:0,h:0,wW:0,wH:0,viewW:0,viewH:0},nyroModal:function(opts,fullObj){if(_internal.firstInit){_internal._container=$('<div />').appendTo($b);$w.smartresize($.proxy(_internal._resize,_internal));$d.bind('keydown.nyroModal',$.proxy(_internal._keyHandler,_internal));_internal._calculateFullSize();_internal.firstInit=false;}return this.nmInit(opts,fullObj).each(function(){_internal._init($(this).data('nmObj'));});},nmInit:function(opts,fullObj){return this.each(function(){var me=$(this);if(fullObj)me.data('nmObj',$.extend(true,{opener:me},opts));else me.data('nmObj',me.data('nmObj')?$.extend(true,me.data('nmObj'),opts):$.extend(true,{opener:me},_nmObj,opts));});},nmCall:function(){return this.trigger('nyroModal');},nmManual:function(url,opts){$('<a />',{href:url}).nyroModal(opts).trigger('nyroModal');},nmObj:function(opts){$.extend(true,_nmObj,opts);},nmInternal:function(opts){$.extend(true,_internal,opts);},nmAnims:function(opts){$.extend(true,_animations,opts);},nmFilters:function(opts){$.extend(true,_filters,opts);},nmTop:function(){if(_internal.stack.length)return $(_internal.stack[_internal.stack.length-1]).data('nmObj');return undefined;},_debug:function(msg){if(window.console&&window.console.log)window.console.log(msg);},_container:undefined,_init:function(nm){nm.filters=[];$.each(_filters,function(f,obj){if($.isFunction(obj.is)&&obj.is(nm)){nm.filters.push(f);}});nm._callFilters('init');nm.opener .unbind('nyroModal.nyroModal nmClose.nyroModal nmResize.nyroModal').bind({'nyroModal.nyroModal':function(e){nm.open();return false;},'nmClose.nyroModal':function(){nm.close();return false;},'nmResize.nyroModal':function(){nm.resize();return false;}});},_scrollWidth:(function(){var scrollbarWidth;if($.browser.msie){var $textarea1=$('<textarea cols="10" rows="2"></textarea>').css({position:'absolute',top:-1000,left:-1000}).appendTo($b),$textarea2=$('<textarea cols="10" rows="2" style="overflow: hidden;"></textarea>').css({position:'absolute',top:-1000,left:-1000}).appendTo($b);scrollbarWidth=$textarea1.width()-$textarea2.width();$textarea1.add($textarea2).remove();}else{var $div=$('<div />').css({width:100,height:100,overflow:'auto',position:'absolute',top:-1000,left:-1000}).prependTo($b).append('<div />').find('div').css({width:'100%',height:200});scrollbarWidth=100-$div.width();$div.parent().remove();}return scrollbarWidth;})(),_selNyroModal:function(obj){return $(obj).data('nmObj')?true:false;},_selNyroModalOpen:function(obj){var me=$(obj);return me.data('nmObj')?me.data('nmObj')._open:false;},_keyHandler:function(e){var nmTop=$.nmTop();if(nmTop&&nmTop.useKeyHandler){return nmTop.keyHandle(e);}},_pushStack:function(obj){this.stack=$.map(this.stack,function(elA){if(elA!=obj.get(0))return elA;});this.stack.push(obj.get(0));},_removeStack:function(obj){this.stack=$.map(this.stack,function(elA){if(elA!=obj.get(0))return elA;});},_resize:function(){var opens=$(':nmOpen').each(function(){$(this).data('nmObj')._unreposition();});this._calculateFullSize();opens.trigger('nmResize');},_calculateFullSize:function(){this.fullSize={w:$d.width(),h:$d.height(),wW:$w.width(),wH:$w.height()};this.fullSize.viewW=Math.min(this.fullSize.w,this.fullSize.wW);this.fullSize.viewH=Math.min(this.fullSize.h,this.fullSize.wH);},_getCurCSS:function(elm,name){var ret=parseInt($.curCSS(elm,name,true));return isNaN(ret)?0:ret;},_getOuter:function(elm){elm=elm.get(0);var ret={h:{margin:this._getCurCSS(elm,'marginTop')+this._getCurCSS(elm,'marginBottom'),border:this._getCurCSS(elm,'borderTopWidth')+this._getCurCSS(elm,'borderBottomWidth'),padding:this._getCurCSS(elm,'paddingTop')+this._getCurCSS(elm,'paddingBottom')},w:{margin:this._getCurCSS(elm,'marginLeft')+this._getCurCSS(elm,'marginRight'),border:this._getCurCSS(elm,'borderLeftWidth')+this._getCurCSS(elm,'borderRightWidth'),padding:this._getCurCSS(elm,'paddingLeft')+this._getCurCSS(elm,'paddingRight')}};ret.h.outer=ret.h.margin+ret.h.border;ret.w.outer=ret.w.margin+ret.w.border;ret.h.inner=ret.h.padding+ret.h.border;ret.w.inner=ret.w.padding+ret.w.border;ret.h.total=ret.h.outer+ret.h.padding;ret.w.total=ret.w.outer+ret.w.padding;return ret;},_getSpaceReposition:function(){var outer=this._getOuter($b),ie7=$.browser.msie&&$.browser.version<8&&!(screen.height<=$w.height()+23);return{top:$w.scrollTop()-(!ie7?outer.h.border/2:0),left:$w.scrollLeft()-(!ie7?outer.w.border/2:0)};},_getHash:function(url){if(typeof url=='string'){var hashPos=url.indexOf('#');if(hashPos>-1)return url.substring(hashPos);}return '';},_extractUrl:function(url){var ret={url:undefined,sel:undefined};if(url){var hash=this._getHash(url),hashLoc=this._getHash(window.location.href),curLoc=window.location.href.substring(0,window.location.href.length-hashLoc.length),req=url.substring(0,url.length-hash.length);ret.sel=hash;if(req!=curLoc&&req!=baseHref)ret.url=req;}return ret;}},_animations={basic:{showBg:function(nm,clb){nm.elts.bg.css({opacity:0.7}).show();clb();},hideBg:function(nm,clb){nm.elts.bg.hide();clb();},showLoad:function(nm,clb){nm.elts.load.show();clb();},hideLoad:function(nm,clb){nm.elts.load.hide();clb();},showCont:function(nm,clb){nm.elts.cont.show();clb();},hideCont:function(nm,clb){nm.elts.cont.hide();clb();},showTrans:function(nm,clb){nm.elts.cont.hide();nm.elts.load.show();clb();},hideTrans:function(nm,clb){nm.elts.cont.show();nm.elts.load.hide();clb();},resize:function(nm,clb){nm.elts.cont.css({width:nm.sizes.w,height:nm.sizes.h,top:(nm.getInternal().fullSize.viewH-nm.sizes.h-nm.sizes.hMargin)/2,left:(nm.getInternal().fullSize.viewW-nm.sizes.w-nm.sizes.wMargin)/2});clb();}}},_filters={basic:{is:function(nm){return true;},init:function(nm){if(nm.opener.attr('rev')=='modal')nm.modal=true;if(nm.modal)nm.closeOnEscape=nm.closeOnClick=nm.showCloseButton=false;if(nm.closeOnEscape)nm.useKeyHandler=true;},initElts:function(nm){nm.elts.bg.addClass('nyroModalBg');if(nm.closeOnClick)nm.elts.bg.unbind('click.nyroModal').bind('click.nyroModal',function(e){e.preventDefault();nm.close();});nm.elts.cont.addClass('nyroModalCont');nm.elts.hidden.addClass('nyroModalCont nyroModalHidden');nm.elts.load.addClass('nyroModalCont nyroModalLoad');},error:function(nm){nm.elts.hidden.addClass('nyroModalError');nm.elts.cont.addClass('nyroModalError');nm._setCont(nm.errorMsg);},beforeShowCont:function(nm){nm.elts.cont .find('.nyroModal').nyroModal(nm.getForNewLinks(),true).end().find('.nyroModalClose').bind('click.nyroModal',function(e){e.preventDefault();nm.close();});},keyHandle:function(nm){if(nm.keyEvent.keyCode==27&&nm.closeOnEscape){nm.keyEvent.preventDefault();nm.close();}}},custom:{is:function(nm){return true;}}};$.fn.extend({nm:_internal.nyroModal,nyroModal:_internal.nyroModal,nmInit:_internal.nmInit,nmCall:_internal.nmCall});$.extend({nmManual:_internal.nmManual,nmObj:_internal.nmObj,nmInternal:_internal.nmInternal,nmAnims:_internal.nmAnims,nmFilters:_internal.nmFilters,nmTop:_internal.nmTop});$.expr[':'].nyroModal=$.expr[':'].nm=_internal._selNyroModal;$.expr[':'].nmOpen=_internal._selNyroModalOpen;});(function($,sr){var debounce=function(func,threshold,execAsap){var timeout;return function debounced(){var obj=this,args=arguments;function delayed(){if(!execAsap)func.apply(obj,args);timeout=null;};if(timeout)clearTimeout(timeout);else if(execAsap)func.apply(obj,args);timeout=setTimeout(delayed,threshold||100);};};jQuery.fn[sr]=function(fn){return fn?this.bind('resize',debounce(fn)):this.trigger(sr);};})(jQuery,'smartresize');function ucfirst(str){str+='';var f=str.charAt(0).toUpperCase();return f+str.substr(1);};
+ jQuery(function($,undefined){$.nmAnims({fade:{showBg:function(nm,clb){nm.elts.bg.fadeTo(250,0.7,clb);},hideBg:function(nm,clb){nm.elts.bg.fadeOut(clb);},showLoad:function(nm,clb){nm.elts.load.fadeIn(clb);},hideLoad:function(nm,clb){nm.elts.load.fadeOut(clb);},showCont:function(nm,clb){nm.elts.cont.fadeIn(clb);},hideCont:function(nm,clb){nm.elts.cont.css('overflow','hidden').fadeOut(clb);},showTrans:function(nm,clb){nm.elts.load .css({position:nm.elts.cont.css('position'),top:nm.elts.cont.css('top'),left:nm.elts.cont.css('left'),width:nm.elts.cont.css('width'),height:nm.elts.cont.css('height'),marginTop:nm.elts.cont.css('marginTop'),marginLeft:nm.elts.cont.css('marginLeft')}).fadeIn(function(){nm.elts.cont.hide();clb();});},hideTrans:function(nm,clb){nm.elts.cont.css('visibility','hidden').show();nm.elts.load .css('position',nm.elts.cont.css('position')).animate({top:nm.elts.cont.css('top'),left:nm.elts.cont.css('left'),width:nm.elts.cont.css('width'),height:nm.elts.cont.css('height'),marginTop:nm.elts.cont.css('marginTop'),marginLeft:nm.elts.cont.css('marginLeft')},function(){nm.elts.cont.css('visibility','');nm.elts.load.fadeOut(clb);});},resize:function(nm,clb){nm.elts.cont.animate({width:nm.sizes.w,height:nm.sizes.h,top:(nm.getInternal().fullSize.viewH-nm.sizes.h-nm.sizes.hMargin)/2,left:(nm.getInternal().fullSize.viewW-nm.sizes.w-nm.sizes.wMargin)/2},clb);}}});$.nmObj({anim:{def:'fade'}});});;
+ jQuery(function($,undefined){$.nmFilters({title:{is:function(nm){return nm.opener.is('[title]');},beforeShowCont:function(nm){var offset=nm.elts.cont.offset();nm.store.title=$('<h1 />',{text:nm.opener.attr('title')}).addClass('nyroModalTitle nmReposition');nm.elts.cont.prepend(nm.store.title);},close:function(nm){if(nm.store.title){nm.store.title.remove();nm.store.title=undefined;delete(nm.store.title);}}}});});;
+ jQuery(function($,undefined){$.nmFilters({gallery:{is:function(nm){var ret=nm.opener.is('[rel]:not([rel=external], [rel=nofollow])');if(ret&&nm.galleryCounts&&!nm._hasFilter('title'))nm.filters.push('title');return ret;},init:function(nm){nm.useKeyHandler=true;},keyHandle:function(nm){if(!nm._animated&&nm._opened){if(nm.keyEvent.keyCode==39||nm.keyEvent.keyCode==40){nm.keyEvent.preventDefault();nm._callFilters('galleryNext');}else if(nm.keyEvent.keyCode==37||nm.keyEvent.keyCode==38){nm.keyEvent.preventDefault();nm._callFilters('galleryPrev');}}},initElts:function(nm){var rel=nm.opener.attr('rel'),indexSpace=rel.indexOf(' ');nm.store.gallery=indexSpace>0?rel.substr(0,indexSpace):rel;nm.store.galleryLinks=$('[href][rel="'+nm.store.gallery+'"], [href][rel^="'+nm.store.gallery+' "]');nm.store.galleryIndex=nm.store.galleryLinks.index(nm.opener);},beforeShowCont:function(nm){if(nm.galleryCounts&&nm.store.title&&nm.store.galleryLinks.length>1){var curTitle=nm.store.title.html();nm.store.title.html((curTitle.length?curTitle+' - ':'')+(nm.store.galleryIndex+1)+'/'+nm.store.galleryLinks.length);}},filledContent:function(nm){var link=this._getGalleryLink(nm,-1),append=nm.elts.hidden.find(' > div');if(link){$('<a />',{text:'previous',href:'#'}).addClass('nyroModalPrev').bind('click',function(e){e.preventDefault();nm._callFilters('galleryPrev');}).appendTo(append);}link=this._getGalleryLink(nm,1);if(link){$('<a />',{text:'next',href:'#'}).addClass('nyroModalNext').bind('click',function(e){e.preventDefault();nm._callFilters('galleryNext');}).appendTo(append);}},close:function(nm){nm.store.gallery=undefined;nm.store.galleryLinks=undefined;nm.store.galleryIndex=undefined;delete(nm.store.gallery);delete(nm.store.galleryLinks);delete(nm.store.galleryIndex);if(nm.elts.cont)nm.elts.cont.find('.nyroModalNext, .nyroModalPrev').remove();},galleryNext:function(nm){this._getGalleryLink(nm,1).nyroModal(nm.getForNewLinks(),true).click();},galleryPrev:function(nm){this._getGalleryLink(nm,-1).nyroModal(nm.getForNewLinks(),true).click();},_getGalleryLink:function(nm,dir){if(nm.store.gallery){if(!nm.ltr)dir *=-1;var index=nm.store.galleryIndex+dir;if(index>=0&&index<nm.store.galleryLinks.length)return nm.store.galleryLinks.eq(index);else if(nm.galleryLoop)return nm.store.galleryLinks.eq(index<0?nm.store.galleryLinks.length-1:0);}return undefined;}}});});;
+ jQuery(function($,undefined){$.nmFilters({link:{is:function(nm){var ret=nm.opener.is('[href]');if(ret)nm.store.link=nm.getInternal()._extractUrl(nm.opener.attr('href'));return ret;},init:function(nm){nm.loadFilter='link';nm.opener.unbind('click.nyroModal').bind('click.nyroModal',function(e){e.preventDefault();nm.opener.trigger('nyroModal');});},load:function(nm){$.ajax({url:nm.store.link.url,data:nm.store.link.sel?[{name:nm.selIndicator,value:nm.store.link.sel.substring(1)}]:undefined,success:function(data){nm._setCont(data,nm.store.link.sel);},error:function(){nm._error();}});}}});});;
+ jQuery(function($,undefined){$.nmFilters({dom:{is:function(nm){return nm._hasFilter('link')&&!nm.store.link.url&&nm.store.link.sel;},init:function(nm){nm.loadFilter='dom';},load:function(nm){nm.store.domEl=$(nm.store.link.sel);if(nm.store.domEl.length)nm._setCont(nm.store.domEl.contents());else nm._error();},close:function(nm){if(nm.store.domEl&&nm.elts.cont)nm.store.domEl.append(nm.elts.cont.find('.nyroModalDom').contents());}}});});;
+ jQuery(function($,undefined){$.nmFilters({image:{is:function(nm){return(new RegExp(nm.imageRegex,'i')).test(nm.opener.attr('href'));},init:function(nm){nm.loadFilter='image';},load:function(nm){var url=nm.opener.attr('href');$('<img />').load(function(){nm.elts.cont.addClass('nyroModalImg');nm.elts.hidden.addClass('nyroModalImg');nm._setCont(this);}).error(function(){nm._error();}).attr('src',url);},size:function(nm){if(nm.sizes.w!=nm.sizes.initW||nm.sizes.h!=nm.sizes.initH){var ratio=Math.min(nm.sizes.w/nm.sizes.initW,nm.sizes.h/nm.sizes.initH);nm.sizes.w=nm.sizes.initW * ratio;nm.sizes.h=nm.sizes.initH * ratio;}var img=nm.loading?nm.elts.hidden.find('img'):nm.elts.cont.find('img');img.attr({width:nm.sizes.w,height:nm.sizes.h});},close:function(nm){if(nm.elts.cont){nm.elts.cont.removeClass('nyroModalImg');nm.elts.hidden.removeClass('nyroModalImg');}}}});});;
+ jQuery(function($,undefined){$.nmFilters({swf:{is:function(nm){return nm._hasFilter('link')&&nm.opener.is('[href$=.swf]');},init:function(nm){nm.loadFilter='swf';},load:function(nm){var url=nm.store.link.url,cont='<div><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+nm.sizes.w+'" height="'+nm.sizes.h+'"><param name="movie" value="'+url+'"></param>',tmp='';$.each(nm.swf,function(name,val){cont+='<param name="'+name+'" value="'+val+'"></param>';tmp+=' '+name+'="'+val+'"';});cont+='<embed src="'+url+'" type="application/x-shockwave-flash" width="'+nm.sizes.w+'" height="'+nm.sizes.h+'"'+tmp+'></embed></object></div>';nm._setCont(cont);}}});});;
+ jQuery(function($,undefined){$.nmFilters({form:{is:function(nm){var ret=nm.opener.is('form');if(ret)nm.store.form=nm.getInternal()._extractUrl(nm.opener.attr('action'));return ret;},init:function(nm){nm.loadFilter='form';nm.opener.unbind('submit.nyroModal').bind('submit.nyroModal',function(e){e.preventDefault();nm.opener.trigger('nyroModal');});},load:function(nm){var data=nm.opener.serializeArray();if(nm.store.form.sel)data.push({name:nm.selIndicator,value:nm.store.form.sel.substring(1)});$.ajax({url:nm.store.form.url,data:data,type:nm.opener.attr('method')?nm.opener.attr('method'):'get',success:function(data){nm._setCont(data,nm.store.form.sel);},error:function(){nm._error();}});}}});});;
+ jQuery(function($,undefined){$.nmFilters({formFile:{is:function(nm){var ret=nm.opener.is('form[enctype="multipart/form-data"]');if(ret){nm._delFilter('form');if(!nm.store.form)nm.store.form=nm.getInternal()._extractUrl(nm.opener.attr('action'));}return ret;},init:function(nm){nm.loadFilter='formFile';nm.store.formFileLoading=false;nm.opener.unbind('submit.nyroModal').bind('submit.nyroModal',function(e){if(!nm.store.formFileIframe){e.preventDefault();nm.opener.trigger('nyroModal');}else{nm.store.formFileLoading=true;}});},initElts:function(nm){var inputSel;if(nm.store.form.sel)inputSel=$('<input />',{'type':'hidden',name:nm.selIndicator,value:nm.store.form.sel.substring(1)}).appendTo(nm.opener);function rmFormFileElts(){if(inputSel){inputSel.remove();inputSel=undefined;delete(inputSel);}nm.store.formFileIframe.attr('src','about:blank').remove();nm.store.formFileIframe=undefined;delete(nm.store.formFileIframe);}nm.store.formFileIframe=$('<iframe name="nyroModalFormFile" src="javascript:\'\';"></iframe>').hide().load(function(){if(nm.store.formFileLoading){nm.store.formFileLoading=false;var content=nm.store.formFileIframe .unbind('load error').contents().find('body').not('script[src]');if(content&&content.html()&&content.html().length){rmFormFileElts();nm._setCont(content.html(),nm.store.form.sel);}else{var nbTry=0;fct=function(){nbTry++;var content=nm.store.formFileIframe .unbind('load error').contents().find('body').not('script[src]');if(content&&content.html()&&content.html().length){nm._setCont(content.html(),nm.store.form.sel);rmFormFileElts();}else if(nbTry<5){setTimeout(fct,25);}else{rmFormFileElts();nm._error();}};setTimeout(fct,25);}}}).error(function(){rmIframe();nm._error();});nm.elts.all.append(nm.store.formFileIframe);nm.opener .attr('target','nyroModalFormFile').submit();},close:function(nm){nm.store.formFileLoading=false;if(nm.store.formFileIframe){nm.store.formFileIframe.remove();nm.store.formFileIframe=undefined;delete(nm.store.formFileIframe);}}}});});;
+ jQuery(function($,undefined){$.nmFilters({iframe:{is:function(nm){var target=nm.opener.attr('target')||'',rel=nm.opener.attr('rel')||'',opener=nm.opener.get(0);return!nm._hasFilter('image')&&(target.toLowerCase()=='_blank'||rel.toLowerCase().indexOf('external')>-1||(opener.hostname&&opener.hostname.replace(/:\d*$/,'')!=window.location.hostname.replace(/:\d*$/,'')));},init:function(nm){nm.loadFilter='iframe';},load:function(nm){nm.store.iframe=$('<iframe src="javascript:\'\';"></iframe>');nm._setCont(nm.store.iframe);},afterShowCont:function(nm){nm.store.iframe.attr('src',nm.opener.attr('href'));},close:function(nm){if(nm.store.iframe){nm.store.iframe.remove();nm.store.iframe=undefined;delete(nm.store.iframe);}}}});});;
+ jQuery(function($,undefined){$.nmFilters({iframeForm:{is:function(nm){var ret=nm._hasFilter('iframe')&&nm.opener.is('form');if(ret){nm._delFilter('iframe');nm._delFilter('form');}return ret;},init:function(nm){nm.loadFilter='iframeForm';nm.store.iframeFormLoading=false;nm.store.iframeFormOrgTarget=nm.opener.attr('target');nm.opener.unbind('submit.nyroModal').bind('submit.nyroModal',function(e){if(!nm.store.iframeFormIframe){e.preventDefault();nm.opener.trigger('nyroModal');}else{nm.store.iframeFormLoading=true;}});},load:function(nm){nm.store.iframeFormIframe=$('<iframe name="nyroModalIframeForm" src="javascript:\'\';"></iframe>');nm._setCont(nm.store.iframeFormIframe);},afterShowCont:function(nm){nm.opener .attr('target','nyroModalIframeForm').submit();},close:function(nm){nm.store.iframeFormOrgTarget?nm.opener.attr('target',nm.store.iframeFormOrgTarget):nm.opener.removeAttr('target');delete(nm.store.formFileLoading);delete(nm.store.iframeFormOrgTarget);if(nm.store.iframeFormIframe){nm.store.iframeFormIframe.remove();nm.store.iframeFormIframe=undefined;delete(nm.store.iframeFormIframe);}}}});});;
+ jQuery(function($,undefined){$.nmFilters({embedly:{is:function(nm){var embedlyReg= /http:\/\/(.*youtube\.com\/watch.*|.*\.youtube\.com\/v\/.*|youtu\.be\/.*|.*\.youtube\.com\/user\/.*|.*\.youtube\.com\/.*#.*\/.*|m\.youtube\.com\/watch.*|m\.youtube\.com\/index.*|.*\.youtube\.com\/profile.*|.*justin\.tv\/.*|.*justin\.tv\/.*\/b\/.*|.*justin\.tv\/.*\/w\/.*|www\.ustream\.tv\/recorded\/.*|www\.ustream\.tv\/channel\/.*|www\.ustream\.tv\/.*|qik\.com\/video\/.*|qik\.com\/.*|qik\.ly\/.*|.*revision3\.com\/.*|.*\.dailymotion\.com\/video\/.*|.*\.dailymotion\.com\/.*\/video\/.*|www\.collegehumor\.com\/video:.*|.*twitvid\.com\/.*|www\.break\.com\/.*\/.*|vids\.myspace\.com\/index\.cfm\?fuseaction=vids\.individual&videoid.*|www\.myspace\.com\/index\.cfm\?fuseaction=.*&videoid.*|www\.metacafe\.com\/watch\/.*|www\.metacafe\.com\/w\/.*|blip\.tv\/file\/.*|.*\.blip\.tv\/file\/.*|video\.google\.com\/videoplay\?.*|.*revver\.com\/video\/.*|video\.yahoo\.com\/watch\/.*\/.*|video\.yahoo\.com\/network\/.*|.*viddler\.com\/explore\/.*\/videos\/.*|liveleak\.com\/view\?.*|www\.liveleak\.com\/view\?.*|animoto\.com\/play\/.*|dotsub\.com\/view\/.*|www\.overstream\.net\/view\.php\?oid=.*|www\.livestream\.com\/.*|www\.worldstarhiphop\.com\/videos\/video.*\.php\?v=.*|worldstarhiphop\.com\/videos\/video.*\.php\?v=.*|teachertube\.com\/viewVideo\.php.*|www\.teachertube\.com\/viewVideo\.php.*|www1\.teachertube\.com\/viewVideo\.php.*|www2\.teachertube\.com\/viewVideo\.php.*|bambuser\.com\/v\/.*|bambuser\.com\/channel\/.*|bambuser\.com\/channel\/.*\/broadcast\/.*|www\.schooltube\.com\/video\/.*\/.*|bigthink\.com\/ideas\/.*|bigthink\.com\/series\/.*|sendables\.jibjab\.com\/view\/.*|sendables\.jibjab\.com\/originals\/.*|www\.xtranormal\.com\/watch\/.*|dipdive\.com\/media\/.*|dipdive\.com\/member\/.*\/media\/.*|dipdive\.com\/v\/.*|.*\.dipdive\.com\/media\/.*|.*\.dipdive\.com\/v\/.*|.*yfrog\..*\/.*|tweetphoto\.com\/.*|www\.flickr\.com\/photos\/.*|flic\.kr\/.*|twitpic\.com\/.*|www\.twitpic\.com\/.*|twitpic\.com\/photos\/.*|www\.twitpic\.com\/photos\/.*|.*imgur\.com\/.*|.*\.posterous\.com\/.*|post\.ly\/.*|twitgoo\.com\/.*|i.*\.photobucket\.com\/albums\/.*|s.*\.photobucket\.com\/albums\/.*|phodroid\.com\/.*\/.*\/.*|www\.mobypicture\.com\/user\/.*\/view\/.*|moby\.to\/.*|xkcd\.com\/.*|www\.xkcd\.com\/.*|imgs\.xkcd\.com\/.*|www\.asofterworld\.com\/index\.php\?id=.*|www\.asofterworld\.com\/.*\.jpg|asofterworld\.com\/.*\.jpg|www\.qwantz\.com\/index\.php\?comic=.*|23hq\.com\/.*\/photo\/.*|www\.23hq\.com\/.*\/photo\/.*|.*dribbble\.com\/shots\/.*|drbl\.in\/.*|.*\.smugmug\.com\/.*|.*\.smugmug\.com\/.*#.*|emberapp\.com\/.*\/images\/.*|emberapp\.com\/.*\/images\/.*\/sizes\/.*|emberapp\.com\/.*\/collections\/.*\/.*|emberapp\.com\/.*\/categories\/.*\/.*\/.*|embr\.it\/.*|picasaweb\.google\.com.*\/.*\/.*#.*|picasaweb\.google\.com.*\/lh\/photo\/.*|picasaweb\.google\.com.*\/.*\/.*|dailybooth\.com\/.*\/.*|brizzly\.com\/pic\/.*|pics\.brizzly\.com\/.*\.jpg|img\.ly\/.*|www\.tinypic\.com\/view\.php.*|tinypic\.com\/view\.php.*|www\.tinypic\.com\/player\.php.*|tinypic\.com\/player\.php.*|www\.tinypic\.com\/r\/.*\/.*|tinypic\.com\/r\/.*\/.*|.*\.tinypic\.com\/.*\.jpg|.*\.tinypic\.com\/.*\.png|meadd\.com\/.*\/.*|meadd\.com\/.*|.*\.deviantart\.com\/art\/.*|.*\.deviantart\.com\/gallery\/.*|.*\.deviantart\.com\/#\/.*|fav\.me\/.*|.*\.deviantart\.com|.*\.deviantart\.com\/gallery|.*\.deviantart\.com\/.*\/.*\.jpg|.*\.deviantart\.com\/.*\/.*\.gif|.*\.deviantart\.net\/.*\/.*\.jpg|.*\.deviantart\.net\/.*\/.*\.gif|plixi\.com\/p\/.*|plixi\.com\/profile\/home\/.*|plixi\.com\/.*|www\.fotopedia\.com\/.*\/.*|fotopedia\.com\/.*\/.*|photozou\.jp\/photo\/show\/.*\/.*|photozou\.jp\/photo\/photo_only\/.*\/.*|instagr\.am\/p\/.*|skitch\.com\/.*\/.*\/.*|img\.skitch\.com\/.*|https:\/\/skitch\.com\/.*\/.*\/.*|https:\/\/img\.skitch\.com\/.*|share\.ovi\.com\/media\/.*\/.*|www\.questionablecontent\.net\/|questionablecontent\.net\/|www\.questionablecontent\.net\/view\.php.*|questionablecontent\.net\/view\.php.*|questionablecontent\.net\/comics\/.*\.png|www\.questionablecontent\.net\/comics\/.*\.png|picplz\.com\/user\/.*\/pic\/.*\/|twitrpix\.com\/.*|.*\.twitrpix\.com\/.*|www\.someecards\.com\/.*\/.*|someecards\.com\/.*\/.*|some\.ly\/.*|www\.some\.ly\/.*|pikchur\.com\/.*|achewood\.com\/.*|www\.achewood\.com\/.*|achewood\.com\/index\.php.*|www\.achewood\.com\/index\.php.*|www\.whitehouse\.gov\/photos-and-video\/video\/.*|www\.whitehouse\.gov\/video\/.*|wh\.gov\/photos-and-video\/video\/.*|wh\.gov\/video\/.*|www\.hulu\.com\/watch.*|www\.hulu\.com\/w\/.*|hulu\.com\/watch.*|hulu\.com\/w\/.*|.*crackle\.com\/c\/.*|www\.fancast\.com\/.*\/videos|www\.funnyordie\.com\/videos\/.*|www\.funnyordie\.com\/m\/.*|funnyordie\.com\/videos\/.*|funnyordie\.com\/m\/.*|www\.vimeo\.com\/groups\/.*\/videos\/.*|www\.vimeo\.com\/.*|vimeo\.com\/m\/#\/featured\/.*|vimeo\.com\/groups\/.*\/videos\/.*|vimeo\.com\/.*|vimeo\.com\/m\/#\/featured\/.*|www\.ted\.com\/talks\/.*\.html.*|www\.ted\.com\/talks\/lang\/.*\/.*\.html.*|www\.ted\.com\/index\.php\/talks\/.*\.html.*|www\.ted\.com\/index\.php\/talks\/lang\/.*\/.*\.html.*|.*nfb\.ca\/film\/.*|www\.thedailyshow\.com\/watch\/.*|www\.thedailyshow\.com\/full-episodes\/.*|www\.thedailyshow\.com\/collection\/.*\/.*\/.*|movies\.yahoo\.com\/movie\/.*\/video\/.*|movies\.yahoo\.com\/movie\/.*\/trailer|movies\.yahoo\.com\/movie\/.*\/video|www\.colbertnation\.com\/the-colbert-report-collections\/.*|www\.colbertnation\.com\/full-episodes\/.*|www\.colbertnation\.com\/the-colbert-report-videos\/.*|www\.comedycentral\.com\/videos\/index\.jhtml\?.*|www\.theonion\.com\/video\/.*|theonion\.com\/video\/.*|wordpress\.tv\/.*\/.*\/.*\/.*\/|www\.traileraddict\.com\/trailer\/.*|www\.traileraddict\.com\/clip\/.*|www\.traileraddict\.com\/poster\/.*|www\.escapistmagazine\.com\/videos\/.*|www\.trailerspy\.com\/trailer\/.*\/.*|www\.trailerspy\.com\/trailer\/.*|www\.trailerspy\.com\/view_video\.php.*|www\.atom\.com\/.*\/.*\/|fora\.tv\/.*\/.*\/.*\/.*|www\.spike\.com\/video\/.*|www\.gametrailers\.com\/video\/.*|gametrailers\.com\/video\/.*|www\.koldcast\.tv\/video\/.*|www\.koldcast\.tv\/#video:.*|techcrunch\.tv\/watch.*|techcrunch\.tv\/.*\/watch.*|mixergy\.com\/.*|video\.pbs\.org\/video\/.*|www\.zapiks\.com\/.*|tv\.digg\.com\/diggnation\/.*|tv\.digg\.com\/diggreel\/.*|tv\.digg\.com\/diggdialogg\/.*|www\.trutv\.com\/video\/.*|www\.nzonscreen\.com\/title\/.*|nzonscreen\.com\/title\/.*|app\.wistia\.com\/embed\/medias\/.*|https:\/\/app\.wistia\.com\/embed\/medias\/.*|www\.godtube\.com\/featured\/video\/.*|godtube\.com\/featured\/video\/.*|www\.godtube\.com\/watch\/.*|godtube\.com\/watch\/.*|www\.tangle\.com\/view_video.*|mediamatters\.org\/mmtv\/.*|www\.clikthrough\.com\/theater\/video\/.*|soundcloud\.com\/.*|soundcloud\.com\/.*\/.*|soundcloud\.com\/.*\/sets\/.*|soundcloud\.com\/groups\/.*|snd\.sc\/.*|www\.last\.fm\/music\/.*|www\.last\.fm\/music\/+videos\/.*|www\.last\.fm\/music\/+images\/.*|www\.last\.fm\/music\/.*\/_\/.*|www\.last\.fm\/music\/.*\/.*|www\.mixcloud\.com\/.*\/.*\/|www\.radionomy\.com\/.*\/radio\/.*|radionomy\.com\/.*\/radio\/.*|www\.entertonement\.com\/clips\/.*|www\.rdio\.com\/#\/artist\/.*\/album\/.*|www\.rdio\.com\/artist\/.*\/album\/.*|www\.zero-inch\.com\/.*|.*\.bandcamp\.com\/|.*\.bandcamp\.com\/track\/.*|.*\.bandcamp\.com\/album\/.*|freemusicarchive\.org\/music\/.*|www\.freemusicarchive\.org\/music\/.*|freemusicarchive\.org\/curator\/.*|www\.freemusicarchive\.org\/curator\/.*|www\.npr\.org\/.*\/.*\/.*\/.*\/.*|www\.npr\.org\/.*\/.*\/.*\/.*\/.*\/.*|www\.npr\.org\/.*\/.*\/.*\/.*\/.*\/.*\/.*|www\.npr\.org\/templates\/story\/story\.php.*|huffduffer\.com\/.*\/.*|www\.audioboo\.fm\/boos\/.*|audioboo\.fm\/boos\/.*|boo\.fm\/b.*|www\.xiami\.com\/song\/.*|xiami\.com\/song\/.*|espn\.go\.com\/video\/clip.*|espn\.go\.com\/.*\/story.*|abcnews\.com\/.*\/video\/.*|abcnews\.com\/video\/playerIndex.*|washingtonpost\.com\/wp-dyn\/.*\/video\/.*\/.*\/.*\/.*|www\.washingtonpost\.com\/wp-dyn\/.*\/video\/.*\/.*\/.*\/.*|www\.boston\.com\/video.*|boston\.com\/video.*|www\.facebook\.com\/photo\.php.*|www\.facebook\.com\/video\/video\.php.*|www\.facebook\.com\/v\/.*|cnbc\.com\/id\/.*\?.*video.*|www\.cnbc\.com\/id\/.*\?.*video.*|cnbc\.com\/id\/.*\/play\/1\/video\/.*|www\.cnbc\.com\/id\/.*\/play\/1\/video\/.*|cbsnews\.com\/video\/watch\/.*|www\.google\.com\/buzz\/.*\/.*\/.*|www\.google\.com\/buzz\/.*|www\.google\.com\/profiles\/.*|google\.com\/buzz\/.*\/.*\/.*|google\.com\/buzz\/.*|google\.com\/profiles\/.*|www\.cnn\.com\/video\/.*|edition\.cnn\.com\/video\/.*|money\.cnn\.com\/video\/.*|today\.msnbc\.msn\.com\/id\/.*\/vp\/.*|www\.msnbc\.msn\.com\/id\/.*\/vp\/.*|www\.msnbc\.msn\.com\/id\/.*\/ns\/.*|today\.msnbc\.msn\.com\/id\/.*\/ns\/.*|multimedia\.foxsports\.com\/m\/video\/.*\/.*|msn\.foxsports\.com\/video.*|www\.globalpost\.com\/video\/.*|www\.globalpost\.com\/dispatch\/.*|.*amazon\..*\/gp\/product\/.*|.*amazon\..*\/.*\/dp\/.*|.*amazon\..*\/dp\/.*|.*amazon\..*\/o\/ASIN\/.*|.*amazon\..*\/gp\/offer-listing\/.*|.*amazon\..*\/.*\/ASIN\/.*|.*amazon\..*\/gp\/product\/images\/.*|www\.amzn\.com\/.*|amzn\.com\/.*|www\.shopstyle\.com\/browse.*|www\.shopstyle\.com\/action\/apiVisitRetailer.*|www\.shopstyle\.com\/action\/viewLook.*|gist\.github\.com\/.*|twitter\.com\/.*\/status\/.*|twitter\.com\/.*\/statuses\/.*|mobile\.twitter\.com\/.*\/status\/.*|mobile\.twitter\.com\/.*\/statuses\/.*|www\.crunchbase\.com\/.*\/.*|crunchbase\.com\/.*\/.*|www\.slideshare\.net\/.*\/.*|www\.slideshare\.net\/mobile\/.*\/.*|.*\.scribd\.com\/doc\/.*|screenr\.com\/.*|polldaddy\.com\/community\/poll\/.*|polldaddy\.com\/poll\/.*|answers\.polldaddy\.com\/poll\/.*|www\.5min\.com\/Video\/.*|www\.howcast\.com\/videos\/.*|www\.screencast\.com\/.*\/media\/.*|screencast\.com\/.*\/media\/.*|www\.screencast\.com\/t\/.*|screencast\.com\/t\/.*|issuu\.com\/.*\/docs\/.*|www\.kickstarter\.com\/projects\/.*\/.*|www\.scrapblog\.com\/viewer\/viewer\.aspx.*|ping\.fm\/p\/.*|chart\.ly\/.*|maps\.google\.com\/maps\?.*|maps\.google\.com\/\?.*|maps\.google\.com\/maps\/ms\?.*|.*\.craigslist\.org\/.*\/.*|my\.opera\.com\/.*\/albums\/show\.dml\?id=.*|my\.opera\.com\/.*\/albums\/showpic\.dml\?album=.*&picture=.*|tumblr\.com\/.*|.*\.tumblr\.com\/post\/.*|www\.polleverywhere\.com\/polls\/.*|www\.polleverywhere\.com\/multiple_choice_polls\/.*|www\.polleverywhere\.com\/free_text_polls\/.*|www\.quantcast\.com\/wd:.*|www\.quantcast\.com\/.*|siteanalytics\.compete\.com\/.*|statsheet\.com\/statplot\/charts\/.*\/.*\/.*\/.*|statsheet\.com\/statplot\/charts\/e\/.*|statsheet\.com\/.*\/teams\/.*\/.*|statsheet\.com\/tools\/chartlets\?chart=.*|.*\.status\.net\/notice\/.*|identi\.ca\/notice\/.*|brainbird\.net\/notice\/.*|shitmydadsays\.com\/notice\/.*|www\.studivz\.net\/Profile\/.*|www\.studivz\.net\/l\/.*|www\.studivz\.net\/Groups\/Overview\/.*|www\.studivz\.net\/Gadgets\/Info\/.*|www\.studivz\.net\/Gadgets\/Install\/.*|www\.studivz\.net\/.*|www\.meinvz\.net\/Profile\/.*|www\.meinvz\.net\/l\/.*|www\.meinvz\.net\/Groups\/Overview\/.*|www\.meinvz\.net\/Gadgets\/Info\/.*|www\.meinvz\.net\/Gadgets\/Install\/.*|www\.meinvz\.net\/.*|www\.schuelervz\.net\/Profile\/.*|www\.schuelervz\.net\/l\/.*|www\.schuelervz\.net\/Groups\/Overview\/.*|www\.schuelervz\.net\/Gadgets\/Info\/.*|www\.schuelervz\.net\/Gadgets\/Install\/.*|www\.schuelervz\.net\/.*|myloc\.me\/.*|pastebin\.com\/.*|pastie\.org\/.*|www\.pastie\.org\/.*|redux\.com\/stream\/item\/.*\/.*|redux\.com\/f\/.*\/.*|www\.redux\.com\/stream\/item\/.*\/.*|www\.redux\.com\/f\/.*\/.*|cl\.ly\/.*|cl\.ly\/.*\/content|speakerdeck\.com\/u\/.*\/p\/.*|www\.kiva\.org\/lend\/.*|www\.timetoast\.com\/timelines\/.*|storify\.com\/.*\/.*|.*meetup\.com\/.*|meetu\.ps\/.*|www\.dailymile\.com\/people\/.*\/entries\/.*|.*\.kinomap\.com\/.*|www\.metacdn\.com\/api\/users\/.*\/content\/.*|www\.metacdn\.com\/api\/users\/.*\/media\/.*|prezi\.com\/.*\/.*|.*\.uservoice\.com\/.*\/suggestions\/.*)/i;var ret=nm._hasFilter('link')&&nm.opener.attr('href')&&nm.opener.attr('href').match(embedlyReg)!==null;if(ret)nm._delFilter('iframe');return ret;},init:function(nm){nm.loadFilter='embedly';nm.store.embedly={};},load:function(nm){$.ajax({url:'http://api.embed.ly/1/oembed',dataType:'jsonp',data:'wmode=transparent&url='+nm.opener.attr('href'),success:function(data){if(data.type=='error')nm._error();else if(data.type=='photo'){nm.filters.push('image');$('<img />').load(function(){nm.elts.cont.addClass('nyroModalImg');nm.elts.hidden.addClass('nyroModalImg');nm._setCont(this);}).error(function(){nm._error();}).attr('src',data.url);}else{nm.store.embedly.w=data.width;nm.store.embedly.h=data.height;nm._setCont('<div>'+data.html+'</div>');}}});},size:function(nm){if(nm.store.embedly.w&&!nm.sizes.h){nm.sizes.w=nm.store.embedly.w;nm.sizes.h=nm.store.embedly.h;}}}});});;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/static/hdabo/js/jquery.qtip.min.js	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,1 @@
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('"6t 6u";(j($){$(31).3x(j(){R i;$(2e).1J(\'3L 3E\',j(r){1V(i=0;i<$.18.g.O.Q;i++){R T=$.18.g.O[i];c(T&&T.V&&T.V.1b&&T.8.k.17!==\'29\'&&T.d.h.2r(\':28\')&&(T.8.k.1e.3E&&r.17===\'3E\'||T.8.k.1e.3L&&r.17===\'3L\')){T.2h(r,H)}}});$(31).1J(\'5j.g\',j(r){c($(r.s).5g(\'12.g\').Q===0){R h=$(\'.6w\'),T=h.g(\'T\');c(h.2r(\':28\')&&T&&T.V&&!T.V.23&&$(r.s).2m(T.d.s).Q>1){T.D(r)}}})});j 2D(w){c(!w){B p}A.x=5a(w).3l(/5x/i,\'1j\').5y(/M|25|1j/i)[0].2F();A.y=5a(w).3l(/5x/i,\'1j\').5y(/K|26|1j/i)[0].2F();A.1k={M:0,K:0};A.2y=(w.2H(0).6L(/^(t|b)/)>-1)?\'y\':\'x\';A.1w=j(){B(A.2y===\'y\')?A.y+A.x:A.x+A.y}}j 4t(w,o,G){R 1N={5B:[[0,0],[o,G],[o,0]],6a:[[0,0],[o,0],[0,G]],5K:[[0,G],[o,0],[o,G]],5N:[[0,0],[0,G],[o,G]],6y:[[0,G],[o/2,0],[o,G]],6v:[[0,0],[o,0],[o/2,G]],6i:[[0,0],[o,G/2],[0,G]],6J:[[o,0],[o,G],[0,G/2]]};1N.6M=1N.5B;1N.6z=1N.6a;1N.6x=1N.5K;1N.6C=1N.5N;B 1N[w]}j 4e(E){R 2j;c($(\'<1f />\').1q(0).1E){2j={3K:[E,E],40:[0,E],4I:[E,0],3P:[0,0]}}C c($.16.1d){2j={3K:[-2z,2z,0],40:[-2z,2z,-E],4I:[2z,5D,0],3P:[2z,5D,-E]}}B 2j}j 2G(e,4b){R 2U,i;2U=$.2p(H,{},e);1V(i 5R 2U){c(4b===H&&(/(f|1g)/i).1Y(i)){3z 2U[i]}C c(!4b&&(/(o|I|f|U|1g|4v)/i).1Y(i)){3z 2U[i]}}B 2U}j 4i(e){c(P e.f!==\'19\'){e.f={w:e.f}}c(P e.f.N!==\'19\'){e.f.N={o:e.f.N,G:e.f.N}}c(P e.I!==\'19\'){e.I={o:e.I}}c(P e.o!==\'19\'){e.o={2Z:e.o}}c(P e.o.1H===\'1w\'){e.o.1H=1A(e.o.1H.3l(/([0-9]+)/i,"$1"),10)}c(P e.o.2b===\'1w\'){e.o.2b=1A(e.o.2b.3l(/([0-9]+)/i,"$1"),10)}c(P e.f.N.x===\'2s\'){e.f.N.o=e.f.N.x;3z e.f.N.x}c(P e.f.N.y===\'2s\'){e.f.N.G=e.f.N.y;3z e.f.N.y}B e}j 4l(){R 7,i,3A,2v,1D,1P;7=A;3A=[H,{}];1V(i=0;i<3b.Q;i++){3A.5h(3b[i])}2v=[$.2p.4s($,3A)];6F(P 2v[0].21===\'1w\'){2v.5O(4i($.18.g.3c[2v[0].21]))}2v.5O(H,{1g:{h:\'g-\'+(3b[0].21||\'39\')}},$.18.g.3c.39);1D=$.2p.4s($,2v);1P=($.16.1d)?1:0;1D.f.N.o+=1P;1D.f.N.G+=1P;c(1D.f.N.o%2>0){1D.f.N.o+=1}c(1D.f.N.G%2>0){1D.f.N.G+=1}c(1D.f.w===H){c(7.8.k.w.h===\'1j\'&&7.8.k.w.s===\'1j\'){1D.f.w=p}C{1D.f.w=7.8.k.w.h}}B 1D}j 46(1f,X,E,J){R 1n=1f.1q(0).1E(\'2d\');1n.5G=J;1n.5U();1n.3p(X[0],X[1],E,0,1u.6N*2,p);1n.5Y()}j 59(){R 7,i,o,E,J,X,1Q,N,4O,2k,3e,3i,4g,4q,4G;7=A;7.d.1t.1M(\'.g-3i, .g-3e\').3W();o=7.8.e.I.o;E=7.8.e.I.E;J=7.8.e.I.J||7.8.e.f.J;X=4e(E);1Q={};1V(i 5R X){1Q[i]=\'<12 1S="\'+i+\'" e="\'+((/6n/).1Y(i)?\'M\':\'25\')+\':0; \'+\'k:34; G:\'+E+\'1a; o:\'+E+\'1a; 2u:1F; 2S-G:0.1B; 2Y-N:1B">\';c($(\'<1f />\').1q(0).1E){1Q[i]+=\'<1f G="\'+E+\'" o="\'+E+\'" e="4Q-3o: K"></1f>\'}C c($.16.1d){N=E*2+3;1Q[i]+=\'<v:3p 6f="p" 3t="\'+J+\'" 6s="\'+X[i][0]+\'" 6r="\'+X[i][1]+\'" \'+\'e="o:\'+N+\'1a; G:\'+N+\'1a; 2q-K:\'+((/26/).1Y(i)?-2:-1)+\'1a; \'+\'2q-M:\'+((/6m/).1Y(i)?X[i][2]-3.5:-1)+\'1a; \'+\'4Q-3o:K; 2a:53-4E; 3I:1x(#2L#3R)"></v:3p>\'}1Q[i]+=\'</12>\'}4O=7.3d().o-(1u.1H(o,E)*2);2k=\'<12 1I="g-2k" e="G:\'+E+\'1a; o:\'+4O+\'1a; \'+\'2u:1F; 1s-J:\'+J+\'; 2S-G:0.1B; 2Y-N:1B;">\';3e=\'<12 1I="g-3e" 4k="4f" e="G:\'+E+\'1a; \'+\'2q-M:\'+E+\'1a; 2S-G:0.1B; 2Y-N:1B; 2x:0;">\'+1Q.3K+1Q.40+2k;7.d.1t.3B(3e);3i=\'<12 1I="g-3i" 4k="4f" e="G:\'+E+\'1a; \'+\'2q-M:\'+E+\'1a; 2S-G:0.1B; 2Y-N:1B; 2x:0;">\'+1Q.4I+1Q.3P+2k;7.d.1t.5s(3i);c($(\'<1f />\').1q(0).1E){7.d.1t.1M(\'1f\').1L(j(){4g=X[$(A).3O(\'[1S]:1R\').W(\'1S\')];46.S(7,$(A),4g,E,J)})}C c($.16.1d){7.d.h.5s(\'<v:3C e="3I:1x(#2L#3R);"></v:3C>\')}4q=1u.1H(E,(E+(o-E)));4G=1u.1H(o-E,0);7.d.1y.F({I:\'6D 3q \'+J,6H:4G+\'1a \'+4q+\'1a\'})}j 4u(1f,X,J){R 1n=1f.1q(0).1E(\'2d\');1n.5G=J;1n.5U();1n.6o(X[0][0],X[0][1]);1n.5Q(X[1][0],X[1][1]);1n.5Q(X[2][0],X[2][1]);1n.5Y()}j 42(w){R 7,1P,24,4n,4h,3Q;7=A;c(7.8.e.f.w===p||!7.d.f){B}c(!w){w=2T 2D(7.d.f.W(\'1S\'))}1P=24=($.16.1d)?1:0;7.d.f.F(w[w.2y],0);c(w.2y===\'y\'){c($.16.1d){c(1A($.16.2X.2H(0),10)===6){24=w.y===\'K\'?-3:1}C{24=w.y===\'K\'?1:2}}c(w.x===\'1j\'){7.d.f.F({M:\'50%\',6K:-(7.8.e.f.N.o/2)})}C c(w.x===\'M\'){7.d.f.F({M:7.8.e.I.E-1P})}C{7.d.f.F({25:7.8.e.I.E+1P})}c(w.y===\'K\'){7.d.f.F({K:-24})}C{7.d.f.F({26:24})}}C{c($.16.1d){24=(1A($.16.2X.2H(0),10)===6)?1:(w.x===\'M\'?1:2)}c(w.y===\'1j\'){7.d.f.F({K:\'50%\',49:-(7.8.e.f.N.G/2)})}C c(w.y===\'K\'){7.d.f.F({K:7.8.e.I.E-1P})}C{7.d.f.F({26:7.8.e.I.E+1P})}c(w.x===\'M\'){7.d.f.F({M:-24})}C{7.d.f.F({25:24})}}4n=\'2x-\'+w[w.2y];4h=7.8.e.f.N[w.2y===\'x\'?\'o\':\'G\'];7.d.h.F(\'2x\',0).F(4n,4h);c($.16.1d&&1A($.16.2X.2H(0),6)===6){3Q=1A(7.d.f.F(\'2q-K\'),10)||0;3Q+=1A(7.d.u.F(\'2q-K\'),10)||0;7.d.f.F({49:3Q})}}j 44(w){R 7,J,X,3J,2o,f;7=A;c(7.d.f!==1z){7.d.f.3W()}J=7.8.e.f.J||7.8.e.I.J;c(7.8.e.f.w===p){B}C c(!w){w=2T 2D(7.8.e.f.w)}X=4t(w.1w(),7.8.e.f.N.o,7.8.e.f.N.G);7.d.f=\'<12 1I="\'+7.8.e.1g.f+\'" 4k="4f" 1S="\'+w.1w()+\'" e="k:34; \'+\'G:\'+7.8.e.f.N.G+\'1a; o:\'+7.8.e.f.N.o+\'1a; \'+\'2q:0 6e; 2S-G:0.1B; 2Y-N:1B;"></12>\';7.d.h.3B(7.d.f);c($(\'<1f />\').1q(0).1E){f=\'<1f G="\'+7.8.e.f.N.G+\'" o="\'+7.8.e.f.N.o+\'"></1f>\'}C c($.16.1d){3J=7.8.e.f.N.o+\',\'+7.8.e.f.N.G;2o=\'m\'+X[0][0]+\',\'+X[0][1];2o+=\' l\'+X[1][0]+\',\'+X[1][1];2o+=\' \'+X[2][0]+\',\'+X[2][1];2o+=\' 6I\';f=\'<v:3M 3t="\'+J+\'" 6f="p" 6p="H" 2o="\'+2o+\'" 3J="\'+3J+\'" \'+\'e="o:\'+7.8.e.f.N.o+\'1a; G:\'+7.8.e.f.N.G+\'1a; \'+\'2S-G:0.1B; 2a:53-4E; 3I:1x(#2L#3R); \'+\'4Q-3o:\'+(w.y===\'K\'?\'26\':\'K\')+\'"></v:3M>\';f+=\'<v:3C e="3I:1x(#2L#3R);"></v:3C>\';7.d.1y.F(\'k\',\'4y\')}7.d.f=7.d.h.1M(\'.\'+7.8.e.1g.f).6B(0);7.d.f.2l(f);c($(\'<1f  />\').1q(0).1E){4u.S(7,7.d.f.1M(\'1f:1R\'),X,J)}c(w.y===\'K\'&&$.16.1d&&1A($.16.2X.2H(0),10)===6){7.d.f.F({49:-4})}42.S(7,w)}j 5b(){R 7=A;c(7.d.U!==1z){7.d.U.3W()}7.d.h.W(\'3r-6E\',\'g-\'+7.11+\'-U\');7.d.U=$(\'<12 11="g-\'+7.11+\'-U" 1I="\'+7.8.e.1g.U+\'"></12>\').F(2G(7.8.e.U,H)).F({2f:($.16.1d)?1:0}).58(7.d.1y);c(7.8.u.U.1m){7.5W.S(7,7.8.u.U.1m)}c(7.8.u.U.1i!==p&&P 7.8.u.U.1i===\'1w\'){7.d.1i=$(\'<a 1I="\'+7.8.e.1g.1i+\'" 5e="1i" e="6G:25; k: 4y"></a>\').F(2G(7.8.e.1i,H)).2l(7.8.u.U.1i).58(7.d.U).5d(j(r){c(!7.V.23){7.D(r)}})}}j 5l(){R 7,3h,2i,3u;7=A;3h=7.8.q.L.s;2i=7.8.D.L.s;c(7.8.D.3g){2i=2i.2m(7.d.h)}3u=[\'5d\',\'6h\',\'6k\',\'6j\',\'4C\',\'4x\',\'5j\',\'6l\',\'35\'];j 3v(r){c(7.V.23===H){B}2g(7.1G.1W);7.1G.1W=4M(j(){$(3u).1L(j(){2i.1O(A+\'.g-1W\');7.d.u.1O(A+\'.g-1W\')});7.D(r)},7.8.D.2V)}c(7.8.D.3g===H){7.d.h.1J(\'35.g\',j(){c(7.V.23===H){B}2g(7.1G.D)})}j 4S(r){c(7.V.23===H){B}c(7.8.D.L.r===\'1W\'){$(3u).1L(j(){2i.1J(A+\'.g-1W\',3v);7.d.u.1J(A+\'.g-1W\',3v)});3v()}2g(7.1G.q);2g(7.1G.D);c(7.8.q.2V>0){7.1G.q=4M(j(){7.q(r)},7.8.q.2V)}C{7.q(r)}}j 4P(r){c(7.V.23===H){B}c(7.8.D.3g===H&&(/1K(6q|6A)/i).1Y(7.8.D.L.r)&&$(r.70).5g(\'12.g[11^="g"]\').Q>0){r.7L();r.7K();2g(7.1G.D);B p}2g(7.1G.q);2g(7.1G.D);7.d.h.3S(H,H);7.1G.D=4M(j(){7.D(r)},7.8.D.2V)}c(7.8.k.s===\'1K\'&&7.8.k.17!==\'29\'){3h.1J(\'4C.g\',j(r){7.1v.1K={M:r.3Y,K:r.4c};c(7.V.23===p&&7.8.k.1e.1K===H&&7.8.k.17!==\'29\'&&7.d.h.F(\'2a\')!==\'3a\'){7.2h(r)}})}c((7.8.q.L.s.2m(7.8.D.L.s).Q===1&&7.8.q.L.r===7.8.D.L.r&&7.8.D.L.r!==\'1W\')||7.8.D.L.r===\'4R\'){7.1v.2I=0;3h.1J(7.8.q.L.r+\'.g\',j(r){c(7.1v.2I===0){4S(r)}C{4P(r)}})}C{3h.1J(7.8.q.L.r+\'.g\',4S);c(7.8.D.L.r!==\'1W\'){2i.1J(7.8.D.L.r+\'.g\',4P)}}c((/(3g|34)/).1Y(7.8.k.17)){7.d.h.1J(\'35.g\',7.2E)}}j 22(){R 7,2l,2t;7=A;2t=7.3d();2l=\'<7J 1I="g-22" 7I="0" 7M="-1" 4T="7N:p" \'+\'e="2a:4E; k:34; z-3s:-1; 5m:7R(2B=\\\'0\\\'); I: 1B 3q 4H; \'+\'G:\'+2t.G+\'1a; o:\'+2t.o+\'1a" />\';7.d.22=7.d.1t.3B(2l).2w(\'.g-22:1R\')}j 4w(){R 7,u,1x,Y,2A;7=A;7.5J.S(7);7.V.1b=2;7.d.h=\'<12 g="\'+7.11+\'" 11="g-\'+7.11+\'" 5e="h" \'+\'3r-7Q="g-\'+7.11+\'-u" 1I="g \'+(7.8.e.1g.h||7.8.e)+\'" \'+\'e="2a:3a; -7P-I-E:0; -7O-I-E:0; I-E:0; k:\'+7.8.k.17+\';"> \'+\'  <12 1I="g-1t" e="k:4y; 2u:1F; 1m-3o:M;"> \'+\'    <12 1I="g-1y" e="2u:1F;"> \'+\'       <12 11="g-\'+7.11+\'-u" 1I="g-u \'+7.8.e.1g.u+\'"></12> \'+\'</12></12></12>\';7.d.h=$(7.d.h);7.d.h.5P(7.8.k.3U);7.d.h.Y(\'g\',{3k:0,O:[7]});7.d.1t=7.d.h.2w(\'12:1R\');7.d.1y=7.d.1t.2w(\'12:1R\');7.d.u=7.d.1y.2w(\'12:1R\').F(2G(7.8.e));c($.16.1d){7.d.1t.2m(7.d.u).F({2f:1})}c(7.8.D.L.r===\'4R\'){7.d.h.W(\'4R\',H)}c(P 7.8.e.o.2Z===\'2s\'){7.4d()}c($(\'<1f />\').1q(0).1E||$.16.1d){c(7.8.e.I.E>0){59.S(7)}C{7.d.1y.F({I:7.8.e.I.o+\'1a 3q \'+7.8.e.I.J})}c(7.8.e.f.w!==p){44.S(7)}}C{7.d.1y.F({I:7.8.e.I.o+\'1a 3q \'+7.8.e.I.J});7.8.e.I.E=0;7.8.e.f.w=p}c((P 7.8.u.1m===\'1w\'&&7.8.u.1m.Q>0)||(7.8.u.1m.4r&&7.8.u.1m.Q>0)){u=7.8.u.1m}C{u=\' \'}c(7.8.u.U.1m!==p){5b.S(7)}7.4A(u,p);5l.S(7);c(7.8.q.3x===H){7.q()}c(7.8.u.1x!==p){1x=7.8.u.1x;Y=7.8.u.Y;2A=7.8.u.2A||\'1q\';7.5Z(1x,Y,2A)}7.V.1b=H;7.5f.S(7)}j 56(s,8,11){R 7=A;7.11=11;7.8=8;7.V={4j:p,1b:p,23:p,3Z:p};7.d={s:s.5v(7.8.e.1g.s),h:1z,1t:1z,u:1z,1y:1z,U:1z,1i:1z,f:1z,22:1z};7.1v={W:p,1K:{},2I:0,2u:{M:p,K:p}};7.1G={};$.2p(7,7.8.T,{q:j(r){R 1c,1X;c(!7.V.1b){B p}c(7.d.h.F(\'2a\')!==\'3a\'){B 7}7.d.h.3S(H,p);1c=7.5n.S(7,r);c(1c===p){B 7}j 2M(){7.d.h.W(\'3r-1F\',H);c(7.8.k.17!==\'29\'){7.2E()}7.5q.S(7,r);c($.16.1d){R 4a=7.d.h.1q(0).e;4a.43(\'5m\');4a.43(\'2B\')}C{7.d.h.F({2B:\'\'})}}7.1v.2I=1;c(7.8.k.17!==\'29\'){7.2h(r,(7.8.q.Z.Q>0&&7.1b!==2))}c(P 7.8.q.1X===\'19\'){1X=$(7.8.q.1X)}C c(7.8.q.1X===H){1X=$(\'12.g\').5S(7.d.h)}c(1X){1X.1L(j(){c($(A).g(\'T\').V.1b===H){$(A).g(\'T\').D()}})}c(P 7.8.q.Z.17===\'j\'){7.8.q.Z.17.S(7.d.h,7.8.q.Z.Q);7.d.h.5u(j(){2M();$(A).5t()})}C{4N(7.8.q.Z.17.2F()){1Z\'3w\':7.d.h.7H(7.8.q.Z.Q,2M);1C;1Z\'5o\':7.d.h.7G(7.8.q.Z.Q,j(){2M();c(7.8.k.17!==\'29\'){7.2h(r,H)}});1C;1Z\'5p\':7.d.h.q(7.8.q.Z.Q,2M);1C;2L:7.d.h.q(1z,2M);1C}7.d.h.5v(7.8.e.1g.3T)}B 7},D:j(r){R 1c;c(!7.V.1b){B p}C c(7.d.h.F(\'2a\')===\'3a\'){B 7}2g(7.1G.q);7.d.h.3S(H,p);1c=7.5A.S(7,r);c(1c===p){B 7}j 2K(){7.d.h.W(\'3r-1F\',H);c($.16.1d){7.d.h.1q(0).e.43(\'2B\')}C{7.d.h.F({2B:\'\'})}7.4Z.S(7,r)}7.1v.2I=0;c(P 7.8.D.Z.17===\'j\'){7.8.D.Z.17.S(7.d.h,7.8.D.Z.Q);7.d.h.5u(j(){2K();$(A).5t()})}C{4N(7.8.D.Z.17.2F()){1Z\'3w\':7.d.h.7z(7.8.D.Z.Q,2K);1C;1Z\'5o\':7.d.h.7y(7.8.D.Z.Q,2K);1C;1Z\'5p\':7.d.h.D(7.8.D.Z.Q,2K);1C;2L:7.d.h.D(1z,2K);1C}7.d.h.7x(7.8.e.1g.3T)}B 7},2I:j(r,38){R 5r=/7w|2s/.1Y(P 38)?38:!7.d.h.2r(\':28\');7[5r?\'q\':\'D\'](r);B 7},2h:j(r,4o){c(!7.V.1b){B p}R 1U=8.k,s=$(1U.s),2Q=7.d.h.47(),2P=7.d.h.48(),1p,1l,k,1o=1U.w.h,2R=1U.w.s,1c,14,i,4L,27,45={M:j(){R 3j=$(2e).3D(),3n=$(2e).o()+$(2e).3D(),2J=1o.x===\'1j\'?2Q/2:2Q,2N=1o.x===\'1j\'?1p/2:1p,2O=(1o.x===\'1j\'?1:2)*7.8.e.I.E,1k=-2*1U.1e.x,3m=k.M+2Q,1h;c(3m>3n){1h=1k-2J-2N+2O;c(k.M+1h>3j||3j-(k.M+1h)<3m-3n){B{1e:1h,f:\'25\'}}}c(k.M<3j){1h=1k+2J+2N-2O;c(3m+1h<3n||3m+1h-3n<3j-k.M){B{1e:1h,f:\'M\'}}}B{1e:0,f:1o.x}},K:j(){R 30=$(2e).3G(),33=$(2e).G()+$(2e).3G(),2J=1o.y===\'1j\'?2P/2:2P,2N=1o.y===\'1j\'?1l/2:1l,2O=(1o.y===\'1j\'?1:2)*7.8.e.I.E,1k=-2*1U.1e.y,32=k.K+2P,1h;c(32>33){1h=1k-2J-2N+2O;c(k.K+1h>30||30-(k.K+1h)<32-33){B{1e:1h,f:\'26\'}}}c(k.K<30){1h=1k+2J+2N-2O;c(32+1h<33||32+1h-33<30-k.K){B{1e:1h,f:\'K\'}}}B{1e:0,f:1o.y}}};c(r&&8.k.s===\'1K\'){2R={x:\'M\',y:\'K\'};1p=1l=0;c(!r.3Y){k=7.1v.1K}C{k={K:r.4c,M:r.3Y}}}C{c(s[0]===31){1p=s.o();1l=s.G();k={K:0,M:0}}C c(s[0]===2e){1p=s.o();1l=s.G();k={K:s.3G(),M:s.3D()}}C c(s.2r(\'7A\')){14=7.8.k.s.W(\'14\').7B(\',\');1V(i=0;i<14.Q;i++){14[i]=1A(14[i],10)}4L=7.8.k.s.3O(\'7F\').W(\'21\');27=$(\'4U[7E="#\'+4L+\'"]:1R\').1k();k={M:1u.3H(27.M+14[0]),K:1u.3H(27.K+14[1])};4N(7.8.k.s.W(\'3M\').2F()){1Z\'7T\':1p=1u.4V(1u.5z(14[2]-14[0]));1l=1u.4V(1u.5z(14[3]-14[1]));1C;1Z\'7C\':1p=14[2]+1;1l=14[2]+1;1C;1Z\'7S\':1p=14[0];1l=14[1];1V(i=0;i<14.Q;i++){c(i%2===0){c(14[i]>1p){1p=14[i]}c(14[i]<14[0]){k.M=1u.3H(27.M+14[i])}}C{c(14[i]>1l){1l=14[i]}c(14[i]<14[1]){k.K=1u.3H(27.K+14[i])}}}1p=1p-(k.M-27.M);1l=1l-(k.K-27.K);1C}1p-=2;1l-=2}C{1p=s.47();1l=s.48();c(!7.d.h.2r(\':28\')){7.d.h.F({M:\'-81\'}).q()}c(!1U.1e.1k||7.d.h.4F()[0]===31.4X){k=s.1k()}C{k=s.k();k.K+=s.4F().3G();k.M+=s.4F().3D()}}k.M+=2R.x===\'25\'?1p:2R.x===\'1j\'?1p/2:0;k.K+=2R.y===\'26\'?1l:2R.y===\'1j\'?1l/2:0}k.M+=1U.1e.x+(1o.x===\'25\'?-2Q:1o.x===\'1j\'?-2Q/2:0);k.K+=1U.1e.y+(1o.y===\'26\'?-2P:1o.y===\'1j\'?-2P/2:0);c(7.8.e.I.E>0){c(1o.x===\'M\'){k.M-=7.8.e.I.E}C c(1o.x===\'25\'){k.M+=7.8.e.I.E}c(1o.y===\'K\'){k.K-=7.8.e.I.E}C c(1o.y===\'26\'){k.K+=7.8.e.I.E}}c(1U.1e.55){(j(){R 2W={x:0,y:0},2n={x:45.M(),y:45.K()},f=2T 2D(8.e.f.w);c(7.d.f&&f){c(2n.y.1e!==0){k.K+=2n.y.1e;f.y=2W.y=2n.y.f}c(2n.x.1e!==0){k.M+=2n.x.1e;f.x=2W.x=2n.x.f}7.1v.2u={M:2W.x===p,K:2W.y===p};c(7.d.f.W(\'1S\')!==f.1w()){44.S(7,f)}}}())}c(!7.d.22&&$.16.1d&&1A($.16.2X.2H(0),10)===6){22.S(7)}1c=7.57.S(7,r);c(1c===p){B 7}c(8.k.s!==\'1K\'&&4o===H){7.V.4j=H;7.d.h.3S().4o(k,7V,\'80\',j(){7.V.4j=p})}C{7.d.h.F(k)}7.5c.S(7,r);B 7},4d:j(1r){c(!7.V.1b||(1r&&P 1r!==\'2s\')){B p}R 1F=7.d.1y.7W().2m(7.d.f).2m(7.d.1i),2f=7.d.1t.2m(7.d.1y.2w()),h=7.d.h,1H=7.8.e.o.1H,2b=7.8.e.o.2b;c(!1r){c(P 7.8.e.o.2Z===\'2s\'){1r=7.8.e.o.2Z}C{7.d.h.F({o:\'6e\'});1F.D();h.o(1r);c($.16.1d){2f.F({2f:\'\'})}1r=7.3d().o;c(!7.8.e.o.2Z){1r=1u.2b(1u.1H(1r,2b),1H)}}}c(1r%2){1r+=1}7.d.h.o(1r);1F.q();c(7.8.e.I.E){7.d.h.1M(\'.g-2k\').1L(j(i){$(A).o(1r-(7.8.e.I.E*2))})}c($.16.1d){2f.F({2f:1});7.d.1t.o(1r);c(7.d.22){7.d.22.o(1r).G(7.3d.G)}}B 7},7Y:j(21){R f,2j,1n,w,X;c(!7.V.1b||P 21!==\'1w\'||!$.18.g.3c[21]){B p}7.8.e=4l.S(7,$.18.g.3c[21],7.8.4v.e);7.d.u.F(2G(7.8.e));c(7.8.u.U.1m!==p){7.d.U.F(2G(7.8.e.U,H))}7.d.1y.F({7U:7.8.e.I.J});c(7.8.e.f.w!==p){c($(\'<1f />\').1q(0).1E){f=7.d.h.1M(\'.g-f 1f:1R\');1n=f.1q(0).1E(\'2d\');1n.5I(0,0,3N,3N);w=f.3O(\'12[1S]:1R\').W(\'1S\');X=4t(w,7.8.e.f.N.o,7.8.e.f.N.G);4u.S(7,f,X,7.8.e.f.J||7.8.e.I.J)}C c($.16.1d){f=7.d.h.1M(\'.g-f [5E="3M"]\');f.W(\'3t\',7.8.e.f.J||7.8.e.I.J)}}c(7.8.e.I.E>0){7.d.h.1M(\'.g-2k\').F({7X:7.8.e.I.J});c($(\'<1f />\').1q(0).1E){2j=4e(7.8.e.I.E);7.d.h.1M(\'.g-1t 1f\').1L(j(){1n=$(A).1q(0).1E(\'2d\');1n.5I(0,0,3N,3N);w=$(A).3O(\'12[1S]:1R\').W(\'1S\');46.S(7,$(A),2j[w],7.8.e.I.E,7.8.e.I.J)})}C c($.16.1d){7.d.h.1M(\'.g-1t [5E="3p"]\').1L(j(){$(A).W(\'3t\',7.8.e.I.J)})}}B 7},4A:j(u,5F){R 36,37,4K;j 4J(){7.4d();c(5F!==p){c(7.8.k.17!==\'29\'){7.2h(7.d.h.2r(\':28\'),H)}c(7.8.e.f.w!==p){42.S(7)}}}c(!u){B p}36=7.54.S(7,u);c(P 36===\'1w\'){u=36}C c(36===p){B}c(7.V.1b){c($.16.1d){7.d.1y.2w().F({2f:\'7Z\'})}c(u.4r&&u.Q>0){u.5V(H).5P(7.d.u).q()}C{7.d.u.2l(u)}37=7.d.u.1M(\'4U[6O=p]\');c(37.Q>0){4K=0;37.1L(j(i){$(\'<4U 4T="\'+$(A).W(\'4T\')+\'" />\').7D(j(){c(++4K===37.Q){4J()}})})}C{4J()}}C{7.8.u.1m=u}7.4Y.S(7);B 7},5Z:j(1x,Y,2A){R 1c;j 4D(u){7.63.S(7);7.4A(u)}c(!7.V.1b){B p}1c=7.51.S(7);c(1c===p){B 7}c(2A===\'60\'){$.60(1x,Y,4D)}C{$.1q(1x,Y,4D)}B 7},5W:j(u){R 1c;c(!7.V.1b||!u){B p}1c=7.64.S(7);c(1c===p){B 7}c(7.d.1i){7.d.1i=7.d.1i.5V(H)}7.d.U.2l(u);c(7.d.1i){7.d.U.3B(7.d.1i)}7.65.S(7);B 7},2E:j(r){R 4B,3F,3y,1c;c(!7.V.1b||7.8.k.17===\'29\'){B p}4B=1A(7.d.h.F(\'z-3s\'),10);3F=7u+$(\'12.g[11^="g"]\').Q-1;c(!7.V.3Z&&4B!==3F){1c=7.5H.S(7,r);c(1c===p){B 7}$(\'12.g[11^="g"]\').5S(7.d.h).1L(j(){c($(A).g(\'T\').V.1b===H){3y=1A($(A).F(\'z-3s\'),10);c(P 3y===\'2s\'&&3y>-1){$(A).F({68:1A($(A).F(\'z-3s\'),10)-1})}$(A).g(\'T\').V.3Z=p}});7.d.h.F({68:3F});7.V.3Z=H;7.5C.S(7,r)}B 7},3X:j(38){7.V.23=38?H:p;B 7},3f:j(){R i,1c,O,4z=7.d.s.Y(\'4p\'+7.1v.W[0]);1c=7.61.S(7);c(1c===p){B 7}c(7.V.1b){7.8.q.L.s.1O(\'4C.g\',7.2h);7.8.q.L.s.1O(\'4x.g\',7.D);7.8.q.L.s.1O(7.8.q.L.r+\'.g\');7.8.D.L.s.1O(7.8.D.L.r+\'.g\');7.d.h.1O(7.8.D.L.r+\'.g\');7.d.h.1O(\'35.g\',7.2E);7.d.h.3W()}C{7.8.q.L.s.1O(7.8.q.L.r+\'.g-\'+7.11+\'-4m\')}c(P 7.d.s.Y(\'g\')===\'19\'){O=7.d.s.Y(\'g\').O;c(P O===\'19\'&&O.Q>0){1V(i=0;i<O.Q-1;i++){c(O[i].11===7.11){O.5X(i,1)}}}}$.18.g.O.5X(7.11,1);c(P O===\'19\'&&O.Q>0){7.d.s.Y(\'g\').3k=O.Q-1}C{7.d.s.73(\'g\')}c(4z){7.d.s.W(7.1v.W[0],4z)}7.62.S(7);B 7.d.s},72:j(){R q,1k;c(!7.V.1b){B p}q=(7.d.h.F(\'2a\')!==\'3a\')?p:H;c(q){7.d.h.F({3V:\'1F\'}).q()}1k=7.d.h.1k();c(q){7.d.h.F({3V:\'28\'}).D()}B 1k},3d:j(){R q,2t;c(!7.V.1b){B p}q=(!7.d.h.2r(\':28\'))?H:p;c(q){7.d.h.F({3V:\'1F\'}).q()}2t={G:7.d.h.48(),o:7.d.h.47()};c(q){7.d.h.F({3V:\'28\'}).D()}B 2t}})}$.18.g=j(8,41){R i,11,O,20,2c,1T,15,T;c(P 8===\'1w\'){c($(A).Y(\'g\')){c(8===\'T\'){B $(A).Y(\'g\').O[$(A).Y(\'g\').3k]}C c(8===\'O\'){B $(A).Y(\'g\').O}}C{B $(A)}}C{c(!8){8={}}c(P 8.u!==\'19\'||(8.u.4r&&8.u.Q>0)){8.u={1m:8.u}}c(P 8.u.U!==\'19\'){8.u.U={1m:8.u.U}}c(P 8.k!==\'19\'){8.k={w:8.k}}c(P 8.k.w!==\'19\'){8.k.w={s:8.k.w,h:8.k.w}}c(P 8.q!==\'19\'){8.q={L:8.q}}c(P 8.q.L!==\'19\'){8.q.L={r:8.q.L}}c(P 8.q.Z!==\'19\'){8.q.Z={17:8.q.Z}}c(P 8.D!==\'19\'){8.D={L:8.D}}c(P 8.D.L!==\'19\'){8.D.L={r:8.D.L}}c(P 8.D.Z!==\'19\'){8.D.Z={17:8.D.Z}}c(P 8.e!==\'19\'){8.e={21:8.e}}8.e=4i(8.e);20=$.2p(H,{},$.18.g.39,8);20.e=4l.S({8:20},20.e);20.4v=$.2p(H,{},8)}B $(A).1L(j(){R 7=$(A),u=p;c(P 8===\'1w\'){1T=8.2F();O=$(A).g(\'O\');c(P O===\'19\'){c(41===H&&1T===\'3f\'){1V(i=O.Q-1;i>-1;i--){c(\'19\'===P O[i]){O[i].3f()}}}C{c(41!==H){O=[$(A).g(\'T\')]}1V(i=0;i<O.Q;i++){c(1T===\'3f\'){O[i].3f()}C c(O[i].V.1b===H){c(1T===\'q\'){O[i].q()}C c(1T===\'D\'){O[i].D()}C c(1T===\'2E\'){O[i].2E()}C c(1T===\'3X\'){O[i].3X(H)}C c(1T===\'71\'){O[i].3X(p)}C c(1T===\'7v\'){O[i].2h()}}}}}}C{15=$.2p(H,{},20);15.D.Z.Q=20.D.Z.Q;15.q.Z.Q=20.q.Z.Q;c(15.k.3U===p){15.k.3U=$(31.4X)}c(15.k.s===p){15.k.s=$(A)}c(15.q.L.s===p){15.q.L.s=$(A)}c(15.D.L.s===p){15.D.L.s=$(A)}15.k.w.h=2T 2D(15.k.w.h);15.k.w.s=2T 2D(15.k.w.s);c(!15.u.1m.Q){$([\'U\',\'6b\']).1L(j(i,W){R 2C=7.W(W);c(2C&&2C.Q){u=[W,2C];7.Y(\'4p\'+W,2C).74(W);15.u.1m=2C.3l(/\\n/75,\'<78 />\');B p}})}11=$.18.g.O.Q;1V(i=0;i<11;i++){c(P $.18.g.O[i]===\'5i\'){11=i;1C}}2c=2T 56($(A),15,11);$.18.g.O[11]=2c;2c.1v.W=u;c(P $(A).Y(\'g\')===\'19\'&&$(A).Y(\'g\')){c(P $(A).W(\'g\')===\'5i\'){$(A).Y(\'g\').3k=$(A).Y(\'g\').O.Q}$(A).Y(\'g\').O.5h(2c)}C{$(A).Y(\'g\',{3k:0,O:[2c]})}c(15.u.5w===p&&15.q.L.r!==p&&15.q.3x!==H){15.q.L.s.1J(15.q.L.r+\'.g-\'+11+\'-4m\',{g:11},j(r){T=$.18.g.O[r.Y.g];T.8.q.L.s.1O(T.8.q.L.r+\'.g-\'+r.Y.g+\'-4m\');T.1v.1K={M:r.3Y,K:r.4c};4w.S(T);T.8.q.L.s.77(T.8.q.L.r)})}C{2c.1v.1K={M:15.q.L.s.1k().M,K:15.q.L.s.1k().K};4w.S(2c)}}})};$.18.g.O=[];$.18.g.18={W:$.18.W};$.18.W=j(W){R T=$(A).g(\'T\');B(3b.Q===1&&(/U|6b/i).1Y(W)&&T.V&&T.V.1b===H)?$(A).Y(\'4p\'+T.1v.W[0]):$.18.g.18.W.4s(A,3b)};$.18.g.39={u:{5w:p,1m:p,1x:p,Y:1z,U:{1m:p,1i:p}},k:{s:p,w:{s:\'3P\',h:\'3K\'},1e:{x:0,y:0,1K:H,55:p,3E:H,3L:H,1k:p},17:\'34\',3U:p},q:{L:{s:p,r:\'35\'},Z:{17:\'3w\',Q:5T},2V:76,1X:p,3x:p},D:{L:{s:p,r:\'4x\'},Z:{17:\'3w\',Q:5T},2V:0,3g:p},T:{5J:j(){},5f:j(){},57:j(){},5c:j(){},5n:j(){},5q:j(){},5A:j(){},4Z:j(){},54:j(){},4Y:j(){},51:j(){},63:j(){},64:j(){},65:j(){},61:j(){},62:j(){},5H:j(){},5C:j(){}}};$.18.g.3c={39:{1s:\'66\',J:\'#6Z\',2u:\'1F\',6Y:\'M\',o:{2b:0,1H:6S},2x:\'6R 6Q\',I:{o:1,E:0,J:\'#6P\'},f:{w:p,J:p,N:{o:13,G:13},2B:1},U:{1s:\'#6T\',6U:\'6X\',2x:\'6W 6V\'},1i:{79:\'7a\'},1g:{s:\'\',f:\'g-f\',U:\'g-U\',1i:\'g-1i\',u:\'g-u\',3T:\'g-3T\'}},5L:{I:{o:3,E:0,J:\'#7o\'},U:{1s:\'#7n\',J:\'#5M\'},1s:\'#7m\',J:\'#5M\',1g:{h:\'g-5L\'}},6d:{I:{o:3,E:0,J:\'#7p\'},U:{1s:\'#7q\',J:\'#6c\'},1s:\'66\',J:\'#6c\',1g:{h:\'g-6d\'}},69:{I:{o:3,E:0,J:\'#7t\'},U:{1s:\'#7s\',J:\'#67\'},1s:\'#7r\',J:\'#67\',1g:{h:\'g-69\'}},4H:{I:{o:3,E:0,J:\'#7l\'},U:{1s:\'#7k\',J:\'#6g\'},1s:\'#7e\',J:\'#6g\',1g:{h:\'g-4H\'}},52:{I:{o:3,E:0,J:\'#7d\'},U:{1s:\'#7c\',J:\'#4W\'},1s:\'#7b\',J:\'#4W\',1g:{h:\'g-52\'}},5k:{I:{o:3,E:0,J:\'#7f\'},U:{1s:\'#7g\',J:\'#7j\'},1s:\'#7i\',J:\'#7h\',1g:{h:\'g-5k\'}}}}(82));',62,499,'|||||||self|options||||if|elements|style|tip|qtip|tooltip||function|position||||width|false|show|event|target||content||corner||||this|return|else|hide|radius|css|height|true|border|color|top|when|left|size|interfaces|typeof|length|var|call|api|title|status|attr|coordinates|data|effect||id|div||coords|config|browser|type|fn|object|px|rendered|returned|msie|adjust|canvas|classes|adj|button|center|offset|targetHeight|text|context|my|targetWidth|get|newWidth|background|wrapper|Math|cache|string|url|contentWrapper|null|parseInt|1px|break|finalStyle|getContext|hidden|timers|max|class|bind|mouse|each|find|tips|unbind|ieAdjust|containers|first|rel|command|posOptions|for|inactive|solo|test|case|opts|name|bgiframe|disabled|positionAdjust|right|bottom|imagePos|visible|static|display|min|obj||window|zoom|clearTimeout|updatePosition|hideTarget|borders|betweenCorners|html|add|adapted|path|extend|margin|is|number|dimensions|overflow|styleExtend|children|padding|precedance|90|method|opacity|val|Corner|focus|toLowerCase|jQueryStyle|charAt|toggle|myOffset|afterHide|default|afterShow|atOffset|borderAdjust|elemHeight|elemWidth|at|line|new|styleObj|delay|adjusted|version|font|value|topEdge|document|pBottom|bottomEdge|absolute|mouseover|parsedContent|images|state|defaults|none|arguments|styles|getDimensions|borderTop|destroy|fixed|showTarget|borderBottom|leftEdge|current|replace|pRight|rightEdge|align|arc|solid|aria|index|fillcolor|inactiveEvents|inactiveMethod|fade|ready|elemIndex|delete|styleArray|prepend|image|scrollLeft|scroll|newIndex|scrollTop|floor|behavior|coordsize|topLeft|resize|shape|300|parent|bottomRight|newMargin|VML|stop|active|container|visiblity|remove|disable|pageX|focused|topRight|blanket|positionTip|removeAttribute|createTip|adapt|drawBorder|outerWidth|outerHeight|marginTop|ieStyle|sub|pageY|updateWidth|calculateBorders|ltr|borderCoord|paddingSize|sanitizeStyle|animated|dir|buildStyle|create|paddingCorner|animate|old|sideWidth|jquery|apply|calculateTip|drawTip|user|construct|mouseout|relative|oldattr|updateContent|curIndex|mousemove|setupContent|block|offsetParent|vertWidth|red|bottomLeft|afterLoad|loadedImages|mapName|setTimeout|switch|betweenWidth|hideMethod|vertical|unfocus|showMethod|src|img|ceil|58792E|body|onContentUpdate|onHide||beforeContentLoad|green|inline|beforeContentUpdate|screen|QTip|beforePositionUpdate|prependTo|createBorder|String|createTitle|onPositionUpdate|click|role|onRender|parents|push|undefined|mouseenter|blue|assignEvents|filter|beforeShow|slide|grow|onShow|condition|append|dequeue|queue|addClass|prerender|middle|match|abs|beforeHide|bottomright|onFocus|270|nodeName|reposition|fillStyle|beforeFocus|clearRect|beforeRender|topright|cream|A27D35|topleft|unshift|appendTo|lineTo|in|not|100|beginPath|clone|updateTitle|splice|fill|loadContent|post|beforeDestroy|onDestroy|onContentLoad|beforeTitleUpdate|onTitleUpdate|white|f3f3f3|zIndex|dark|bottomleft|alt|454545|light|auto|stroked|9C2F2F|dblclick|rightcenter|mouseup|mousedown|mouseleave|Right|Left|moveTo|filled|out|endangle|startangle|use|strict|bottomcenter|qtipSelector|leftbottom|topcenter|righttop|leave|eq|rightbottom|0px|labelledby|while|float|borderWidth|xe|leftcenter|marginLeft|search|lefttop|PI|complete|d3d3d3|9px|5px|250|e1e1e1|fontWeight|12px|7px|bold|textAlign|111|relatedTarget|enable|getPosition|removeData|removeAttr|gi|140|trigger|br|cursor|pointer|CDE6AC|b9db8c|A9DB66|F79992|ADD9ED|D0E9F5|4D9FBF|E5F6FE|5E99BD|f28279|CE6F6F|FBF7AA|F0DE7D|F9E98E|E2E2E2|f1f1f1|505050|404040|303030|15000|update|boolean|removeClass|slideUp|fadeOut|area|split|circle|load|usemap|map|slideDown|fadeIn|frameborder|iframe|preventDefault|stopPropagation|tabindex|javascript|webkit|moz|describedby|alpha|poly|rect|borderColor|200|siblings|backgroundColor|updateStyle|normal|swing|10000000em|jQuery'.split('|'),0,{}))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/static/hdabo/js/jquery.tablednd_0_5.js	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,382 @@
+/**
+ * TableDnD plug-in for JQuery, allows you to drag and drop table rows
+ * You can set up various options to control how the system will work
+ * Copyright (c) Denis Howlett <denish@isocra.com>
+ * Licensed like jQuery, see http://docs.jquery.com/License.
+ *
+ * Configuration options:
+ * 
+ * onDragStyle
+ *     This is the style that is assigned to the row during drag. There are limitations to the styles that can be
+ *     associated with a row (such as you can't assign a border--well you can, but it won't be
+ *     displayed). (So instead consider using onDragClass.) The CSS style to apply is specified as
+ *     a map (as used in the jQuery css(...) function).
+ * onDropStyle
+ *     This is the style that is assigned to the row when it is dropped. As for onDragStyle, there are limitations
+ *     to what you can do. Also this replaces the original style, so again consider using onDragClass which
+ *     is simply added and then removed on drop.
+ * onDragClass
+ *     This class is added for the duration of the drag and then removed when the row is dropped. It is more
+ *     flexible than using onDragStyle since it can be inherited by the row cells and other content. The default
+ *     is class is tDnD_whileDrag. So to use the default, simply customise this CSS class in your
+ *     stylesheet.
+ * onDrop
+ *     Pass a function that will be called when the row is dropped. The function takes 2 parameters: the table
+ *     and the row that was dropped. You can work out the new order of the rows by using
+ *     table.rows.
+ * onDragStart
+ *     Pass a function that will be called when the user starts dragging. The function takes 2 parameters: the
+ *     table and the row which the user has started to drag.
+ * onAllowDrop
+ *     Pass a function that will be called as a row is over another row. If the function returns true, allow 
+ *     dropping on that row, otherwise not. The function takes 2 parameters: the dragged row and the row under
+ *     the cursor. It returns a boolean: true allows the drop, false doesn't allow it.
+ * scrollAmount
+ *     This is the number of pixels to scroll if the user moves the mouse cursor to the top or bottom of the
+ *     window. The page should automatically scroll up or down as appropriate (tested in IE6, IE7, Safari, FF2,
+ *     FF3 beta
+ * dragHandle
+ *     This is the name of a class that you assign to one or more cells in each row that is draggable. If you
+ *     specify this class, then you are responsible for setting cursor: move in the CSS and only these cells
+ *     will have the drag behaviour. If you do not specify a dragHandle, then you get the old behaviour where
+ *     the whole row is draggable.
+ * 
+ * Other ways to control behaviour:
+ *
+ * Add class="nodrop" to any rows for which you don't want to allow dropping, and class="nodrag" to any rows
+ * that you don't want to be draggable.
+ *
+ * Inside the onDrop method you can also call $.tableDnD.serialize() this returns a string of the form
+ * <tableID>[]=<rowID1>&<tableID>[]=<rowID2> so that you can send this back to the server. The table must have
+ * an ID as must all the rows.
+ *
+ * Other methods:
+ *
+ * $("...").tableDnDUpdate() 
+ * Will update all the matching tables, that is it will reapply the mousedown method to the rows (or handle cells).
+ * This is useful if you have updated the table rows using Ajax and you want to make the table draggable again.
+ * The table maintains the original configuration (so you don't have to specify it again).
+ *
+ * $("...").tableDnDSerialize()
+ * Will serialize and return the serialized string as above, but for each of the matching tables--so it can be
+ * called from anywhere and isn't dependent on the currentTable being set up correctly before calling
+ *
+ * Known problems:
+ * - Auto-scoll has some problems with IE7  (it scrolls even when it shouldn't), work-around: set scrollAmount to 0
+ * 
+ * Version 0.2: 2008-02-20 First public version
+ * Version 0.3: 2008-02-07 Added onDragStart option
+ *                         Made the scroll amount configurable (default is 5 as before)
+ * Version 0.4: 2008-03-15 Changed the noDrag/noDrop attributes to nodrag/nodrop classes
+ *                         Added onAllowDrop to control dropping
+ *                         Fixed a bug which meant that you couldn't set the scroll amount in both directions
+ *                         Added serialize method
+ * Version 0.5: 2008-05-16 Changed so that if you specify a dragHandle class it doesn't make the whole row
+ *                         draggable
+ *                         Improved the serialize method to use a default (and settable) regular expression.
+ *                         Added tableDnDupate() and tableDnDSerialize() to be called when you are outside the table
+ */
+jQuery.tableDnD = {
+    /** Keep hold of the current table being dragged */
+    currentTable : null,
+    /** Keep hold of the current drag object if any */
+    dragObject: null,
+    /** The current mouse offset */
+    mouseOffset: null,
+    /** Remember the old value of Y so that we don't do too much processing */
+    oldY: 0,
+
+    /** Actually build the structure */
+    build: function(options) {
+        // Set up the defaults if any
+
+        this.each(function() {
+            // This is bound to each matching table, set up the defaults and override with user options
+            this.tableDnDConfig = jQuery.extend({
+                onDragStyle: null,
+                onDropStyle: null,
+				// Add in the default class for whileDragging
+				onDragClass: "tDnD_whileDrag",
+                onDrop: null,
+                onDragStart: null,
+                scrollAmount: 5,
+				serializeRegexp: /[^\-]*$/, // The regular expression to use to trim row IDs
+				serializeParamName: null, // If you want to specify another parameter name instead of the table ID
+                dragHandle: null // If you give the name of a class here, then only Cells with this class will be draggable
+            }, options || {});
+            // Now make the rows draggable
+            jQuery.tableDnD.makeDraggable(this);
+        });
+
+        // Now we need to capture the mouse up and mouse move event
+        // We can use bind so that we don't interfere with other event handlers
+        jQuery(document)
+            .bind('mousemove', jQuery.tableDnD.mousemove)
+            .bind('mouseup', jQuery.tableDnD.mouseup);
+
+        // Don't break the chain
+        return this;
+    },
+
+    /** This function makes all the rows on the table draggable apart from those marked as "NoDrag" */
+    makeDraggable: function(table) {
+        var config = table.tableDnDConfig;
+		if (table.tableDnDConfig.dragHandle) {
+			// We only need to add the event to the specified cells
+			var cells = jQuery("td."+table.tableDnDConfig.dragHandle, table);
+			cells.each(function() {
+				// The cell is bound to "this"
+                jQuery(this).mousedown(function(ev) {
+                    jQuery.tableDnD.dragObject = this.parentNode;
+                    jQuery.tableDnD.currentTable = table;
+                    jQuery.tableDnD.mouseOffset = jQuery.tableDnD.getMouseOffset(this, ev);
+                    if (config.onDragStart) {
+                        // Call the onDrop method if there is one
+                        config.onDragStart(table, this);
+                    }
+                    return false;
+                });
+			})
+		} else {
+			// For backwards compatibility, we add the event to the whole row
+	        var rows = jQuery("tr", table); // get all the rows as a wrapped set
+	        rows.each(function() {
+				// Iterate through each row, the row is bound to "this"
+				var row = jQuery(this);
+				if (! row.hasClass("nodrag")) {
+	                row.mousedown(function(ev) {
+	                    if (ev.target.tagName == "TD") {
+	                        jQuery.tableDnD.dragObject = this;
+	                        jQuery.tableDnD.currentTable = table;
+	                        jQuery.tableDnD.mouseOffset = jQuery.tableDnD.getMouseOffset(this, ev);
+	                        if (config.onDragStart) {
+	                            // Call the onDrop method if there is one
+	                            config.onDragStart(table, this);
+	                        }
+	                        return false;
+	                    }
+	                }).css("cursor", "move"); // Store the tableDnD object
+				}
+			});
+		}
+	},
+
+	updateTables: function() {
+		this.each(function() {
+			// this is now bound to each matching table
+			if (this.tableDnDConfig) {
+				jQuery.tableDnD.makeDraggable(this);
+			}
+		})
+	},
+
+    /** Get the mouse coordinates from the event (allowing for browser differences) */
+    mouseCoords: function(ev){
+        if(ev.pageX || ev.pageY){
+            return {x:ev.pageX, y:ev.pageY};
+        }
+        return {
+            x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
+            y:ev.clientY + document.body.scrollTop  - document.body.clientTop
+        };
+    },
+
+    /** Given a target element and a mouse event, get the mouse offset from that element.
+        To do this we need the element's position and the mouse position */
+    getMouseOffset: function(target, ev) {
+        ev = ev || window.event;
+
+        var docPos    = this.getPosition(target);
+        var mousePos  = this.mouseCoords(ev);
+        return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
+    },
+
+    /** Get the position of an element by going up the DOM tree and adding up all the offsets */
+    getPosition: function(e){
+        var left = 0;
+        var top  = 0;
+        /** Safari fix -- thanks to Luis Chato for this! */
+        if (e.offsetHeight == 0) {
+            /** Safari 2 doesn't correctly grab the offsetTop of a table row
+            this is detailed here:
+            http://jacob.peargrove.com/blog/2006/technical/table-row-offsettop-bug-in-safari/
+            the solution is likewise noted there, grab the offset of a table cell in the row - the firstChild.
+            note that firefox will return a text node as a first child, so designing a more thorough
+            solution may need to take that into account, for now this seems to work in firefox, safari, ie */
+            e = e.firstChild; // a table cell
+        }
+
+        while (e.offsetParent){
+            left += e.offsetLeft;
+            top  += e.offsetTop;
+            e     = e.offsetParent;
+        }
+
+        left += e.offsetLeft;
+        top  += e.offsetTop;
+
+        return {x:left, y:top};
+    },
+
+    mousemove: function(ev) {
+        if (jQuery.tableDnD.dragObject == null) {
+            return;
+        }
+
+        var dragObj = jQuery(jQuery.tableDnD.dragObject);
+        var config = jQuery.tableDnD.currentTable.tableDnDConfig;
+        var mousePos = jQuery.tableDnD.mouseCoords(ev);
+        var y = mousePos.y - jQuery.tableDnD.mouseOffset.y;
+        //auto scroll the window
+	    var yOffset = window.pageYOffset;
+	 	if (document.all) {
+	        // Windows version
+	        //yOffset=document.body.scrollTop;
+	        if (typeof document.compatMode != 'undefined' &&
+	             document.compatMode != 'BackCompat') {
+	           yOffset = document.documentElement.scrollTop;
+	        }
+	        else if (typeof document.body != 'undefined') {
+	           yOffset=document.body.scrollTop;
+	        }
+
+	    }
+		    
+		if (mousePos.y-yOffset < config.scrollAmount) {
+	    	window.scrollBy(0, -config.scrollAmount);
+	    } else {
+            var windowHeight = window.innerHeight ? window.innerHeight
+                    : document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight;
+            if (windowHeight-(mousePos.y-yOffset) < config.scrollAmount) {
+                window.scrollBy(0, config.scrollAmount);
+            }
+        }
+
+
+        if (y != jQuery.tableDnD.oldY) {
+            // work out if we're going up or down...
+            var movingDown = y > jQuery.tableDnD.oldY;
+            // update the old value
+            jQuery.tableDnD.oldY = y;
+            // update the style to show we're dragging
+			if (config.onDragClass) {
+				dragObj.addClass(config.onDragClass);
+			} else {
+	            dragObj.css(config.onDragStyle);
+			}
+            // If we're over a row then move the dragged row to there so that the user sees the
+            // effect dynamically
+            var currentRow = jQuery.tableDnD.findDropTargetRow(dragObj, y);
+            if (currentRow) {
+                // TODO worry about what happens when there are multiple TBODIES
+                if (movingDown && jQuery.tableDnD.dragObject != currentRow) {
+                    jQuery.tableDnD.dragObject.parentNode.insertBefore(jQuery.tableDnD.dragObject, currentRow.nextSibling);
+                } else if (! movingDown && jQuery.tableDnD.dragObject != currentRow) {
+                    jQuery.tableDnD.dragObject.parentNode.insertBefore(jQuery.tableDnD.dragObject, currentRow);
+                }
+            }
+        }
+
+        return false;
+    },
+
+    /** We're only worried about the y position really, because we can only move rows up and down */
+    findDropTargetRow: function(draggedRow, y) {
+        var rows = jQuery.tableDnD.currentTable.rows;
+        for (var i=0; i<rows.length; i++) {
+            var row = rows[i];
+            var rowY    = this.getPosition(row).y;
+            var rowHeight = parseInt(row.offsetHeight)/2;
+            if (row.offsetHeight == 0) {
+                rowY = this.getPosition(row.firstChild).y;
+                rowHeight = parseInt(row.firstChild.offsetHeight)/2;
+            }
+            // Because we always have to insert before, we need to offset the height a bit
+            if ((y > rowY - rowHeight) && (y < (rowY + rowHeight))) {
+                // that's the row we're over
+				// If it's the same as the current row, ignore it
+				if (row == draggedRow) {return null;}
+                var config = jQuery.tableDnD.currentTable.tableDnDConfig;
+                if (config.onAllowDrop) {
+                    if (config.onAllowDrop(draggedRow, row)) {
+                        return row;
+                    } else {
+                        return null;
+                    }
+                } else {
+					// If a row has nodrop class, then don't allow dropping (inspired by John Tarr and Famic)
+                    var nodrop = jQuery(row).hasClass("nodrop");
+                    if (! nodrop) {
+                        return row;
+                    } else {
+                        return null;
+                    }
+                }
+                return row;
+            }
+        }
+        return null;
+    },
+
+    mouseup: function(e) {
+        if (jQuery.tableDnD.currentTable && jQuery.tableDnD.dragObject) {
+            var droppedRow = jQuery.tableDnD.dragObject;
+            var config = jQuery.tableDnD.currentTable.tableDnDConfig;
+            // If we have a dragObject, then we need to release it,
+            // The row will already have been moved to the right place so we just reset stuff
+			if (config.onDragClass) {
+	            jQuery(droppedRow).removeClass(config.onDragClass);
+			} else {
+	            jQuery(droppedRow).css(config.onDropStyle);
+			}
+            jQuery.tableDnD.dragObject   = null;
+            if (config.onDrop) {
+                // Call the onDrop method if there is one
+                config.onDrop(jQuery.tableDnD.currentTable, droppedRow);
+            }
+            jQuery.tableDnD.currentTable = null; // let go of the table too
+        }
+    },
+
+    serialize: function() {
+        if (jQuery.tableDnD.currentTable) {
+            return jQuery.tableDnD.serializeTable(jQuery.tableDnD.currentTable);
+        } else {
+            return "Error: No Table id set, you need to set an id on your table and every row";
+        }
+    },
+
+	serializeTable: function(table) {
+        var result = "";
+        var tableId = table.id;
+        var rows = table.rows;
+        for (var i=0; i<rows.length; i++) {
+            if (result.length > 0) result += "&";
+            var rowId = rows[i].id;
+            if (rowId && rowId && table.tableDnDConfig && table.tableDnDConfig.serializeRegexp) {
+                rowId = rowId.match(table.tableDnDConfig.serializeRegexp)[0];
+            }
+
+            result += tableId + '[]=' + rowId;
+        }
+        return result;
+	},
+
+	serializeTables: function() {
+        var result = "";
+        this.each(function() {
+			// this is now bound to each matching table
+			result += jQuery.tableDnD.serializeTable(this);
+		});
+        return result;
+    }
+
+}
+
+jQuery.fn.extend(
+	{
+		tableDnD : jQuery.tableDnD.build,
+		tableDnDUpdate : jQuery.tableDnD.updateTables,
+		tableDnDSerialize: jQuery.tableDnD.serializeTables
+	}
+);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/static/hdabo/js/jquery.textchange.min.js	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,10 @@
+/*!
+ * jQuery TextChange Plugin
+ * http://www.zurb.com/playground/jquery-text-change-custom-event
+ *
+ * Copyright 2010, ZURB
+ * Released under the MIT License
+ */
+ (function(a){a.event.special.textchange={setup:function(){a(this).data("lastValue",this.contentEditable==="true"?a(this).html():a(this).val());a(this).bind("keyup.textchange",a.event.special.textchange.handler);a(this).bind("cut.textchange paste.textchange input.textchange",a.event.special.textchange.delayedHandler)},teardown:function(){a(this).unbind(".textchange")},handler:function(){a.event.special.textchange.triggerIfChanged(a(this))},delayedHandler:function(){var b=a(this);setTimeout(function(){a.event.special.textchange.triggerIfChanged(b)},
+ 25)},triggerIfChanged:function(b){var c=b[0].contentEditable==="true"?b.html():b.val();if(c!==b.data("lastValue")){b.trigger("textchange",b.data("lastValue"));b.data("lastValue",c)}}};a.event.special.hastext={setup:function(){a(this).bind("textchange",a.event.special.hastext.handler)},teardown:function(){a(this).unbind("textchange",a.event.special.hastext.handler)},handler:function(b,c){c===""&&c!==a(this).val()&&a(this).trigger("hastext")}};a.event.special.notext={setup:function(){a(this).bind("textchange",
+ a.event.special.notext.handler)},teardown:function(){a(this).unbind("textchange",a.event.special.notext.handler)},handler:function(b,c){a(this).val()===""&&a(this).val()!==c&&a(this).trigger("notext")}}})(jQuery);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/static/hdabo/js/jquery.tools.min.js	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,116 @@
+/*
+ * jQuery Tools 1.2.4 - The missing UI library for the Web
+ * 
+ * [toolbox.flashembed, toolbox.history, toolbox.expose, toolbox.mousewheel, tabs, tabs.slideshow, tooltip, tooltip.slide, tooltip.dynamic, scrollable, scrollable.autoscroll, scrollable.navigator, overlay, overlay.apple, dateinput, rangeinput, validator]
+ * 
+ * NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE.
+ * 
+ * http://flowplayer.org/tools/
+ * 
+ * jquery.event.wheel.js - rev 1 
+ * Copyright (c) 2008, Three Dub Media (http://threedubmedia.com)
+ * Liscensed under the MIT License (MIT-LICENSE.txt)
+ * http://www.opensource.org/licenses/mit-license.php
+ * Created: 2008-07-01 | Updated: 2008-07-14
+ * 
+ * -----
+ * 
+ * File generated: Wed Aug 18 09:10:10 GMT 2010
+ */
+(function(){function f(a,b){if(b)for(var c in b)if(b.hasOwnProperty(c))a[c]=b[c];return a}function l(a,b){var c=[];for(var d in a)if(a.hasOwnProperty(d))c[d]=b(a[d]);return c}function m(a,b,c){if(e.isSupported(b.version))a.innerHTML=e.getHTML(b,c);else if(b.expressInstall&&e.isSupported([6,65]))a.innerHTML=e.getHTML(f(b,{src:b.expressInstall}),{MMredirectURL:location.href,MMplayerType:"PlugIn",MMdoctitle:document.title});else{if(!a.innerHTML.replace(/\s/g,"")){a.innerHTML="<h2>Flash version "+b.version+
+" or greater is required</h2><h3>"+(g[0]>0?"Your version is "+g:"You have no flash plugin installed")+"</h3>"+(a.tagName=="A"?"<p>Click here to download latest version</p>":"<p>Download latest version from <a href='"+k+"'>here</a></p>");if(a.tagName=="A")a.onclick=function(){location.href=k}}if(b.onFail){var d=b.onFail.call(this);if(typeof d=="string")a.innerHTML=d}}if(i)window[b.id]=document.getElementById(b.id);f(this,{getRoot:function(){return a},getOptions:function(){return b},getConf:function(){return c},
+getApi:function(){return a.firstChild}})}var i=document.all,k="http://www.adobe.com/go/getflashplayer",n=typeof jQuery=="function",o=/(\d+)[^\d]+(\d+)[^\d]*(\d*)/,j={width:"100%",height:"100%",id:"_"+(""+Math.random()).slice(9),allowfullscreen:true,allowscriptaccess:"always",quality:"high",version:[3,0],onFail:null,expressInstall:null,w3c:false,cachebusting:false};window.attachEvent&&window.attachEvent("onbeforeunload",function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){}});
+window.flashembed=function(a,b,c){if(typeof a=="string")a=document.getElementById(a.replace("#",""));if(a){if(typeof b=="string")b={src:b};return new m(a,f(f({},j),b),c)}};var e=f(window.flashembed,{conf:j,getVersion:function(){var a,b;try{b=navigator.plugins["Shockwave Flash"].description.slice(16)}catch(c){try{b=(a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"))&&a.GetVariable("$version")}catch(d){try{b=(a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"))&&a.GetVariable("$version")}catch(h){}}}return(b=
+o.exec(b))?[b[1],b[3]]:[0,0]},asString:function(a){if(a===null||a===undefined)return null;var b=typeof a;if(b=="object"&&a.push)b="array";switch(b){case "string":a=a.replace(new RegExp('(["\\\\])',"g"),"\\$1");a=a.replace(/^\s?(\d+\.?\d+)%/,"$1pct");return'"'+a+'"';case "array":return"["+l(a,function(d){return e.asString(d)}).join(",")+"]";case "function":return'"function()"';case "object":b=[];for(var c in a)a.hasOwnProperty(c)&&b.push('"'+c+'":'+e.asString(a[c]));return"{"+b.join(",")+"}"}return String(a).replace(/\s/g,
+" ").replace(/\'/g,'"')},getHTML:function(a,b){a=f({},a);var c='<object width="'+a.width+'" height="'+a.height+'" id="'+a.id+'" name="'+a.id+'"';if(a.cachebusting)a.src+=(a.src.indexOf("?")!=-1?"&":"?")+Math.random();c+=a.w3c||!i?' data="'+a.src+'" type="application/x-shockwave-flash"':' classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"';c+=">";if(a.w3c||i)c+='<param name="movie" value="'+a.src+'" />';a.width=a.height=a.id=a.w3c=a.src=null;a.onFail=a.version=a.expressInstall=null;for(var d in a)if(a[d])c+=
+'<param name="'+d+'" value="'+a[d]+'" />';a="";if(b){for(var h in b)if(b[h]){d=b[h];a+=h+"="+(/function|object/.test(typeof d)?e.asString(d):d)+"&"}a=a.slice(0,-1);c+='<param name="flashvars" value=\''+a+"' />"}c+="</object>";return c},isSupported:function(a){return g[0]>a[0]||g[0]==a[0]&&g[1]>=a[1]}}),g=e.getVersion();if(n){jQuery.tools=jQuery.tools||{version:"1.2.4"};jQuery.tools.flashembed={conf:j};jQuery.fn.flashembed=function(a,b){return this.each(function(){$(this).data("flashembed",flashembed(this,
+a,b))})}}})();
+(function(b){function h(c){if(c){var a=d.contentWindow.document;a.open().close();a.location.hash=c}}var g,d,f,i;b.tools=b.tools||{version:"1.2.4"};b.tools.history={init:function(c){if(!i){if(b.browser.msie&&b.browser.version<"8"){if(!d){d=b("<iframe/>").attr("src","javascript:false;").hide().get(0);b("body").append(d);setInterval(function(){var a=d.contentWindow.document;a=a.location.hash;g!==a&&b.event.trigger("hash",a)},100);h(location.hash||"#")}}else setInterval(function(){var a=location.hash;
+a!==g&&b.event.trigger("hash",a)},100);f=!f?c:f.add(c);c.click(function(a){var e=b(this).attr("href");d&&h(e);if(e.slice(0,1)!="#"){location.href="#"+e;return a.preventDefault()}});i=true}}};b(window).bind("hash",function(c,a){a?f.filter(function(){var e=b(this).attr("href");return e==a||e==a.replace("#","")}).trigger("history",[a]):f.eq(0).trigger("history",[a]);g=a;window.location.hash=g});b.fn.history=function(c){b.tools.history.init(this);return this.bind("history",c)}})(jQuery);
+(function(b){function k(){if(b.browser.msie){var a=b(document).height(),d=b(window).height();return[window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,a-d<20?d:a]}return[b(document).width(),b(document).height()]}function h(a){if(a)return a.call(b.mask)}b.tools=b.tools||{version:"1.2.4"};var l;l=b.tools.expose={conf:{maskId:"exposeMask",loadSpeed:"slow",closeSpeed:"fast",closeOnClick:true,closeOnEsc:true,zIndex:9998,opacity:0.8,startOpacity:0,color:"#fff",onLoad:null,
+onClose:null}};var c,i,e,g,j;b.mask={load:function(a,d){if(e)return this;if(typeof a=="string")a={color:a};a=a||g;g=a=b.extend(b.extend({},l.conf),a);c=b("#"+a.maskId);if(!c.length){c=b("<div/>").attr("id",a.maskId);b("body").append(c)}var m=k();c.css({position:"absolute",top:0,left:0,width:m[0],height:m[1],display:"none",opacity:a.startOpacity,zIndex:a.zIndex});a.color&&c.css("backgroundColor",a.color);if(h(a.onBeforeLoad)===false)return this;a.closeOnEsc&&b(document).bind("keydown.mask",function(f){f.keyCode==
+27&&b.mask.close(f)});a.closeOnClick&&c.bind("click.mask",function(f){b.mask.close(f)});b(window).bind("resize.mask",function(){b.mask.fit()});if(d&&d.length){j=d.eq(0).css("zIndex");b.each(d,function(){var f=b(this);/relative|absolute|fixed/i.test(f.css("position"))||f.css("position","relative")});i=d.css({zIndex:Math.max(a.zIndex+1,j=="auto"?0:j)})}c.css({display:"block"}).fadeTo(a.loadSpeed,a.opacity,function(){b.mask.fit();h(a.onLoad);e="full"});e=true;return this},close:function(){if(e){if(h(g.onBeforeClose)===
+false)return this;c.fadeOut(g.closeSpeed,function(){h(g.onClose);i&&i.css({zIndex:j});e=false});b(document).unbind("keydown.mask");c.unbind("click.mask");b(window).unbind("resize.mask")}return this},fit:function(){if(e){var a=k();c.css({width:a[0],height:a[1]})}},getMask:function(){return c},isLoaded:function(a){return a?e=="full":e},getConf:function(){return g},getExposed:function(){return i}};b.fn.mask=function(a){b.mask.load(a);return this};b.fn.expose=function(a){b.mask.load(a,this);return this}})(jQuery);
+(function(b){function c(a){switch(a.type){case "mousemove":return b.extend(a.data,{clientX:a.clientX,clientY:a.clientY,pageX:a.pageX,pageY:a.pageY});case "DOMMouseScroll":b.extend(a,a.data);a.delta=-a.detail/3;break;case "mousewheel":a.delta=a.wheelDelta/120;break}a.type="wheel";return b.event.handle.call(this,a,a.delta)}b.fn.mousewheel=function(a){return this[a?"bind":"trigger"]("wheel",a)};b.event.special.wheel={setup:function(){b.event.add(this,d,c,{})},teardown:function(){b.event.remove(this,
+d,c)}};var d=!b.browser.mozilla?"mousewheel":"DOMMouseScroll"+(b.browser.version<"1.9"?" mousemove":"")})(jQuery);
+(function(c){function p(d,b,a){var e=this,l=d.add(this),h=d.find(a.tabs),i=b.jquery?b:d.children(b),j;h.length||(h=d.children());i.length||(i=d.parent().find(b));i.length||(i=c(b));c.extend(this,{click:function(f,g){var k=h.eq(f);if(typeof f=="string"&&f.replace("#","")){k=h.filter("[href*="+f.replace("#","")+"]");f=Math.max(h.index(k),0)}if(a.rotate){var n=h.length-1;if(f<0)return e.click(n,g);if(f>n)return e.click(0,g)}if(!k.length){if(j>=0)return e;f=a.initialIndex;k=h.eq(f)}if(f===j)return e;
+g=g||c.Event();g.type="onBeforeClick";l.trigger(g,[f]);if(!g.isDefaultPrevented()){o[a.effect].call(e,f,function(){g.type="onClick";l.trigger(g,[f])});j=f;h.removeClass(a.current);k.addClass(a.current);return e}},getConf:function(){return a},getTabs:function(){return h},getPanes:function(){return i},getCurrentPane:function(){return i.eq(j)},getCurrentTab:function(){return h.eq(j)},getIndex:function(){return j},next:function(){return e.click(j+1)},prev:function(){return e.click(j-1)},destroy:function(){h.unbind(a.event).removeClass(a.current);
+i.find("a[href^=#]").unbind("click.T");return e}});c.each("onBeforeClick,onClick".split(","),function(f,g){c.isFunction(a[g])&&c(e).bind(g,a[g]);e[g]=function(k){k&&c(e).bind(g,k);return e}});if(a.history&&c.fn.history){c.tools.history.init(h);a.event="history"}h.each(function(f){c(this).bind(a.event,function(g){e.click(f,g);return g.preventDefault()})});i.find("a[href^=#]").bind("click.T",function(f){e.click(c(this).attr("href"),f)});if(location.hash&&a.tabs==="a"&&d.find(a.tabs+location.hash).length)e.click(location.hash);
+else if(a.initialIndex===0||a.initialIndex>0)e.click(a.initialIndex)}c.tools=c.tools||{version:"1.2.4"};c.tools.tabs={conf:{tabs:"a",current:"current",onBeforeClick:null,onClick:null,effect:"default",initialIndex:0,event:"click",rotate:false,history:false},addEffect:function(d,b){o[d]=b}};var o={"default":function(d,b){this.getPanes().hide().eq(d).show();b.call()},fade:function(d,b){var a=this.getConf(),e=a.fadeOutSpeed,l=this.getPanes();e?l.fadeOut(e):l.hide();l.eq(d).fadeIn(a.fadeInSpeed,b)},slide:function(d,
+b){this.getPanes().slideUp(200);this.getPanes().eq(d).slideDown(400,b)},ajax:function(d,b){this.getPanes().eq(0).load(this.getTabs().eq(d).attr("href"),b)}},m;c.tools.tabs.addEffect("horizontal",function(d,b){m||(m=this.getPanes().eq(0).width());this.getCurrentPane().animate({width:0},function(){c(this).hide()});this.getPanes().eq(d).animate({width:m},function(){c(this).show();b.call()})});c.fn.tabs=function(d,b){var a=this.data("tabs");if(a){a.destroy();this.removeData("tabs")}if(c.isFunction(b))b=
+{onBeforeClick:b};b=c.extend({},c.tools.tabs.conf,b);this.each(function(){a=new p(c(this),d,b);c(this).data("tabs",a)});return b.api?a:this}})(jQuery);
+(function(d){function r(g,a){function p(f){var e=d(f);return e.length<2?e:g.parent().find(f)}var c=this,j=g.add(this),b=g.data("tabs"),h,m,k,n=false,o=p(a.next).click(function(){b.next()}),l=p(a.prev).click(function(){b.prev()});d.extend(c,{getTabs:function(){return b},getConf:function(){return a},play:function(){if(!h){var f=d.Event("onBeforePlay");j.trigger(f);if(f.isDefaultPrevented())return c;n=false;h=setInterval(b.next,a.interval);j.trigger("onPlay");b.next()}},pause:function(){if(!h&&!k)return c;
+var f=d.Event("onBeforePause");j.trigger(f);if(f.isDefaultPrevented())return c;h=clearInterval(h);k=clearInterval(k);j.trigger("onPause")},stop:function(){c.pause();n=true}});d.each("onBeforePlay,onPlay,onBeforePause,onPause".split(","),function(f,e){d.isFunction(a[e])&&c.bind(e,a[e]);c[e]=function(s){return c.bind(e,s)}});if(a.autopause){var t=b.getTabs().add(o).add(l).add(b.getPanes());t.hover(function(){c.pause();m=clearInterval(m)},function(){n||(m=setTimeout(c.play,a.interval))})}if(a.autoplay)k=
+setTimeout(c.play,a.interval);else c.stop();a.clickable&&b.getPanes().click(function(){b.next()});if(!b.getConf().rotate){var i=a.disabledClass;b.getIndex()||l.addClass(i);b.onBeforeClick(function(f,e){if(e){l.removeClass(i);e==b.getTabs().length-1?o.addClass(i):o.removeClass(i)}else l.addClass(i)})}}var q;q=d.tools.tabs.slideshow={conf:{next:".forward",prev:".backward",disabledClass:"disabled",autoplay:false,autopause:true,interval:3E3,clickable:true,api:false}};d.fn.slideshow=function(g){var a=
+this.data("slideshow");if(a)return a;g=d.extend({},q.conf,g);this.each(function(){a=new r(d(this),g);d(this).data("slideshow",a)});return g.api?a:this}})(jQuery);
+(function(f){function p(a,b,c){var h=c.relative?a.position().top:a.offset().top,e=c.relative?a.position().left:a.offset().left,i=c.position[0];h-=b.outerHeight()-c.offset[0];e+=a.outerWidth()+c.offset[1];var j=b.outerHeight()+a.outerHeight();if(i=="center")h+=j/2;if(i=="bottom")h+=j;i=c.position[1];a=b.outerWidth()+a.outerWidth();if(i=="center")e-=a/2;if(i=="left")e-=a;return{top:h,left:e}}function u(a,b){var c=this,h=a.add(c),e,i=0,j=0,m=a.attr("title"),q=a.attr("data-tooltip"),r=n[b.effect],l,s=
+a.is(":input"),v=s&&a.is(":checkbox, :radio, select, :button, :submit"),t=a.attr("type"),k=b.events[t]||b.events[s?v?"widget":"input":"def"];if(!r)throw'Nonexistent effect "'+b.effect+'"';k=k.split(/,\s*/);if(k.length!=2)throw"Tooltip: bad events configuration for "+t;a.bind(k[0],function(d){clearTimeout(i);if(b.predelay)j=setTimeout(function(){c.show(d)},b.predelay);else c.show(d)}).bind(k[1],function(d){clearTimeout(j);if(b.delay)i=setTimeout(function(){c.hide(d)},b.delay);else c.hide(d)});if(m&&
+b.cancelDefault){a.removeAttr("title");a.data("title",m)}f.extend(c,{show:function(d){if(!e){if(q)e=f(q);else if(m)e=f(b.layout).addClass(b.tipClass).appendTo(document.body).hide().append(m);else if(b.tip)e=f(b.tip).eq(0);else{e=a.next();e.length||(e=a.parent().next())}if(!e.length)throw"Cannot find tooltip for "+a;}if(c.isShown())return c;e.stop(true,true);var g=p(a,e,b);d=d||f.Event();d.type="onBeforeShow";h.trigger(d,[g]);if(d.isDefaultPrevented())return c;g=p(a,e,b);e.css({position:"absolute",
+top:g.top,left:g.left});l=true;r[0].call(c,function(){d.type="onShow";l="full";h.trigger(d)});g=b.events.tooltip.split(/,\s*/);e.bind(g[0],function(){clearTimeout(i);clearTimeout(j)});g[1]&&!a.is("input:not(:checkbox, :radio), textarea")&&e.bind(g[1],function(o){o.relatedTarget!=a[0]&&a.trigger(k[1].split(" ")[0])});return c},hide:function(d){if(!e||!c.isShown())return c;d=d||f.Event();d.type="onBeforeHide";h.trigger(d);if(!d.isDefaultPrevented()){l=false;n[b.effect][1].call(c,function(){d.type="onHide";
+h.trigger(d)});return c}},isShown:function(d){return d?l=="full":l},getConf:function(){return b},getTip:function(){return e},getTrigger:function(){return a}});f.each("onHide,onBeforeShow,onShow,onBeforeHide".split(","),function(d,g){f.isFunction(b[g])&&f(c).bind(g,b[g]);c[g]=function(o){f(c).bind(g,o);return c}})}f.tools=f.tools||{version:"1.2.4"};f.tools.tooltip={conf:{effect:"toggle",fadeOutSpeed:"fast",predelay:0,delay:30,opacity:1,tip:0,position:["top","center"],offset:[0,0],relative:false,cancelDefault:true,
+events:{def:"mouseenter,mouseleave",input:"focus,blur",widget:"focus mouseenter,blur mouseleave",tooltip:"mouseenter,mouseleave"},layout:"<div/>",tipClass:"tooltip"},addEffect:function(a,b,c){n[a]=[b,c]}};var n={toggle:[function(a){var b=this.getConf(),c=this.getTip();b=b.opacity;b<1&&c.css({opacity:b});c.show();a.call()},function(a){this.getTip().hide();a.call()}],fade:[function(a){var b=this.getConf();this.getTip().fadeTo(b.fadeInSpeed,b.opacity,a)},function(a){this.getTip().fadeOut(this.getConf().fadeOutSpeed,
+a)}]};f.fn.tooltip=function(a){var b=this.data("tooltip");if(b)return b;a=f.extend(true,{},f.tools.tooltip.conf,a);if(typeof a.position=="string")a.position=a.position.split(/,?\s/);this.each(function(){b=new u(f(this),a);f(this).data("tooltip",b)});return a.api?b:this}})(jQuery);
+(function(d){var i=d.tools.tooltip;d.extend(i.conf,{direction:"up",bounce:false,slideOffset:10,slideInSpeed:200,slideOutSpeed:200,slideFade:!d.browser.msie});var e={up:["-","top"],down:["+","top"],left:["-","left"],right:["+","left"]};i.addEffect("slide",function(g){var a=this.getConf(),f=this.getTip(),b=a.slideFade?{opacity:a.opacity}:{},c=e[a.direction]||e.up;b[c[1]]=c[0]+"="+a.slideOffset;a.slideFade&&f.css({opacity:0});f.show().animate(b,a.slideInSpeed,g)},function(g){var a=this.getConf(),f=a.slideOffset,
+b=a.slideFade?{opacity:0}:{},c=e[a.direction]||e.up,h=""+c[0];if(a.bounce)h=h=="+"?"-":"+";b[c[1]]=h+"="+f;this.getTip().animate(b,a.slideOutSpeed,function(){d(this).hide();g.call()})})})(jQuery);
+(function(g){function j(a){var c=g(window),d=c.width()+c.scrollLeft(),h=c.height()+c.scrollTop();return[a.offset().top<=c.scrollTop(),d<=a.offset().left+a.width(),h<=a.offset().top+a.height(),c.scrollLeft()>=a.offset().left]}function k(a){for(var c=a.length;c--;)if(a[c])return false;return true}var i=g.tools.tooltip;i.dynamic={conf:{classNames:"top right bottom left"}};g.fn.dynamic=function(a){if(typeof a=="number")a={speed:a};a=g.extend({},i.dynamic.conf,a);var c=a.classNames.split(/\s/),d;this.each(function(){var h=
+g(this).tooltip().onBeforeShow(function(e,f){e=this.getTip();var b=this.getConf();d||(d=[b.position[0],b.position[1],b.offset[0],b.offset[1],g.extend({},b)]);g.extend(b,d[4]);b.position=[d[0],d[1]];b.offset=[d[2],d[3]];e.css({visibility:"hidden",position:"absolute",top:f.top,left:f.left}).show();f=j(e);if(!k(f)){if(f[2]){g.extend(b,a.top);b.position[0]="top";e.addClass(c[0])}if(f[3]){g.extend(b,a.right);b.position[1]="right";e.addClass(c[1])}if(f[0]){g.extend(b,a.bottom);b.position[0]="bottom";e.addClass(c[2])}if(f[1]){g.extend(b,
+a.left);b.position[1]="left";e.addClass(c[3])}if(f[0]||f[2])b.offset[0]*=-1;if(f[1]||f[3])b.offset[1]*=-1}e.css({visibility:"visible"}).hide()});h.onBeforeShow(function(){var e=this.getConf();this.getTip();setTimeout(function(){e.position=[d[0],d[1]];e.offset=[d[2],d[3]]},0)});h.onHide(function(){var e=this.getTip();e.removeClass(a.classNames)});ret=h});return a.api?ret:this}})(jQuery);
+(function(e){function n(f,c){var a=e(c);return a.length<2?a:f.parent().find(c)}function t(f,c){var a=this,l=f.add(a),g=f.children(),k=0,m=c.vertical;j||(j=a);if(g.length>1)g=e(c.items,f);e.extend(a,{getConf:function(){return c},getIndex:function(){return k},getSize:function(){return a.getItems().size()},getNaviButtons:function(){return o.add(p)},getRoot:function(){return f},getItemWrap:function(){return g},getItems:function(){return g.children(c.item).not("."+c.clonedClass)},move:function(b,d){return a.seekTo(k+
+b,d)},next:function(b){return a.move(1,b)},prev:function(b){return a.move(-1,b)},begin:function(b){return a.seekTo(0,b)},end:function(b){return a.seekTo(a.getSize()-1,b)},focus:function(){return j=a},addItem:function(b){b=e(b);if(c.circular){g.children("."+c.clonedClass+":last").before(b);g.children("."+c.clonedClass+":first").replaceWith(b.clone().addClass(c.clonedClass))}else g.append(b);l.trigger("onAddItem",[b]);return a},seekTo:function(b,d,h){b.jquery||(b*=1);if(c.circular&&b===0&&k==-1&&d!==
+0)return a;if(!c.circular&&b<0||b>a.getSize()||b<-1)return a;var i=b;if(b.jquery)b=a.getItems().index(b);else i=a.getItems().eq(b);var q=e.Event("onBeforeSeek");if(!h){l.trigger(q,[b,d]);if(q.isDefaultPrevented()||!i.length)return a}i=m?{top:-i.position().top}:{left:-i.position().left};k=b;j=a;if(d===undefined)d=c.speed;g.animate(i,d,c.easing,h||function(){l.trigger("onSeek",[b])});return a}});e.each(["onBeforeSeek","onSeek","onAddItem"],function(b,d){e.isFunction(c[d])&&e(a).bind(d,c[d]);a[d]=function(h){e(a).bind(d,
+h);return a}});if(c.circular){var r=a.getItems().slice(-1).clone().prependTo(g),s=a.getItems().eq(1).clone().appendTo(g);r.add(s).addClass(c.clonedClass);a.onBeforeSeek(function(b,d,h){if(!b.isDefaultPrevented())if(d==-1){a.seekTo(r,h,function(){a.end(0)});return b.preventDefault()}else d==a.getSize()&&a.seekTo(s,h,function(){a.begin(0)})});a.seekTo(0,0,function(){})}var o=n(f,c.prev).click(function(){a.prev()}),p=n(f,c.next).click(function(){a.next()});!c.circular&&a.getSize()>1&&a.onBeforeSeek(function(b,
+d){setTimeout(function(){if(!b.isDefaultPrevented()){o.toggleClass(c.disabledClass,d<=0);p.toggleClass(c.disabledClass,d>=a.getSize()-1)}},1)});c.mousewheel&&e.fn.mousewheel&&f.mousewheel(function(b,d){if(c.mousewheel){a.move(d<0?1:-1,c.wheelSpeed||50);return false}});c.keyboard&&e(document).bind("keydown.scrollable",function(b){if(!(!c.keyboard||b.altKey||b.ctrlKey||e(b.target).is(":input")))if(!(c.keyboard!="static"&&j!=a)){var d=b.keyCode;if(m&&(d==38||d==40)){a.move(d==38?-1:1);return b.preventDefault()}if(!m&&
+(d==37||d==39)){a.move(d==37?-1:1);return b.preventDefault()}}});c.initialIndex&&a.seekTo(c.initialIndex,0,function(){})}e.tools=e.tools||{version:"1.2.4"};e.tools.scrollable={conf:{activeClass:"active",circular:false,clonedClass:"cloned",disabledClass:"disabled",easing:"swing",initialIndex:0,item:null,items:".items",keyboard:true,mousewheel:false,next:".next",prev:".prev",speed:400,vertical:false,wheelSpeed:0}};var j;e.fn.scrollable=function(f){var c=this.data("scrollable");if(c)return c;f=e.extend({},
+e.tools.scrollable.conf,f);this.each(function(){c=new t(e(this),f);e(this).data("scrollable",c)});return f.api?c:this}})(jQuery);
+(function(c){var g=c.tools.scrollable;g.autoscroll={conf:{autoplay:true,interval:3E3,autopause:true}};c.fn.autoscroll=function(d){if(typeof d=="number")d={interval:d};var b=c.extend({},g.autoscroll.conf,d),h;this.each(function(){var a=c(this).data("scrollable");if(a)h=a;var e,i,f=true;a.play=function(){if(!e){f=false;e=setInterval(function(){a.next()},b.interval);a.next()}};a.pause=function(){e=clearInterval(e)};a.stop=function(){a.pause();f=true};b.autopause&&a.getRoot().add(a.getNaviButtons()).hover(function(){a.pause();
+clearInterval(i)},function(){f||(i=setTimeout(a.play,b.interval))});b.autoplay&&setTimeout(a.play,b.interval)});return b.api?h:this}})(jQuery);
+(function(d){function p(b,g){var h=d(g);return h.length<2?h:b.parent().find(g)}var m=d.tools.scrollable;m.navigator={conf:{navi:".navi",naviItem:null,activeClass:"active",indexed:false,idPrefix:null,history:false}};d.fn.navigator=function(b){if(typeof b=="string")b={navi:b};b=d.extend({},m.navigator.conf,b);var g;this.each(function(){function h(a,c,i){e.seekTo(c);if(j){if(location.hash)location.hash=a.attr("href").replace("#","")}else return i.preventDefault()}function f(){return k.find(b.naviItem||
+"> *")}function n(a){var c=d("<"+(b.naviItem||"a")+"/>").click(function(i){h(d(this),a,i)}).attr("href","#"+a);a===0&&c.addClass(l);b.indexed&&c.text(a+1);b.idPrefix&&c.attr("id",b.idPrefix+a);return c.appendTo(k)}function o(a,c){a=f().eq(c.replace("#",""));a.length||(a=f().filter("[href="+c+"]"));a.click()}var e=d(this).data("scrollable"),k=b.navi.jquery?b.navi:p(e.getRoot(),b.navi),q=e.getNaviButtons(),l=b.activeClass,j=b.history&&d.fn.history;if(e)g=e;e.getNaviButtons=function(){return q.add(k)};
+f().length?f().each(function(a){d(this).click(function(c){h(d(this),a,c)})}):d.each(e.getItems(),function(a){n(a)});e.onBeforeSeek(function(a,c){setTimeout(function(){if(!a.isDefaultPrevented()){var i=f().eq(c);!a.isDefaultPrevented()&&i.length&&f().removeClass(l).eq(c).addClass(l)}},1)});e.onAddItem(function(a,c){c=n(e.getItems().index(c));j&&c.history(o)});j&&f().history(o)});return b.api?g:this}})(jQuery);
+(function(a){function t(d,b){var c=this,i=d.add(c),o=a(window),k,f,m,g=a.tools.expose&&(b.mask||b.expose),n=Math.random().toString().slice(10);if(g){if(typeof g=="string")g={color:g};g.closeOnClick=g.closeOnEsc=false}var p=b.target||d.attr("rel");f=p?a(p):d;if(!f.length)throw"Could not find Overlay: "+p;d&&d.index(f)==-1&&d.click(function(e){c.load(e);return e.preventDefault()});a.extend(c,{load:function(e){if(c.isOpened())return c;var h=q[b.effect];if(!h)throw'Overlay: cannot find effect : "'+b.effect+
+'"';b.oneInstance&&a.each(s,function(){this.close(e)});e=e||a.Event();e.type="onBeforeLoad";i.trigger(e);if(e.isDefaultPrevented())return c;m=true;g&&a(f).expose(g);var j=b.top,r=b.left,u=f.outerWidth({margin:true}),v=f.outerHeight({margin:true});if(typeof j=="string")j=j=="center"?Math.max((o.height()-v)/2,0):parseInt(j,10)/100*o.height();if(r=="center")r=Math.max((o.width()-u)/2,0);h[0].call(c,{top:j,left:r},function(){if(m){e.type="onLoad";i.trigger(e)}});g&&b.closeOnClick&&a.mask.getMask().one("click",
+c.close);b.closeOnClick&&a(document).bind("click."+n,function(l){a(l.target).parents(f).length||c.close(l)});b.closeOnEsc&&a(document).bind("keydown."+n,function(l){l.keyCode==27&&c.close(l)});return c},close:function(e){if(!c.isOpened())return c;e=e||a.Event();e.type="onBeforeClose";i.trigger(e);if(!e.isDefaultPrevented()){m=false;q[b.effect][1].call(c,function(){e.type="onClose";i.trigger(e)});a(document).unbind("click."+n).unbind("keydown."+n);g&&a.mask.close();return c}},getOverlay:function(){return f},
+getTrigger:function(){return d},getClosers:function(){return k},isOpened:function(){return m},getConf:function(){return b}});a.each("onBeforeLoad,onStart,onLoad,onBeforeClose,onClose".split(","),function(e,h){a.isFunction(b[h])&&a(c).bind(h,b[h]);c[h]=function(j){a(c).bind(h,j);return c}});k=f.find(b.close||".close");if(!k.length&&!b.close){k=a('<a class="close"></a>');f.prepend(k)}k.click(function(e){c.close(e)});b.load&&c.load()}a.tools=a.tools||{version:"1.2.4"};a.tools.overlay={addEffect:function(d,
+b,c){q[d]=[b,c]},conf:{close:null,closeOnClick:true,closeOnEsc:true,closeSpeed:"fast",effect:"default",fixed:!a.browser.msie||a.browser.version>6,left:"center",load:false,mask:null,oneInstance:true,speed:"normal",target:null,top:"10%"}};var s=[],q={};a.tools.overlay.addEffect("default",function(d,b){var c=this.getConf(),i=a(window);if(!c.fixed){d.top+=i.scrollTop();d.left+=i.scrollLeft()}d.position=c.fixed?"fixed":"absolute";this.getOverlay().css(d).fadeIn(c.speed,b)},function(d){this.getOverlay().fadeOut(this.getConf().closeSpeed,
+d)});a.fn.overlay=function(d){var b=this.data("overlay");if(b)return b;if(a.isFunction(d))d={onBeforeLoad:d};d=a.extend(true,{},a.tools.overlay.conf,d);this.each(function(){b=new t(a(this),d);s.push(b);a(this).data("overlay",b)});return d.api?b:this}})(jQuery);
+(function(i){function j(b){var d=b.offset();return{top:d.top+b.height()/2,left:d.left+b.width()/2}}var k=i.tools.overlay,f=i(window);i.extend(k.conf,{start:{top:null,left:null},fadeInSpeed:"fast",zIndex:9999});function n(b,d){var a=this.getOverlay(),c=this.getConf(),g=this.getTrigger(),o=this,l=a.outerWidth({margin:true}),h=a.data("img");if(!h){var e=a.css("backgroundImage");if(!e)throw"background-image CSS property not set for overlay";e=e.slice(e.indexOf("(")+1,e.indexOf(")")).replace(/\"/g,"");
+a.css("backgroundImage","none");h=i('<img src="'+e+'"/>');h.css({border:0,display:"none"}).width(l);i("body").append(h);a.data("img",h)}e=c.start.top||Math.round(f.height()/2);var m=c.start.left||Math.round(f.width()/2);if(g){g=j(g);e=g.top;m=g.left}h.css({position:"absolute",top:e,left:m,width:0,zIndex:c.zIndex}).show();b.top+=f.scrollTop();b.left+=f.scrollLeft();b.position="absolute";a.css(b);h.animate({top:a.css("top"),left:a.css("left"),width:l},c.speed,function(){if(c.fixed){b.top-=f.scrollTop();
+b.left-=f.scrollLeft();b.position="fixed";h.add(a).css(b)}a.css("zIndex",c.zIndex+1).fadeIn(c.fadeInSpeed,function(){o.isOpened()&&!i(this).index(a)?d.call():a.hide()})})}function p(b){var d=this.getOverlay().hide(),a=this.getConf(),c=this.getTrigger();d=d.data("img");var g={top:a.start.top,left:a.start.left,width:0};c&&i.extend(g,j(c));a.fixed&&d.css({position:"absolute"}).animate({top:"+="+f.scrollTop(),left:"+="+f.scrollLeft()},0);d.animate(g,a.closeSpeed,b)}k.addEffect("apple",n,p)})(jQuery);
+(function(d){function R(b,c){return 32-(new Date(b,c,32)).getDate()}function S(b,c){b=""+b;for(c=c||2;b.length<c;)b="0"+b;return b}function T(b,c,i){var p=b.getDate(),h=b.getDay(),q=b.getMonth();b=b.getFullYear();var f={d:p,dd:S(p),ddd:B[i].shortDays[h],dddd:B[i].days[h],m:q+1,mm:S(q+1),mmm:B[i].shortMonths[q],mmmm:B[i].months[q],yy:String(b).slice(2),yyyy:b};c=c.replace(X,function(r){return r in f?f[r]:r.slice(1,r.length-1)});return Y.html(c).html()}function y(b){return parseInt(b,10)}function U(b,
+c){return b.getFullYear()===c.getFullYear()&&b.getMonth()==c.getMonth()&&b.getDate()==c.getDate()}function C(b){if(b){if(b.constructor==Date)return b;if(typeof b=="string"){var c=b.split("-");if(c.length==3)return new Date(y(c[0]),y(c[1])-1,y(c[2]));if(!/^-?\d+$/.test(b))return;b=y(b)}c=new Date;c.setDate(c.getDate()+b);return c}}function Z(b,c){function i(a,e,g){m=a;D=a.getFullYear();E=a.getMonth();G=a.getDate();g=g||d.Event("api");g.type="change";H.trigger(g,[a]);if(!g.isDefaultPrevented()){b.val(T(a,
+e.format,e.lang));b.data("date",a);h.hide(g)}}function p(a){a.type="onShow";H.trigger(a);d(document).bind("keydown.d",function(e){if(e.ctrlKey)return true;var g=e.keyCode;if(g==8){b.val("");return h.hide(e)}if(g==27)return h.hide(e);if(d(V).index(g)>=0){if(!v){h.show(e);return e.preventDefault()}var j=d("#"+f.weeks+" a"),s=d("."+f.focus),n=j.index(s);s.removeClass(f.focus);if(g==74||g==40)n+=7;else if(g==75||g==38)n-=7;else if(g==76||g==39)n+=1;else if(g==72||g==37)n-=1;if(n>41){h.addMonth();s=d("#"+
+f.weeks+" a:eq("+(n-42)+")")}else if(n<0){h.addMonth(-1);s=d("#"+f.weeks+" a:eq("+(n+42)+")")}else s=j.eq(n);s.addClass(f.focus);return e.preventDefault()}if(g==34)return h.addMonth();if(g==33)return h.addMonth(-1);if(g==36)return h.today();if(g==13)d(e.target).is("select")||d("."+f.focus).click();return d([16,17,18,9]).index(g)>=0});d(document).bind("click.d",function(e){var g=e.target;if(!d(g).parents("#"+f.root).length&&g!=b[0]&&(!L||g!=L[0]))h.hide(e)})}var h=this,q=new Date,f=c.css,r=B[c.lang],
+k=d("#"+f.root),M=k.find("#"+f.title),L,I,J,D,E,G,m=b.attr("data-value")||c.value||b.val(),o=b.attr("min")||c.min,t=b.attr("max")||c.max,v;if(o===0)o="0";m=C(m)||q;o=C(o||c.yearRange[0]*365);t=C(t||c.yearRange[1]*365);if(!r)throw"Dateinput: invalid language: "+c.lang;if(b.attr("type")=="date"){var N=d("<input/>");d.each("class,disabled,id,maxlength,name,readonly,required,size,style,tabindex,title,value".split(","),function(a,e){N.attr(e,b.attr(e))});b.replaceWith(N);b=N}b.addClass(f.input);var H=
+b.add(h);if(!k.length){k=d("<div><div><a/><div/><a/></div><div><div/><div/></div></div>").hide().css({position:"absolute"}).attr("id",f.root);k.children().eq(0).attr("id",f.head).end().eq(1).attr("id",f.body).children().eq(0).attr("id",f.days).end().eq(1).attr("id",f.weeks).end().end().end().find("a").eq(0).attr("id",f.prev).end().eq(1).attr("id",f.next);M=k.find("#"+f.head).find("div").attr("id",f.title);if(c.selectors){var z=d("<select/>").attr("id",f.month),A=d("<select/>").attr("id",f.year);M.append(z.add(A))}for(var $=
+k.find("#"+f.days),O=0;O<7;O++)$.append(d("<span/>").text(r.shortDays[(O+c.firstDay)%7]));d("body").append(k)}if(c.trigger)L=d("<a/>").attr("href","#").addClass(f.trigger).click(function(a){h.show();return a.preventDefault()}).insertAfter(b);var K=k.find("#"+f.weeks);A=k.find("#"+f.year);z=k.find("#"+f.month);d.extend(h,{show:function(a){if(!(b.is("[readonly]")||v)){a=a||d.Event();a.type="onBeforeShow";H.trigger(a);if(!a.isDefaultPrevented()){d.each(W,function(){this.hide()});v=true;z.unbind("change").change(function(){h.setValue(A.val(),
+d(this).val())});A.unbind("change").change(function(){h.setValue(d(this).val(),z.val())});I=k.find("#"+f.prev).unbind("click").click(function(){I.hasClass(f.disabled)||h.addMonth(-1);return false});J=k.find("#"+f.next).unbind("click").click(function(){J.hasClass(f.disabled)||h.addMonth();return false});h.setValue(m);var e=b.position();k.css({top:e.top+b.outerHeight({margins:true})+c.offset[0],left:e.left+c.offset[1]});if(c.speed)k.show(c.speed,function(){p(a)});else{k.show();p(a)}return h}}},setValue:function(a,
+e,g){var j;if(parseInt(e,10)>=-1){a=y(a);e=y(e);g=y(g);j=new Date(a,e,g)}else{j=a||m;a=j.getFullYear();e=j.getMonth();g=j.getDate()}if(e==-1){e=11;a--}else if(e==12){e=0;a++}if(!v){i(j,c);return h}E=e;D=a;g=new Date(a,e,1-c.firstDay);g=g.getDay();var s=R(a,e),n=R(a,e-1),P;if(c.selectors){z.empty();d.each(r.months,function(w,F){o<new Date(a,w+1,-1)&&t>new Date(a,w,0)&&z.append(d("<option/>").html(F).attr("value",w))});A.empty();j=q.getFullYear();for(var l=j+c.yearRange[0];l<j+c.yearRange[1];l++)o<
+new Date(l+1,-1,0)&&t>new Date(l,0,0)&&A.append(d("<option/>").text(l));z.val(e);A.val(a)}else M.html(r.months[e]+" "+a);K.empty();I.add(J).removeClass(f.disabled);l=!g?-7:0;for(var u,x;l<(!g?35:42);l++){u=d("<a/>");if(l%7===0){P=d("<div/>").addClass(f.week);K.append(P)}if(l<g){u.addClass(f.off);x=n-g+l+1;j=new Date(a,e-1,x)}else if(l>=g+s){u.addClass(f.off);x=l-s-g+1;j=new Date(a,e+1,x)}else{x=l-g+1;j=new Date(a,e,x);if(U(m,j))u.attr("id",f.current).addClass(f.focus);else U(q,j)&&u.attr("id",f.today)}o&&
+j<o&&u.add(I).addClass(f.disabled);t&&j>t&&u.add(J).addClass(f.disabled);u.attr("href","#"+x).text(x).data("date",j);P.append(u)}K.find("a").click(function(w){var F=d(this);if(!F.hasClass(f.disabled)){d("#"+f.current).removeAttr("id");F.attr("id",f.current);i(F.data("date"),c,w)}return false});f.sunday&&K.find(f.week).each(function(){var w=c.firstDay?7-c.firstDay:0;d(this).children().slice(w,w+1).addClass(f.sunday)});return h},setMin:function(a,e){o=C(a);e&&m<o&&h.setValue(o);return h},setMax:function(a,
+e){t=C(a);e&&m>t&&h.setValue(t);return h},today:function(){return h.setValue(q)},addDay:function(a){return this.setValue(D,E,G+(a||1))},addMonth:function(a){return this.setValue(D,E+(a||1),G)},addYear:function(a){return this.setValue(D+(a||1),E,G)},hide:function(a){if(v){a=d.Event();a.type="onHide";H.trigger(a);d(document).unbind("click.d").unbind("keydown.d");if(a.isDefaultPrevented())return;k.hide();v=false}return h},getConf:function(){return c},getInput:function(){return b},getCalendar:function(){return k},
+getValue:function(a){return a?T(m,a,c.lang):m},isOpen:function(){return v}});d.each(["onBeforeShow","onShow","change","onHide"],function(a,e){d.isFunction(c[e])&&d(h).bind(e,c[e]);h[e]=function(g){d(h).bind(e,g);return h}});b.bind("focus click",h.show).keydown(function(a){var e=a.keyCode;if(!v&&d(V).index(e)>=0){h.show(a);return a.preventDefault()}return a.shiftKey||a.ctrlKey||a.altKey||e==9?true:a.preventDefault()});C(b.val())&&i(m,c)}d.tools=d.tools||{version:"1.2.4"};var W=[],Q,V=[75,76,38,39,
+74,72,40,37],B={};Q=d.tools.dateinput={conf:{format:"mm/dd/yy",selectors:false,yearRange:[-5,5],lang:"en",offset:[0,0],speed:0,firstDay:0,min:undefined,max:undefined,trigger:false,css:{prefix:"cal",input:"date",root:0,head:0,title:0,prev:0,next:0,month:0,year:0,days:0,body:0,weeks:0,today:0,current:0,week:0,off:0,sunday:0,focus:0,disabled:0,trigger:0}},localize:function(b,c){d.each(c,function(i,p){c[i]=p.split(",")});B[b]=c}};Q.localize("en",{months:"January,February,March,April,May,June,July,August,September,October,November,December",
+shortMonths:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec",days:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday",shortDays:"Sun,Mon,Tue,Wed,Thu,Fri,Sat"});var X=/d{1,4}|m{1,4}|yy(?:yy)?|"[^"]*"|'[^']*'/g,Y=d("<a/>");d.expr[":"].date=function(b){var c=b.getAttribute("type");return c&&c=="date"||!!d(b).data("dateinput")};d.fn.dateinput=function(b){if(this.data("dateinput"))return this;b=d.extend(true,{},Q.conf,b);d.each(b.css,function(i,p){if(!p&&i!="prefix")b.css[i]=(b.css.prefix||"")+
+(p||i)});var c;this.each(function(){var i=new Z(d(this),b);W.push(i);i=i.getInput().data("dateinput",i);c=c?c.add(i):i});return c?c:this}})(jQuery);
+(function(e){function F(d,a){a=Math.pow(10,a);return Math.round(d*a)/a}function p(d,a){if(a=parseInt(d.css(a),10))return a;return(d=d[0].currentStyle)&&d.width&&parseInt(d.width,10)}function C(d){return(d=d.data("events"))&&d.onSlide}function G(d,a){function h(c,b,f,j){if(f===undefined)f=b/k*z;else if(j)f-=a.min;if(r)f=Math.round(f/r)*r;if(b===undefined||r)b=f*k/z;if(isNaN(f))return g;b=Math.max(0,Math.min(b,k));f=b/k*z;if(j||!n)f+=a.min;if(n)if(j)b=k-b;else f=a.max-f;f=F(f,t);var q=c.type=="click";
+if(D&&l!==undefined&&!q){c.type="onSlide";A.trigger(c,[f,b]);if(c.isDefaultPrevented())return g}j=q?a.speed:0;q=q?function(){c.type="change";A.trigger(c,[f])}:null;if(n){m.animate({top:b},j,q);a.progress&&B.animate({height:k-b+m.width()/2},j)}else{m.animate({left:b},j,q);a.progress&&B.animate({width:b+m.width()/2},j)}l=f;H=b;d.val(f);return g}function s(){if(n=a.vertical||p(i,"height")>p(i,"width")){k=p(i,"height")-p(m,"height");u=i.offset().top+k}else{k=p(i,"width")-p(m,"width");u=i.offset().left}}
+function v(){s();g.setValue(a.value||a.min)}var g=this,o=a.css,i=e("<div><div/><a href='#'/></div>").data("rangeinput",g),n,l,u,k,H;d.before(i);var m=i.addClass(o.slider).find("a").addClass(o.handle),B=i.find("div").addClass(o.progress);e.each("min,max,step,value".split(","),function(c,b){c=d.attr(b);if(parseFloat(c))a[b]=parseFloat(c,10)});var z=a.max-a.min,r=a.step=="any"?0:a.step,t=a.precision;if(t===undefined)try{t=r.toString().split(".")[1].length}catch(I){t=0}if(d.attr("type")=="range"){var w=
+e("<input/>");e.each("class,disabled,id,maxlength,name,readonly,required,size,style,tabindex,title,value".split(","),function(c,b){w.attr(b,d.attr(b))});w.val(a.value);d.replaceWith(w);d=w}d.addClass(o.input);var A=e(g).add(d),D=true;e.extend(g,{getValue:function(){return l},setValue:function(c,b){return h(b||e.Event("api"),undefined,c,true)},getConf:function(){return a},getProgress:function(){return B},getHandle:function(){return m},getInput:function(){return d},step:function(c,b){b=b||e.Event();
+var f=a.step=="any"?1:a.step;g.setValue(l+f*(c||1),b)},stepUp:function(c){return g.step(c||1)},stepDown:function(c){return g.step(-c||-1)}});e.each("onSlide,change".split(","),function(c,b){e.isFunction(a[b])&&e(g).bind(b,a[b]);g[b]=function(f){e(g).bind(b,f);return g}});m.drag({drag:false}).bind("dragStart",function(){D=C(e(g))||C(d)}).bind("drag",function(c,b,f){if(d.is(":disabled"))return false;h(c,n?b:f)}).bind("dragEnd",function(c){if(!c.isDefaultPrevented()){c.type="change";A.trigger(c,[l])}}).click(function(c){return c.preventDefault()});
+i.click(function(c){if(d.is(":disabled")||c.target==m[0])return c.preventDefault();s();var b=m.width()/2;h(c,n?k-u-b+c.pageY:c.pageX-u-b)});a.keyboard&&d.keydown(function(c){if(!d.attr("readonly")){var b=c.keyCode,f=e([75,76,38,33,39]).index(b)!=-1,j=e([74,72,40,34,37]).index(b)!=-1;if((f||j)&&!(c.shiftKey||c.altKey||c.ctrlKey)){if(f)g.step(b==33?10:1,c);else if(j)g.step(b==34?-10:-1,c);return c.preventDefault()}}});d.blur(function(c){var b=e(this).val();b!==l&&g.setValue(b,c)});e.extend(d[0],{stepUp:g.stepUp,
+stepDown:g.stepDown});v();k||e(window).load(v)}e.tools=e.tools||{version:"1.2.4"};var E;E=e.tools.rangeinput={conf:{min:0,max:100,step:"any",steps:0,value:0,precision:undefined,vertical:0,keyboard:true,progress:false,speed:100,css:{input:"range",slider:"slider",progress:"progress",handle:"handle"}}};var x,y;e.fn.drag=function(d){document.ondragstart=function(){return false};d=e.extend({x:true,y:true,drag:true},d);x=x||e(document).bind("mousedown mouseup",function(a){var h=e(a.target);if(a.type=="mousedown"&&
+h.data("drag")){var s=h.position(),v=a.pageX-s.left,g=a.pageY-s.top,o=true;x.bind("mousemove.drag",function(i){var n=i.pageX-v;i=i.pageY-g;var l={};if(d.x)l.left=n;if(d.y)l.top=i;if(o){h.trigger("dragStart");o=false}d.drag&&h.css(l);h.trigger("drag",[i,n]);y=h});a.preventDefault()}else try{y&&y.trigger("dragEnd")}finally{x.unbind("mousemove.drag");y=null}});return this.data("drag",true)};e.expr[":"].range=function(d){var a=d.getAttribute("type");return a&&a=="range"||!!e(d).filter("input").data("rangeinput")};
+e.fn.rangeinput=function(d){if(this.data("rangeinput"))return this;d=e.extend(true,{},E.conf,d);var a;this.each(function(){var h=new G(e(this),e.extend(true,{},d));h=h.getInput().data("rangeinput",h);a=a?a.add(h):h});return a?a:this}})(jQuery);
+(function(e){function t(a,b,c){var k=a.offset().top,f=a.offset().left,l=c.position.split(/,?\s+/),p=l[0];l=l[1];k-=b.outerHeight()-c.offset[0];f+=a.outerWidth()+c.offset[1];c=b.outerHeight()+a.outerHeight();if(p=="center")k+=c/2;if(p=="bottom")k+=c;a=a.outerWidth();if(l=="center")f-=(a+b.outerWidth())/2;if(l=="left")f-=a;return{top:k,left:f}}function x(a){function b(){return this.getAttribute("type")==a}b.key="[type="+a+"]";return b}function u(a,b,c){function k(g,d,j){if(!(!c.grouped&&g.length)){var h;
+if(j===false||e.isArray(j)){h=i.messages[d.key||d]||i.messages["*"];h=h[c.lang]||i.messages["*"].en;(d=h.match(/\$\d/g))&&e.isArray(j)&&e.each(d,function(n){h=h.replace(this,j[n])})}else h=j[c.lang]||j;g.push(h)}}var f=this,l=b.add(f);a=a.not(":button, :image, :reset, :submit");e.extend(f,{getConf:function(){return c},getForm:function(){return b},getInputs:function(){return a},reflow:function(){a.each(function(){var g=e(this),d=g.data("msg.el");if(d){g=t(g,d,c);d.css({top:g.top,left:g.left})}});return f},
+invalidate:function(g,d){if(!d){var j=[];e.each(g,function(h,n){h=a.filter("[name='"+h+"']");if(h.length){h.trigger("OI",[n]);j.push({input:h,messages:[n]})}});g=j;d=e.Event()}d.type="onFail";l.trigger(d,[g]);d.isDefaultPrevented()||r[c.effect][0].call(f,g,d);return f},reset:function(g){g=g||a;g.removeClass(c.errorClass).each(function(){var d=e(this).data("msg.el");if(d){d.remove();e(this).data("msg.el",null)}}).unbind(c.errorInputEvent||"");return f},destroy:function(){b.unbind(c.formEvent).unbind("reset.V");
+a.unbind(c.inputEvent||"").unbind("change.V");return f.reset()},checkValidity:function(g,d){g=g||a;g=g.not(":disabled");if(!g.length)return true;d=d||e.Event();d.type="onBeforeValidate";l.trigger(d,[g]);if(d.isDefaultPrevented())return d.result;var j=[],h=c.errorInputEvent+".v";g.not(":radio:not(:checked)").each(function(){var q=[],m=e(this).unbind(h).data("messages",q);e.each(v,function(){var o=this,s=o[0];if(m.filter(s).length){o=o[1].call(f,m,m.val());if(o!==true){d.type="onBeforeFail";l.trigger(d,
+[m,s]);if(d.isDefaultPrevented())return false;var w=m.attr(c.messageAttr);if(w){q=[w];return false}else k(q,s,o)}}});if(q.length){j.push({input:m,messages:q});m.trigger("OI",[q]);c.errorInputEvent&&m.bind(h,function(o){f.checkValidity(m,o)})}if(c.singleError&&j.length)return false});var n=r[c.effect];if(!n)throw'Validator: cannot find effect "'+c.effect+'"';if(j.length){f.invalidate(j,d);return false}else{n[1].call(f,g,d);d.type="onSuccess";l.trigger(d,[g]);g.unbind(h)}return true}});e.each("onBeforeValidate,onBeforeFail,onFail,onSuccess".split(","),
+function(g,d){e.isFunction(c[d])&&e(f).bind(d,c[d]);f[d]=function(j){e(f).bind(d,j);return f}});c.formEvent&&b.bind(c.formEvent,function(g){if(!f.checkValidity(null,g))return g.preventDefault()});b.bind("reset.V",function(){f.reset()});a[0]&&a[0].validity&&a.each(function(){this.oninvalid=function(){return false}});if(b[0])b[0].checkValidity=f.checkValidity;c.inputEvent&&a.bind(c.inputEvent,function(g){f.checkValidity(e(this),g)});a.filter(":checkbox, select").filter("[required]").bind("change.V",
+function(g){var d=e(this);if(this.checked||d.is("select")&&e(this).val())r[c.effect][1].call(f,d,g)});var p=a.filter(":radio").change(function(g){f.checkValidity(p,g)});e(window).resize(function(){f.reflow()})}e.tools=e.tools||{version:"1.2.4"};var y=/\[type=([a-z]+)\]/,z=/^-?[0-9]*(\.[0-9]+)?$/,A=/^([a-z0-9_\.\-\+]+)@([\da-z\.\-]+)\.([a-z\.]{2,6})$/i,B=/^(https?:\/\/)?[\da-z\.\-]+\.[a-z\.]{2,6}[#\?\/\w \.\-=]*$/i,i;i=e.tools.validator={conf:{grouped:false,effect:"default",errorClass:"invalid",inputEvent:null,
+errorInputEvent:"keyup",formEvent:"submit",lang:"en",message:"<div/>",messageAttr:"data-message",messageClass:"error",offset:[0,0],position:"center right",singleError:false,speed:"normal"},messages:{"*":{en:"Please correct this value"}},localize:function(a,b){e.each(b,function(c,k){i.messages[c]=i.messages[c]||{};i.messages[c][a]=k})},localizeFn:function(a,b){i.messages[a]=i.messages[a]||{};e.extend(i.messages[a],b)},fn:function(a,b,c){if(e.isFunction(b))c=b;else{if(typeof b=="string")b={en:b};this.messages[a.key||
+a]=b}if(b=y.exec(a))a=x(b[1]);v.push([a,c])},addEffect:function(a,b,c){r[a]=[b,c]}};var v=[],r={"default":[function(a){var b=this.getConf();e.each(a,function(c,k){c=k.input;c.addClass(b.errorClass);var f=c.data("msg.el");if(!f){f=e(b.message).addClass(b.messageClass).appendTo(document.body);c.data("msg.el",f)}f.css({visibility:"hidden",display:"none"}).find("span").remove();e.each(k.messages,function(l,p){e("<span/>").html(p).appendTo(f)});f.outerWidth()==f.parent().width()&&f.add(f.find("p")).css({display:"inline"});
+k=t(c,f,b);f.css({visibility:"visible",position:"absolute",top:k.top,left:k.left}).fadeIn(b.speed)})},function(a){var b=this.getConf();a.removeClass(b.errorClass).each(function(){var c=e(this).data("msg.el");c&&c.css({visibility:"hidden"})})}]};e.each("email,url,number".split(","),function(a,b){e.expr[":"][b]=function(c){return c.getAttribute("type")===b}});e.fn.oninvalid=function(a){return this[a?"bind":"trigger"]("OI",a)};i.fn(":email","Please enter a valid email address",function(a,b){return!b||
+A.test(b)});i.fn(":url","Please enter a valid URL",function(a,b){return!b||B.test(b)});i.fn(":number","Please enter a numeric value.",function(a,b){return z.test(b)});i.fn("[max]","Please enter a value smaller than $1",function(a,b){if(b===""||e.tools.dateinput&&a.is(":date"))return true;a=a.attr("max");return parseFloat(b)<=parseFloat(a)?true:[a]});i.fn("[min]","Please enter a value larger than $1",function(a,b){if(b===""||e.tools.dateinput&&a.is(":date"))return true;a=a.attr("min");return parseFloat(b)>=
+parseFloat(a)?true:[a]});i.fn("[required]","Please complete this mandatory field.",function(a,b){if(a.is(":checkbox"))return a.is(":checked");return!!b});i.fn("[pattern]",function(a){var b=new RegExp("^"+a.attr("pattern")+"$");return b.test(a.val())});e.fn.validator=function(a){var b=this.data("validator");if(b){b.destroy();this.removeData("validator")}a=e.extend(true,{},i.conf,a);if(this.is("form"))return this.each(function(){var c=e(this);b=new u(c.find(":input"),c,a);c.data("validator",b)});else{b=
+new u(this,this.eq(0).closest("form"),a);return this.data("validator",b)}}})(jQuery);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/static/hdabo/js/jquery.validate.js	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,1131 @@
+/*
+ * jQuery validation plug-in 1.5.5
+ *
+ * http://bassistance.de/jquery-plugins/jquery-plugin-validation/
+ * http://docs.jquery.com/Plugins/Validation
+ *
+ * Copyright (c) 2006 - 2008 Jörn Zaefferer
+ *
+ * $Id: jquery.validate.js 6403 2009-06-17 14:27:16Z joern.zaefferer $
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ *   http://www.opensource.org/licenses/mit-license.php
+ *   http://www.gnu.org/licenses/gpl.html
+ */
+
+(function($) {
+
+$.extend($.fn, {
+	// http://docs.jquery.com/Plugins/Validation/validate
+	validate: function( options ) {
+
+		// if nothing is selected, return nothing; can't chain anyway
+		if (!this.length) {
+			options && options.debug && window.console && console.warn( "nothing selected, can't validate, returning nothing" );
+			return;
+		}
+
+		// check if a validator for this form was already created
+		var validator = $.data(this[0], 'validator');
+		if ( validator ) {
+			return validator;
+		}
+		
+		validator = new $.validator( options, this[0] );
+		$.data(this[0], 'validator', validator); 
+		
+		if ( validator.settings.onsubmit ) {
+		
+			// allow suppresing validation by adding a cancel class to the submit button
+			this.find("input, button").filter(".cancel").click(function() {
+				validator.cancelSubmit = true;
+			});
+			
+			// when a submitHandler is used, capture the submitting button
+			if (validator.settings.submitHandler) {
+				this.find("input, button").filter(":submit").click(function() {
+					validator.submitButton = this;
+				});
+			}
+		
+			// validate the form on submit
+			this.submit( function( event ) {
+				if ( validator.settings.debug )
+					// prevent form submit to be able to see console output
+					event.preventDefault();
+					
+				function handle() {
+					if ( validator.settings.submitHandler ) {
+						if (validator.submitButton) {
+							// insert a hidden input as a replacement for the missing submit button
+							var hidden = $("<input type='hidden'/>").attr("name", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm);
+						}
+						validator.settings.submitHandler.call( validator, validator.currentForm );
+						if (validator.submitButton) {
+							// and clean up afterwards; thanks to no-block-scope, hidden can be referenced
+							hidden.remove();
+						}
+						return false;
+					}
+					return true;
+				}
+					
+				// prevent submit for invalid forms or custom submit handlers
+				if ( validator.cancelSubmit ) {
+					validator.cancelSubmit = false;
+					return handle();
+				}
+				if ( validator.form() ) {
+					if ( validator.pendingRequest ) {
+						validator.formSubmitted = true;
+						return false;
+					}
+					return handle();
+				} else {
+					validator.focusInvalid();
+					return false;
+				}
+			});
+		}
+		
+		return validator;
+	},
+	// http://docs.jquery.com/Plugins/Validation/valid
+	valid: function() {
+        if ( $(this[0]).is('form')) {
+            return this.validate().form();
+        } else {
+            var valid = true;
+            var validator = $(this[0].form).validate();
+            this.each(function() {
+				valid &= validator.element(this);
+            });
+            return valid;
+        }
+    },
+	// attributes: space seperated list of attributes to retrieve and remove
+	removeAttrs: function(attributes) {
+		var result = {},
+			$element = this;
+		$.each(attributes.split(/\s/), function(index, value) {
+			result[value] = $element.attr(value);
+			$element.removeAttr(value);
+		});
+		return result;
+	},
+	// http://docs.jquery.com/Plugins/Validation/rules
+	rules: function(command, argument) {
+		var element = this[0];
+		
+		if (command) {
+			var settings = $.data(element.form, 'validator').settings;
+			var staticRules = settings.rules;
+			var existingRules = $.validator.staticRules(element);
+			switch(command) {
+			case "add":
+				$.extend(existingRules, $.validator.normalizeRule(argument));
+				staticRules[element.name] = existingRules;
+				if (argument.messages)
+					settings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages );
+				break;
+			case "remove":
+				if (!argument) {
+					delete staticRules[element.name];
+					return existingRules;
+				}
+				var filtered = {};
+				$.each(argument.split(/\s/), function(index, method) {
+					filtered[method] = existingRules[method];
+					delete existingRules[method];
+				});
+				return filtered;
+			}
+		}
+		
+		var data = $.validator.normalizeRules(
+		$.extend(
+			{},
+			$.validator.metadataRules(element),
+			$.validator.classRules(element),
+			$.validator.attributeRules(element),
+			$.validator.staticRules(element)
+		), element);
+		
+		// make sure required is at front
+		if (data.required) {
+			var param = data.required;
+			delete data.required;
+			data = $.extend({required: param}, data);
+		}
+		
+		return data;
+	}
+});
+
+// Custom selectors
+$.extend($.expr[":"], {
+	// http://docs.jquery.com/Plugins/Validation/blank
+	blank: function(a) {return !$.trim(a.value);},
+	// http://docs.jquery.com/Plugins/Validation/filled
+	filled: function(a) {return !!$.trim(a.value);},
+	// http://docs.jquery.com/Plugins/Validation/unchecked
+	unchecked: function(a) {return !a.checked;}
+});
+
+// constructor for validator
+$.validator = function( options, form ) {
+	this.settings = $.extend( {}, $.validator.defaults, options );
+	this.currentForm = form;
+	this.init();
+};
+
+$.validator.format = function(source, params) {
+	if ( arguments.length == 1 ) 
+		return function() {
+			var args = $.makeArray(arguments);
+			args.unshift(source);
+			return $.validator.format.apply( this, args );
+		};
+	if ( arguments.length > 2 && params.constructor != Array  ) {
+		params = $.makeArray(arguments).slice(1);
+	}
+	if ( params.constructor != Array ) {
+		params = [ params ];
+	}
+	$.each(params, function(i, n) {
+		source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n);
+	});
+	return source;
+};
+
+$.extend($.validator, {
+	
+	defaults: {
+		messages: {},
+		groups: {},
+		rules: {},
+		errorClass: "error",
+		validClass: "valid",
+		errorElement: "label",
+		focusInvalid: true,
+		errorContainer: $( [] ),
+		errorLabelContainer: $( [] ),
+		onsubmit: true,
+		ignore: [],
+		ignoreTitle: false,
+		onfocusin: function(element) {
+			this.lastActive = element;
+				
+			// hide error label and remove error class on focus if enabled
+			if ( this.settings.focusCleanup && !this.blockFocusCleanup ) {
+				this.settings.unhighlight && this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );
+				this.errorsFor(element).hide();
+			}
+		},
+		onfocusout: function(element) {
+			if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {
+				this.element(element);
+			}
+		},
+		onkeyup: function(element) {
+			if ( element.name in this.submitted || element == this.lastElement ) {
+				this.element(element);
+			}
+		},
+		onclick: function(element) {
+			if ( element.name in this.submitted )
+				this.element(element);
+		},
+		highlight: function( element, errorClass, validClass ) {
+			$(element).addClass(errorClass).removeClass(validClass);
+		},
+		unhighlight: function( element, errorClass, validClass ) {
+			$(element).removeClass(errorClass).addClass(validClass);
+		}
+	},
+
+	// http://docs.jquery.com/Plugins/Validation/Validator/setDefaults
+	setDefaults: function(settings) {
+		$.extend( $.validator.defaults, settings );
+	},
+
+	messages: {
+		required: "This field is required.",
+		remote: "Please fix this field.",
+		email: "Please enter a valid email address.",
+		url: "Please enter a valid URL.",
+		date: "Please enter a valid date.",
+		dateISO: "Please enter a valid date (ISO).",
+		dateDE: "Bitte geben Sie ein gültiges Datum ein.",
+		number: "Please enter a valid number.",
+		numberDE: "Bitte geben Sie eine Nummer ein.",
+		digits: "Please enter only digits",
+		creditcard: "Please enter a valid credit card number.",
+		equalTo: "Please enter the same value again.",
+		accept: "Please enter a value with a valid extension.",
+		maxlength: $.validator.format("Please enter no more than {0} characters."),
+		minlength: $.validator.format("Please enter at least {0} characters."),
+		rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."),
+		range: $.validator.format("Please enter a value between {0} and {1}."),
+		max: $.validator.format("Please enter a value less than or equal to {0}."),
+		min: $.validator.format("Please enter a value greater than or equal to {0}.")
+	},
+	
+	autoCreateRanges: false,
+	
+	prototype: {
+		
+		init: function() {
+			this.labelContainer = $(this.settings.errorLabelContainer);
+			this.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm);
+			this.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer );
+			this.submitted = {};
+			this.valueCache = {};
+			this.pendingRequest = 0;
+			this.pending = {};
+			this.invalid = {};
+			this.reset();
+			
+			var groups = (this.groups = {});
+			$.each(this.settings.groups, function(key, value) {
+				$.each(value.split(/\s/), function(index, name) {
+					groups[name] = key;
+				});
+			});
+			var rules = this.settings.rules;
+			$.each(rules, function(key, value) {
+				rules[key] = $.validator.normalizeRule(value);
+			});
+			
+			function delegate(event) {
+				var validator = $.data(this[0].form, "validator");
+				validator.settings["on" + event.type] && validator.settings["on" + event.type].call(validator, this[0] );
+			}
+			$(this.currentForm)
+				.delegate("focusin focusout keyup", ":text, :password, :file, select, textarea", delegate)
+				.delegate("click", ":radio, :checkbox", delegate);
+
+			if (this.settings.invalidHandler)
+				$(this.currentForm).bind("invalid-form.validate", this.settings.invalidHandler);
+		},
+
+		// http://docs.jquery.com/Plugins/Validation/Validator/form
+		form: function() {
+			this.checkForm();
+			$.extend(this.submitted, this.errorMap);
+			this.invalid = $.extend({}, this.errorMap);
+			if (!this.valid())
+				$(this.currentForm).triggerHandler("invalid-form", [this]);
+			this.showErrors();
+			return this.valid();
+		},
+		
+		checkForm: function() {
+			this.prepareForm();
+			for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {
+				this.check( elements[i] );
+			}
+			return this.valid(); 
+		},
+		
+		// http://docs.jquery.com/Plugins/Validation/Validator/element
+		element: function( element ) {
+			element = this.clean( element );
+			this.lastElement = element;
+			this.prepareElement( element );
+			this.currentElements = $(element);
+			var result = this.check( element );
+			if ( result ) {
+				delete this.invalid[element.name];
+			} else {
+				this.invalid[element.name] = true;
+			}
+			if ( !this.numberOfInvalids() ) {
+				// Hide error containers on last error
+				this.toHide = this.toHide.add( this.containers );
+			}
+			this.showErrors();
+			return result;
+		},
+
+		// http://docs.jquery.com/Plugins/Validation/Validator/showErrors
+		showErrors: function(errors) {
+			if(errors) {
+				// add items to error list and map
+				$.extend( this.errorMap, errors );
+				this.errorList = [];
+				for ( var name in errors ) {
+					this.errorList.push({
+						message: errors[name],
+						element: this.findByName(name)[0]
+					});
+				}
+				// remove items from success list
+				this.successList = $.grep( this.successList, function(element) {
+					return !(element.name in errors);
+				});
+			}
+			this.settings.showErrors
+				? this.settings.showErrors.call( this, this.errorMap, this.errorList )
+				: this.defaultShowErrors();
+		},
+		
+		// http://docs.jquery.com/Plugins/Validation/Validator/resetForm
+		resetForm: function() {
+			if ( $.fn.resetForm )
+				$( this.currentForm ).resetForm();
+			this.submitted = {};
+			this.prepareForm();
+			this.hideErrors();
+			this.elements().removeClass( this.settings.errorClass );
+		},
+		
+		numberOfInvalids: function() {
+			return this.objectLength(this.invalid);
+		},
+		
+		objectLength: function( obj ) {
+			var count = 0;
+			for ( var i in obj )
+				count++;
+			return count;
+		},
+		
+		hideErrors: function() {
+			this.addWrapper( this.toHide ).hide();
+		},
+		
+		valid: function() {
+			return this.size() == 0;
+		},
+		
+		size: function() {
+			return this.errorList.length;
+		},
+		
+		focusInvalid: function() {
+			if( this.settings.focusInvalid ) {
+				try {
+					$(this.findLastActive() || this.errorList.length && this.errorList[0].element || []).filter(":visible").focus();
+				} catch(e) {
+					// ignore IE throwing errors when focusing hidden elements
+				}
+			}
+		},
+		
+		findLastActive: function() {
+			var lastActive = this.lastActive;
+			return lastActive && $.grep(this.errorList, function(n) {
+				return n.element.name == lastActive.name;
+			}).length == 1 && lastActive;
+		},
+		
+		elements: function() {
+			var validator = this,
+				rulesCache = {};
+			
+			// select all valid inputs inside the form (no submit or reset buttons)
+			// workaround $Query([]).add until http://dev.jquery.com/ticket/2114 is solved
+			return $([]).add(this.currentForm.elements)
+			.filter(":input")
+			.not(":submit, :reset, :image, [disabled]")
+			.not( this.settings.ignore )
+			.filter(function() {
+				!this.name && validator.settings.debug && window.console && console.error( "%o has no name assigned", this);
+			
+				// select only the first element for each name, and only those with rules specified
+				if ( this.name in rulesCache || !validator.objectLength($(this).rules()) )
+					return false;
+				
+				rulesCache[this.name] = true;
+				return true;
+			});
+		},
+		
+		clean: function( selector ) {
+			return $( selector )[0];
+		},
+		
+		errors: function() {
+			return $( this.settings.errorElement + "." + this.settings.errorClass, this.errorContext );
+		},
+		
+		reset: function() {
+			this.successList = [];
+			this.errorList = [];
+			this.errorMap = {};
+			this.toShow = $([]);
+			this.toHide = $([]);
+			this.formSubmitted = false;
+			this.currentElements = $([]);
+		},
+		
+		prepareForm: function() {
+			this.reset();
+			this.toHide = this.errors().add( this.containers );
+		},
+		
+		prepareElement: function( element ) {
+			this.reset();
+			this.toHide = this.errorsFor(element);
+		},
+	
+		check: function( element ) {
+			element = this.clean( element );
+			
+			// if radio/checkbox, validate first element in group instead
+			if (this.checkable(element)) {
+				element = this.findByName( element.name )[0];
+			}
+			
+			var rules = $(element).rules();
+			var dependencyMismatch = false;
+			for( method in rules ) {
+				var rule = { method: method, parameters: rules[method] };
+				try {
+					var result = $.validator.methods[method].call( this, element.value.replace(/\r/g, ""), element, rule.parameters );
+					
+					// if a method indicates that the field is optional and therefore valid,
+					// don't mark it as valid when there are no other rules
+					if ( result == "dependency-mismatch" ) {
+						dependencyMismatch = true;
+						continue;
+					}
+					dependencyMismatch = false;
+					
+					if ( result == "pending" ) {
+						this.toHide = this.toHide.not( this.errorsFor(element) );
+						return;
+					}
+					
+					if( !result ) {
+						this.formatAndAdd( element, rule );
+						return false;
+					}
+				} catch(e) {
+					this.settings.debug && window.console && console.log("exception occured when checking element " + element.id
+						 + ", check the '" + rule.method + "' method");
+					throw e;
+				}
+			}
+			if (dependencyMismatch)
+				return;
+			if ( this.objectLength(rules) )
+				this.successList.push(element);
+			return true;
+		},
+		
+		// return the custom message for the given element and validation method
+		// specified in the element's "messages" metadata
+		customMetaMessage: function(element, method) {
+			if (!$.metadata)
+				return;
+			
+			var meta = this.settings.meta
+				? $(element).metadata()[this.settings.meta]
+				: $(element).metadata();
+			
+			return meta && meta.messages && meta.messages[method];
+		},
+		
+		// return the custom message for the given element name and validation method
+		customMessage: function( name, method ) {
+			var m = this.settings.messages[name];
+			return m && (m.constructor == String
+				? m
+				: m[method]);
+		},
+		
+		// return the first defined argument, allowing empty strings
+		findDefined: function() {
+			for(var i = 0; i < arguments.length; i++) {
+				if (arguments[i] !== undefined)
+					return arguments[i];
+			}
+			return undefined;
+		},
+		
+		defaultMessage: function( element, method) {
+			return this.findDefined(
+				this.customMessage( element.name, method ),
+				this.customMetaMessage( element, method ),
+				// title is never undefined, so handle empty string as undefined
+				!this.settings.ignoreTitle && element.title || undefined,
+				$.validator.messages[method],
+				"<strong>Warning: No message defined for " + element.name + "</strong>"
+			);
+		},
+		
+		formatAndAdd: function( element, rule ) {
+			var message = this.defaultMessage( element, rule.method );
+			if ( typeof message == "function" ) 
+				message = message.call(this, rule.parameters, element);
+			this.errorList.push({
+				message: message,
+				element: element
+			});
+			this.errorMap[element.name] = message;
+			this.submitted[element.name] = message;
+		},
+		
+		addWrapper: function(toToggle) {
+			if ( this.settings.wrapper )
+				toToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );
+			return toToggle;
+		},
+		
+		defaultShowErrors: function() {
+			for ( var i = 0; this.errorList[i]; i++ ) {
+				var error = this.errorList[i];
+				this.settings.highlight && this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );
+				this.showLabel( error.element, error.message );
+			}
+			if( this.errorList.length ) {
+				this.toShow = this.toShow.add( this.containers );
+			}
+			if (this.settings.success) {
+				for ( var i = 0; this.successList[i]; i++ ) {
+					this.showLabel( this.successList[i] );
+				}
+			}
+			if (this.settings.unhighlight) {
+				for ( var i = 0, elements = this.validElements(); elements[i]; i++ ) {
+					this.settings.unhighlight.call( this, elements[i], this.settings.errorClass, this.settings.validClass );
+				}
+			}
+			this.toHide = this.toHide.not( this.toShow );
+			this.hideErrors();
+			this.addWrapper( this.toShow ).show();
+		},
+		
+		validElements: function() {
+			return this.currentElements.not(this.invalidElements());
+		},
+		
+		invalidElements: function() {
+			return $(this.errorList).map(function() {
+				return this.element;
+			});
+		},
+		
+		showLabel: function(element, message) {
+			var label = this.errorsFor( element );
+			if ( label.length ) {
+				// refresh error/success class
+				label.removeClass().addClass( this.settings.errorClass );
+			
+				// check if we have a generated label, replace the message then
+				label.attr("generated") && label.html(message);
+			} else {
+				// create label
+				label = $("<" + this.settings.errorElement + "/>")
+					.attr({"for":  this.idOrName(element), generated: true})
+					.addClass(this.settings.errorClass)
+					.html(message || "");
+				if ( this.settings.wrapper ) {
+					// make sure the element is visible, even in IE
+					// actually showing the wrapped element is handled elsewhere
+					label = label.hide().show().wrap("<" + this.settings.wrapper + "/>").parent();
+				}
+				if ( !this.labelContainer.append(label).length )
+					this.settings.errorPlacement
+						? this.settings.errorPlacement(label, $(element) )
+						: label.insertAfter(element);
+			}
+			if ( !message && this.settings.success ) {
+				label.text("");
+				typeof this.settings.success == "string"
+					? label.addClass( this.settings.success )
+					: this.settings.success( label );
+			}
+			this.toShow = this.toShow.add(label);
+		},
+		
+		errorsFor: function(element) {
+			return this.errors().filter("[for='" + this.idOrName(element) + "']");
+		},
+		
+		idOrName: function(element) {
+			return this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name);
+		},
+
+		checkable: function( element ) {
+			return /radio|checkbox/i.test(element.type);
+		},
+		
+		findByName: function( name ) {
+			// select by name and filter by form for performance over form.find("[name=...]")
+			var form = this.currentForm;
+			return $(document.getElementsByName(name)).map(function(index, element) {
+				return element.form == form && element.name == name && element  || null;
+			});
+		},
+		
+		getLength: function(value, element) {
+			switch( element.nodeName.toLowerCase() ) {
+			case 'select':
+				return $("option:selected", element).length;
+			case 'input':
+				if( this.checkable( element) )
+					return this.findByName(element.name).filter(':checked').length;
+			}
+			return value.length;
+		},
+	
+		depend: function(param, element) {
+			return this.dependTypes[typeof param]
+				? this.dependTypes[typeof param](param, element)
+				: true;
+		},
+	
+		dependTypes: {
+			"boolean": function(param, element) {
+				return param;
+			},
+			"string": function(param, element) {
+				return !!$(param, element.form).length;
+			},
+			"function": function(param, element) {
+				return param(element);
+			}
+		},
+		
+		optional: function(element) {
+			return !$.validator.methods.required.call(this, $.trim(element.value), element) && "dependency-mismatch";
+		},
+		
+		startRequest: function(element) {
+			if (!this.pending[element.name]) {
+				this.pendingRequest++;
+				this.pending[element.name] = true;
+			}
+		},
+		
+		stopRequest: function(element, valid) {
+			this.pendingRequest--;
+			// sometimes synchronization fails, make sure pendingRequest is never < 0
+			if (this.pendingRequest < 0)
+				this.pendingRequest = 0;
+			delete this.pending[element.name];
+			if ( valid && this.pendingRequest == 0 && this.formSubmitted && this.form() ) {
+				$(this.currentForm).submit();
+			} else if (!valid && this.pendingRequest == 0 && this.formSubmitted) {
+				$(this.currentForm).triggerHandler("invalid-form", [this]);
+			}
+		},
+		
+		previousValue: function(element) {
+			return $.data(element, "previousValue") || $.data(element, "previousValue", previous = {
+				old: null,
+				valid: true,
+				message: this.defaultMessage( element, "remote" )
+			});
+		}
+		
+	},
+	
+	classRuleSettings: {
+		required: {required: true},
+		email: {email: true},
+		url: {url: true},
+		date: {date: true},
+		dateISO: {dateISO: true},
+		dateDE: {dateDE: true},
+		number: {number: true},
+		numberDE: {numberDE: true},
+		digits: {digits: true},
+		creditcard: {creditcard: true}
+	},
+	
+	addClassRules: function(className, rules) {
+		className.constructor == String ?
+			this.classRuleSettings[className] = rules :
+			$.extend(this.classRuleSettings, className);
+	},
+	
+	classRules: function(element) {
+		var rules = {};
+		var classes = $(element).attr('class');
+		classes && $.each(classes.split(' '), function() {
+			if (this in $.validator.classRuleSettings) {
+				$.extend(rules, $.validator.classRuleSettings[this]);
+			}
+		});
+		return rules;
+	},
+	
+	attributeRules: function(element) {
+		var rules = {};
+		var $element = $(element);
+		
+		for (method in $.validator.methods) {
+			var value = $element.attr(method);
+			if (value) {
+				rules[method] = value;
+			}
+		}
+		
+		// maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs
+		if (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) {
+			delete rules.maxlength;
+		}
+		
+		return rules;
+	},
+	
+	metadataRules: function(element) {
+		if (!$.metadata) return {};
+		
+		var meta = $.data(element.form, 'validator').settings.meta;
+		return meta ?
+			$(element).metadata()[meta] :
+			$(element).metadata();
+	},
+	
+	staticRules: function(element) {
+		var rules = {};
+		var validator = $.data(element.form, 'validator');
+		if (validator.settings.rules) {
+			rules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {};
+		}
+		return rules;
+	},
+	
+	normalizeRules: function(rules, element) {
+		// handle dependency check
+		$.each(rules, function(prop, val) {
+			// ignore rule when param is explicitly false, eg. required:false
+			if (val === false) {
+				delete rules[prop];
+				return;
+			}
+			if (val.param || val.depends) {
+				var keepRule = true;
+				switch (typeof val.depends) {
+					case "string":
+						keepRule = !!$(val.depends, element.form).length;
+						break;
+					case "function":
+						keepRule = val.depends.call(element, element);
+						break;
+				}
+				if (keepRule) {
+					rules[prop] = val.param !== undefined ? val.param : true;
+				} else {
+					delete rules[prop];
+				}
+			}
+		});
+		
+		// evaluate parameters
+		$.each(rules, function(rule, parameter) {
+			rules[rule] = $.isFunction(parameter) ? parameter(element) : parameter;
+		});
+		
+		// clean number parameters
+		$.each(['minlength', 'maxlength', 'min', 'max'], function() {
+			if (rules[this]) {
+				rules[this] = Number(rules[this]);
+			}
+		});
+		$.each(['rangelength', 'range'], function() {
+			if (rules[this]) {
+				rules[this] = [Number(rules[this][0]), Number(rules[this][1])];
+			}
+		});
+		
+		if ($.validator.autoCreateRanges) {
+			// auto-create ranges
+			if (rules.min && rules.max) {
+				rules.range = [rules.min, rules.max];
+				delete rules.min;
+				delete rules.max;
+			}
+			if (rules.minlength && rules.maxlength) {
+				rules.rangelength = [rules.minlength, rules.maxlength];
+				delete rules.minlength;
+				delete rules.maxlength;
+			}
+		}
+		
+		// To support custom messages in metadata ignore rule methods titled "messages"
+		if (rules.messages) {
+			delete rules.messages
+		}
+		
+		return rules;
+	},
+	
+	// Converts a simple string to a {string: true} rule, e.g., "required" to {required:true}
+	normalizeRule: function(data) {
+		if( typeof data == "string" ) {
+			var transformed = {};
+			$.each(data.split(/\s/), function() {
+				transformed[this] = true;
+			});
+			data = transformed;
+		}
+		return data;
+	},
+	
+	// http://docs.jquery.com/Plugins/Validation/Validator/addMethod
+	addMethod: function(name, method, message) {
+		$.validator.methods[name] = method;
+		$.validator.messages[name] = message || $.validator.messages[name];
+		if (method.length < 3) {
+			$.validator.addClassRules(name, $.validator.normalizeRule(name));
+		}
+	},
+
+	methods: {
+
+		// http://docs.jquery.com/Plugins/Validation/Methods/required
+		required: function(value, element, param) {
+			// check if dependency is met
+			if ( !this.depend(param, element) )
+				return "dependency-mismatch";
+			switch( element.nodeName.toLowerCase() ) {
+			case 'select':
+				var options = $("option:selected", element);
+				return options.length > 0 && ( element.type == "select-multiple" || ($.browser.msie && !(options[0].attributes['value'].specified) ? options[0].text : options[0].value).length > 0);
+			case 'input':
+				if ( this.checkable(element) )
+					return this.getLength(value, element) > 0;
+			default:
+				return $.trim(value).length > 0;
+			}
+		},
+		
+		// http://docs.jquery.com/Plugins/Validation/Methods/remote
+		remote: function(value, element, param) {
+			if ( this.optional(element) )
+				return "dependency-mismatch";
+			
+			var previous = this.previousValue(element);
+			
+			if (!this.settings.messages[element.name] )
+				this.settings.messages[element.name] = {};
+			this.settings.messages[element.name].remote = typeof previous.message == "function" ? previous.message(value) : previous.message;
+			
+			param = typeof param == "string" && {url:param} || param; 
+			
+			if ( previous.old !== value ) {
+				previous.old = value;
+				var validator = this;
+				this.startRequest(element);
+				var data = {};
+				data[element.name] = value;
+				$.ajax($.extend(true, {
+					url: param,
+					mode: "abort",
+					port: "validate" + element.name,
+					dataType: "json",
+					data: data,
+					success: function(response) {
+						var valid = response === true;
+						if ( valid ) {
+							var submitted = validator.formSubmitted;
+							validator.prepareElement(element);
+							validator.formSubmitted = submitted;
+							validator.successList.push(element);
+							validator.showErrors();
+						} else {
+							var errors = {};
+							errors[element.name] = previous.message = response || validator.defaultMessage( element, "remote" );
+							validator.showErrors(errors);
+						}
+						previous.valid = valid;
+						validator.stopRequest(element, valid);
+					}
+				}, param));
+				return "pending";
+			} else if( this.pending[element.name] ) {
+				return "pending";
+			}
+			return previous.valid;
+		},
+
+		// http://docs.jquery.com/Plugins/Validation/Methods/minlength
+		minlength: function(value, element, param) {
+			return this.optional(element) || this.getLength($.trim(value), element) >= param;
+		},
+		
+		// http://docs.jquery.com/Plugins/Validation/Methods/maxlength
+		maxlength: function(value, element, param) {
+			return this.optional(element) || this.getLength($.trim(value), element) <= param;
+		},
+		
+		// http://docs.jquery.com/Plugins/Validation/Methods/rangelength
+		rangelength: function(value, element, param) {
+			var length = this.getLength($.trim(value), element);
+			return this.optional(element) || ( length >= param[0] && length <= param[1] );
+		},
+		
+		// http://docs.jquery.com/Plugins/Validation/Methods/min
+		min: function( value, element, param ) {
+			return this.optional(element) || value >= param;
+		},
+		
+		// http://docs.jquery.com/Plugins/Validation/Methods/max
+		max: function( value, element, param ) {
+			return this.optional(element) || value <= param;
+		},
+		
+		// http://docs.jquery.com/Plugins/Validation/Methods/range
+		range: function( value, element, param ) {
+			return this.optional(element) || ( value >= param[0] && value <= param[1] );
+		},
+		
+		// http://docs.jquery.com/Plugins/Validation/Methods/email
+		email: function(value, element) {
+			// contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
+			return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);
+		},
+	
+		// http://docs.jquery.com/Plugins/Validation/Methods/url
+		url: function(value, element) {
+			// contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/
+			return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);
+		},
+        
+		// http://docs.jquery.com/Plugins/Validation/Methods/date
+		date: function(value, element) {
+			return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
+		},
+	
+		// http://docs.jquery.com/Plugins/Validation/Methods/dateISO
+		dateISO: function(value, element) {
+			return this.optional(element) || /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value);
+		},
+	
+		// http://docs.jquery.com/Plugins/Validation/Methods/dateDE
+		dateDE: function(value, element) {
+			return this.optional(element) || /^\d\d?\.\d\d?\.\d\d\d?\d?$/.test(value);
+		},
+	
+		// http://docs.jquery.com/Plugins/Validation/Methods/number
+		number: function(value, element) {
+			return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);
+		},
+	
+		// http://docs.jquery.com/Plugins/Validation/Methods/numberDE
+		numberDE: function(value, element) {
+			return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value);
+		},
+		
+		// http://docs.jquery.com/Plugins/Validation/Methods/digits
+		digits: function(value, element) {
+			return this.optional(element) || /^\d+$/.test(value);
+		},
+		
+		// http://docs.jquery.com/Plugins/Validation/Methods/creditcard
+		// based on http://en.wikipedia.org/wiki/Luhn
+		creditcard: function(value, element) {
+			if ( this.optional(element) )
+				return "dependency-mismatch";
+			// accept only digits and dashes
+			if (/[^0-9-]+/.test(value))
+				return false;
+			var nCheck = 0,
+				nDigit = 0,
+				bEven = false;
+
+			value = value.replace(/\D/g, "");
+
+			for (n = value.length - 1; n >= 0; n--) {
+				var cDigit = value.charAt(n);
+				var nDigit = parseInt(cDigit, 10);
+				if (bEven) {
+					if ((nDigit *= 2) > 9)
+						nDigit -= 9;
+				}
+				nCheck += nDigit;
+				bEven = !bEven;
+			}
+
+			return (nCheck % 10) == 0;
+		},
+		
+		// http://docs.jquery.com/Plugins/Validation/Methods/accept
+		accept: function(value, element, param) {
+			param = typeof param == "string" ? param.replace(/,/g, '|') : "png|jpe?g|gif";
+			return this.optional(element) || value.match(new RegExp(".(" + param + ")$", "i")); 
+		},
+		
+		// http://docs.jquery.com/Plugins/Validation/Methods/equalTo
+		equalTo: function(value, element, param) {
+			return value == $(param).val();
+		}
+		
+	}
+	
+});
+
+// deprecated, use $.validator.format instead
+$.format = $.validator.format;
+
+})(jQuery);
+
+// ajax mode: abort
+// usage: $.ajax({ mode: "abort"[, port: "uniqueport"]});
+// if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort() 
+;(function($) {
+	var ajax = $.ajax;
+	var pendingRequests = {};
+	$.ajax = function(settings) {
+		// create settings for compatibility with ajaxSetup
+		settings = $.extend(settings, $.extend({}, $.ajaxSettings, settings));
+		var port = settings.port;
+		if (settings.mode == "abort") {
+			if ( pendingRequests[port] ) {
+				pendingRequests[port].abort();
+			}
+			return (pendingRequests[port] = ajax.apply(this, arguments));
+		}
+		return ajax.apply(this, arguments);
+	};
+})(jQuery);
+
+// provides cross-browser focusin and focusout events
+// IE has native support, in other browsers, use event caputuring (neither bubbles)
+
+// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation
+// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target 
+
+// provides triggerEvent(type: String, target: Element) to trigger delegated events
+;(function($) {
+	$.each({
+		focus: 'focusin',
+		blur: 'focusout'	
+	}, function( original, fix ){
+		$.event.special[fix] = {
+			setup:function() {
+				if ( $.browser.msie ) return false;
+				this.addEventListener( original, $.event.special[fix].handler, true );
+			},
+			teardown:function() {
+				if ( $.browser.msie ) return false;
+				this.removeEventListener( original,
+				$.event.special[fix].handler, true );
+			},
+			handler: function(e) {
+				arguments[0] = $.event.fix(e);
+				arguments[0].type = fix;
+				return $.event.handle.apply(this, arguments);
+			}
+		};
+	});
+	$.extend($.fn, {
+		delegate: function(type, delegate, handler) {
+			return this.bind(type, function(event) {
+				var target = $(event.target);
+				if (target.is(delegate)) {
+					return handler.apply(target, arguments);
+				}
+			});
+		},
+		triggerEvent: function(type, target) {
+			return this.triggerHandler(type, [$.event.fix({ type: type, target: target })]);
+		}
+	})
+})(jQuery);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/templates/all_tags.html	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,102 @@
+{% extends "hdabo_base.html" %}
+    {% block title %}HDA - BO : Tous les tags{% endblock %}
+
+    {% block js_import %}
+    {{block.super}}
+    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery-ui.min.js"></script>
+    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.jeditable.js"></script>
+    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.tablednd_0_5.js"></script>
+    {% endblock %}
+    
+    {% block js_declaration %}
+    {{block.super}}
+    <script type="text/javascript">
+    
+    var global_csrf_token = "{{ csrf_token }}";
+    var static_url = "{{STATIC_URL}}";
+    var tag_up_down_url = "{% url 'hdabo.views.tag_up_down' %}";
+    var remove_tag_from_list_url = "{% url 'hdabo.views.remove_tag_from_list' %}";
+    var modify_tag_url = "{% url 'hdabo.views.modify_tag' %}";
+    var reset_wp_info_url = "{% url 'hdabo.views.reset_wikipedia_info' %}";
+    var add_tag_url = "{% url 'hdabo.views.add_tag' %}";
+    var remove_wp_link_url = "{% url 'hdabo.views.remove_wp_link' %}";
+    var update_tag_alias_url = "{% url 'hdabo.views.update_tag_alias' %}";
+    var update_tag_category_url = "{% url 'hdabo.views.update_tag_category' %}";
+    var categories_list = '{{categories|safe}}';
+    
+    $(document).ready(function(){
+        init_tags_events();
+    });
+    </script>
+    {% endblock %}
+
+    {% block css_import %}
+    {{block.super}}
+    <link rel="stylesheet" href="{{STATIC_URL}}hdabo/css/smoothness/jquery-ui-1.8.13.custom.css" type="text/css"/>
+    {% endblock %}
+
+    {% block css_declaration %}
+    {{block.super}}
+    <style type="text/css">
+    .ui-autocomplete {
+        max-height: 100px;
+        overflow-y: auto;
+        /* prevent horizontal scrollbar */
+        overflow-x: hidden;
+        /* add padding to account for vertical scrollbar */
+        padding-right: 20px;
+    }
+    </style>
+    {% endblock %}
+    
+    
+    {% block content %}
+    {{block.super}}
+    <form method="POST" action="{% url 'hdabo.views.all_tags' %}">
+    {% csrf_token %}
+    <p>Chercher : 
+    {% for s in search_def %}
+    <a href="{% url 'hdabo.views.all_tags' num_page=1 nb_by_page=nb_by_page sort=sort searched=s.1 %}">{{s.0}}</a>
+    {% endfor %}
+    <input type="text" name="searched" value="{% if searched %}{{searched}}{% endif %}" id="searched" />
+    </p>
+    </form>
+    <p>Tags {{ current_page.start_index }} à {{ current_page.end_index }} sur {{ nb_total }}</p>
+    <div id="count_nav_top"><p>
+        {% if searched and searched != "" %}
+            <a href="{% url 'hdabo.views.all_tags' num_page=1 nb_by_page=nb_by_page sort=sort searched=searched %}">&lt;&lt;</a>&nbsp;&nbsp;
+            <a href="{% url 'hdabo.views.all_tags' num_page=prev_page nb_by_page=nb_by_page sort=sort searched=searched %}">&lt;</a>&nbsp;&nbsp;
+            {{ num_page }}/{{ last_page }}&nbsp;&nbsp;
+            <a href="{% url 'hdabo.views.all_tags' num_page=next_page nb_by_page=nb_by_page sort=sort searched=searched %}">&gt;</a>&nbsp;&nbsp;
+            <a href="{% url 'hdabo.views.all_tags' num_page=last_page nb_by_page=nb_by_page sort=sort searched=searched %}">&gt;&gt;</a></p>
+        {% else %}
+            <a href="{% url 'hdabo.views.all_tags' num_page=1 nb_by_page=nb_by_page sort=sort %}">&lt;&lt;</a>&nbsp;&nbsp;
+            <a href="{% url 'hdabo.views.all_tags' num_page=prev_page nb_by_page=nb_by_page sort=sort %}">&lt;</a>&nbsp;&nbsp;
+            {{ num_page }}/{{ last_page }}&nbsp;&nbsp;
+            <a href="{% url 'hdabo.views.all_tags' num_page=next_page nb_by_page=nb_by_page sort=sort %}">&gt;</a>&nbsp;&nbsp;
+            <a href="{% url 'hdabo.views.all_tags' num_page=last_page nb_by_page=nb_by_page sort=sort %}">&gt;&gt;</a>
+        {% endif %}</p>
+    </div>
+    <input type="hidden" name="num_page" value="{{num_page}}" id="num_page" />
+    <input type="hidden" name="nb_by_page" value="{{nb_by_page}}" id="nb_by_page" />
+    <input type="hidden" name="searched_str" value="{% if searched %}{{searched}}{% endif %}" id="searched_str" />
+    <input type="hidden" name="sort" value="{% if sort %}{{sort}}{% endif %}" id="sort" />
+    <div id="tag_table_container">
+    {% include "partial/all_tags_table.html" %}
+    </div>
+    <div id="count_nav_bottom"><p>
+        {% if searched and searched != "" %}
+            <a href="{% url 'hdabo.views.all_tags' num_page=1 nb_by_page=nb_by_page sort=sort searched=searched %}">&lt;&lt;</a>&nbsp;&nbsp;
+            <a href="{% url 'hdabo.views.all_tags' num_page=prev_page nb_by_page=nb_by_page sort=sort searched=searched %}">&lt;</a>&nbsp;&nbsp;
+            {{ num_page }}/{{ last_page }}&nbsp;&nbsp;
+            <a href="{% url 'hdabo.views.all_tags' num_page=next_page nb_by_page=nb_by_page sort=sort searched=searched %}">&gt;</a>&nbsp;&nbsp;
+            <a href="{% url 'hdabo.views.all_tags' num_page=last_page nb_by_page=nb_by_page sort=sort searched=searched %}">&gt;&gt;</a></p>
+        {% else %}
+            <a href="{% url 'hdabo.views.all_tags' num_page=1 nb_by_page=nb_by_page sort=sort %}">&lt;&lt;</a>&nbsp;&nbsp;
+            <a href="{% url 'hdabo.views.all_tags' num_page=prev_page nb_by_page=nb_by_page sort=sort %}">&lt;</a>&nbsp;&nbsp;
+            {{ num_page }}/{{ last_page }}&nbsp;&nbsp;
+            <a href="{% url 'hdabo.views.all_tags' num_page=next_page nb_by_page=nb_by_page sort=sort %}">&gt;</a>&nbsp;&nbsp;
+            <a href="{% url 'hdabo.views.all_tags' num_page=last_page nb_by_page=nb_by_page sort=sort %}">&gt;&gt;</a>
+        {% endif %}</p>
+    </div>
+    {% endblock %}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/templates/generic_sheet.html	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,83 @@
+{% extends "hdabo_base.html" %}
+    {% block title %}HDA - BO : Fiches pour {{ orga_name }}{% endblock %}
+
+    {% block js_import %}
+    {{block.super}}
+    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.tablednd_0_5.js"></script>
+    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery-ui.min.js"></script>
+    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.jeditable.js"></script>
+    {% endblock %}
+    
+    {% block js_declaration %}
+    {{block.super}}
+    {% if valid != "2" %}
+    <script type="text/javascript">
+    
+    var global_csrf_token = "{{ csrf_token }}";
+    var static_url = "{{STATIC_URL}}";
+    var tag_up_down_url = "{% url 'hdabo.views.tag_up_down' %}";
+    var remove_tag_from_list_url = "{% url 'hdabo.views.remove_tag_from_list' %}";
+    var modify_tag_url = "{% url 'hdabo.views.modify_tag_datasheet' %}";
+    var reset_wp_info_url = "{% url 'hdabo.views.reset_wikipedia_info' %}";
+    var reorder_tag_datasheet_url = "{% url 'hdabo.views.reorder_tag_datasheet' %}";
+    var add_tag_url = "{% url 'hdabo.views.add_tag' %}";
+    var remove_wp_link_url = "{% url 'hdabo.views.remove_wp_link' %}";
+    var validate_datasheet_url = "{% url 'hdabo.views.validate_datasheet' %}";
+    var update_tag_alias_url = "{% url 'hdabo.views.update_tag_alias' %}";
+    var update_tag_category_url = "{% url 'hdabo.views.update_tag_category' %}";
+    var categories_list = '{{categories|safe}}';
+    
+    $(document).ready(function(){
+        init_tags_events();
+        init_datasheet_events();
+    });
+    </script>
+    {% endif %}
+    {% endblock %}
+
+    {% block css_import %}
+    {{block.super}}
+    <link rel="stylesheet" href="{{STATIC_URL}}hdabo/css/smoothness/jquery-ui-1.8.13.custom.css" type="text/css"/>
+    {% endblock %}
+
+    {% block css_declaration %}
+    {{block.super}}
+    <style type="text/css">
+    .ui-autocomplete {
+        max-height: 100px;
+        overflow-y: auto;
+        /* prevent horizontal scrollbar */
+        overflow-x: hidden;
+        /* add padding to account for vertical scrollbar */
+        padding-right: 20px;
+    }
+    </style>
+    {% endblock %}
+    
+    
+    {% block content %}
+    {{block.super}}
+    <p>
+    {% if tag %} Fiche(s) concernées par le tag <b>{{ tag.label }}</b>
+    {% else %} Fiche(s) {% if valid %}<b>validées</b>{% else %}<b>non validées</b>{% endif %} pour l'organisation <b>{{ orga_name }}</b>
+    {% endif %} : {{nb_sheets}} fiche(s)</p>
+    <div id="count_nav_top">
+        <p><a href="{% url 'hdabo.views.display_datasheet' ds_id=zero_id %}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index=0">&lt;&lt;</a>&nbsp;&nbsp;
+           <a href="{% url 'hdabo.views.display_datasheet' ds_id=prev_id%}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index={{prev_index}}">&lt;</a>&nbsp;&nbsp;
+           {{displayed_index}}/{{nb_sheets}}&nbsp;&nbsp;
+           <a href="{% url 'hdabo.views.display_datasheet' ds_id=next_id%}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index={{next_index}}">&gt;</a>&nbsp;&nbsp;
+           <a href="{% url 'hdabo.views.display_datasheet' ds_id=last_id%}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index={{last_index}}">&gt;&gt;</a></p>
+    </div>
+    <table>
+    <tr class="imageline {% cycle 'hdabosimpleevenline' 'hdabosimpleoddline' %}"><td>
+    {% include "partial/one_sheet.html" %}
+    </td></tr>
+    </table>
+    <div id="count_nav_bottom">
+        <p><a href="{% url 'hdabo.views.display_datasheet' ds_id=zero_id %}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index=0">&lt;&lt;</a>&nbsp;&nbsp;
+           <a href="{% url 'hdabo.views.display_datasheet' ds_id=prev_id%}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index={{prev_index}}">&lt;</a>&nbsp;&nbsp;
+           {{displayed_index}}/{{nb_sheets}}&nbsp;&nbsp;
+           <a href="{% url 'hdabo.views.display_datasheet' ds_id=next_id%}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index={{next_index}}">&gt;</a>&nbsp;&nbsp;
+           <a href="{% url 'hdabo.views.display_datasheet' ds_id=last_id%}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index={{last_index}}">&gt;&gt;</a></p>
+    </div>
+    {% endblock %}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/templates/hdabo_base.html	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,86 @@
+{% load i18n %}
+{% comment %}{% load logintag %}{% endcomment %}
+{% comment %}{% load navigation %}{% endcomment %}
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{{LANGUAGE_CODE}}" lang="{{LANGUAGE_CODE}}">
+<head>
+{% block head %}
+	<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
+    <meta http-equiv="content-language" content="{{LANGUAGE_CODE}}" />
+    <link rel="SHORTCUT ICON" href="{{STATIC_URL}}hdabo/img/favicon.ico" />
+    <title>{% block title %}HDA-BO{% endblock %}</title>
+    {% block js_import %}
+    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/hdabo.js"></script>
+    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.min.js"></script>
+    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.nyroModal.min.js"></script>
+    <!--[if IE 6]>
+    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.nyroModal-ie6.min.js"></script>
+    <![endif]-->
+    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.qtip.min.js"></script>
+    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.validate.js" ></script>
+    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.textchange.min.js" ></script>
+    {% endblock %}
+    
+    {% block css_declaration %}
+    <style type="text/css">
+		.rounded {
+			behavior:url("{{STATIC_URL}}hdabo/css/border-radius.htc");
+		}
+	</style>
+	{% endblock %}
+    
+    {% block css_import %}
+    
+    <link rel="stylesheet" href="{{STATIC_URL}}hdabo/css/style.css" type="text/css"/>
+    <link rel="stylesheet" href="{{STATIC_URL}}hdabo/css/nyroModal.css" type="text/css"/>
+    {% endblock %}
+    
+    {% block js_declaration %}
+    {% endblock %}
+    
+{% endblock %}
+</head>
+<body>
+{% block body %}
+<div class="container">
+<div id="header">      
+    {% block header %}
+    <div id="header_left">
+    	<p><a href="{% url 'hdabo.views.home' %}">HDA<span class="hda_blue">BO</span></a></p>
+    </div>
+    {% endblock %}
+</div>
+<div id="content" class="span-24 last">
+    <div id="toolbar">
+    {% block toolbar %}
+    {% if user.is_authenticated %}
+    <ul><li><a href="{% url 'hdabo.views.home' %}">Home</a></li>
+    <li><a href="{% url 'hdabo.views.all_tags' %}">Tous les tags</a></li>
+    <li><a href="{% url 'haystack_search' %}">Recherche</a></li>
+    <li><span style="float:right;">{{user.username}}&nbsp;|&nbsp;<a href="{% url 'django.contrib.auth.views.logout_then_login' %}" >Se déconnecter</a>{% if user.is_staff %}&nbsp;|&nbsp;<a href="{% url 'admin:index' %}" >admin</a>{% endif %}</span></li>
+    </ul>
+    {% endif %}
+    {% endblock %}
+    </div>
+    <div id="inner_content">
+    {% block content %}
+    {% endblock %}
+    </div>
+</div>
+<div id="footer" class="span-24 last">
+    {% block footer %}
+    <div class="footer_img">
+    <a href="http://www.iri.centrepompidou.fr" target="_blank"><img src="{{STATIC_URL}}hdabo/img/logo_IRI_footer.png" alt="Logo IRI" /></a>
+    </div>
+    <div style="float: right; text-align: right;" class="small" id="copyright_version">
+        <div>©2011 <a style="text-decoration: none; color: #4F5155;" href="http://www.iri.centrepompidou.fr" target="_blank">IRI</a></div>
+        <div id="versionwrapper"><span class="version" id="version">{{VERSION}}</span></div>
+    </div>
+    {% endblock %}
+</div>
+</div>
+{% endblock %}
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/templates/list_for_orga.html	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,86 @@
+{% extends "hdabo_base.html" %}
+    {% block title %}HDA - BO : Fiches pour {{ orga_name }}{% endblock %}
+
+    {% block js_import %}
+    {{block.super}}
+    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.tablednd_0_5.js"></script>
+    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery-ui.min.js"></script>
+    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.jeditable.js"></script>
+    {% endblock %}
+    
+    {% block js_declaration %}
+    {{block.super}}
+    {% if valid != "2" %}
+    <script type="text/javascript">
+    
+    var global_csrf_token = "{{ csrf_token }}";
+    var static_url = "{{STATIC_URL}}";
+    var tag_up_down_url = "{% url hdabo.views.tag_up_down %}";
+    var remove_tag_from_list_url = "{% url hdabo.views.remove_tag_from_list %}";
+    var modify_tag_url = "{% url hdabo.views.modify_tag_datasheet %}";
+    var reset_wp_info_url = "{% url hdabo.views.reset_wikipedia_info %}";
+    var add_tag_url = "{% url hdabo.views.add_tag %}";
+    var remove_wp_link_url = "{% url hdabo.views.remove_wp_link %}";
+    var validate_datasheet_url = "{% url hdabo.views.validate_datasheet %}";
+    var update_tag_alias_url = "{% url hdabo.views.update_tag_alias %}";
+    var update_tag_category_url = "{% url hdabo.views.update_tag_category %}";
+    var categories_list = '{{categories|safe}}';
+    
+    $(document).ready(function(){
+        init_tags_events();
+        init_datasheet_events();
+    });
+    </script>
+    {% endif %}
+    {% endblock %}
+
+    {% block css_import %}
+    {{block.super}}
+    <link rel="stylesheet" href="{{STATIC_URL}}hdabo/css/smoothness/jquery-ui-1.8.13.custom.css" type="text/css"/>
+    {% endblock %}
+
+    {% block css_declaration %}
+    {{block.super}}
+    <style type="text/css">
+    .ui-autocomplete {
+        max-height: 100px;
+        overflow-y: auto;
+        /* prevent horizontal scrollbar */
+        overflow-x: hidden;
+        /* add padding to account for vertical scrollbar */
+        padding-right: 20px;
+    }
+    </style>
+    {% endblock %}
+    
+    
+    {% block content %}
+    {{block.super}}
+    <p>Fiche(s) {% if valid == "1" %}<b>validées</b>{% else %}{% if valid != "2" %}<b>non validées</b>{% endif %}{% endif %}
+    pour l'organisation <b>{{ orga_name }}</b> : {{nb_sheets}} fiche(s)</p>
+    {% if valid != "2" %}
+    <div id="count_nav_top">
+        <p><a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=0 %}">&lt;&lt;</a>&nbsp;&nbsp;
+           <a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=prev_index %}">&lt;</a>&nbsp;&nbsp;
+           {{displayed_index}}/{{nb_sheets}}&nbsp;&nbsp;
+           <a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=next_index %}">&gt;</a>&nbsp;&nbsp;
+           <a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=last_index %}">&gt;&gt;</a></p>
+    </div>
+    {% endif %}
+    <table>
+    {% for ds in datasheets %}
+    <tr class="imageline {% cycle 'hdabosimpleevenline' 'hdabosimpleoddline' %}"><td>
+    {% include "partial/one_sheet.html" %}
+    </td></tr>
+    {% endfor %}
+    </table>
+    {% if valid != "2" %}
+    <div id="count_nav_bottom">
+        <p><a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=0 %}">&lt;&lt;</a>&nbsp;&nbsp;
+           <a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=prev_index %}">&lt;</a>&nbsp;&nbsp;
+           {{displayed_index}}/{{nb_sheets}}&nbsp;&nbsp;
+           <a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=next_index %}">&gt;</a>&nbsp;&nbsp;
+           <a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=last_index %}">&gt;&gt;</a></p>
+    </div>
+    {% endif %}
+    {% endblock %}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/templates/organisation_list.html	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,32 @@
+{% extends "hdabo_base.html" %}
+    {% block title %}HDA-BO : Liste des organisations{% endblock %}
+    
+    {% block content %}
+    {{block.super}}
+    <p>Afficher les fiches non validées pour les lieux suivants :</p>
+    <table>
+    <tr>
+        <th class="contenttitle">Nom</th>
+        <th class="contenttitle">Fiches non validées</th>
+        <th class="contenttitle">Fiches validées</th>
+        <th class="contenttitle">Toutes les fiches</th>
+    </tr>
+    {% for item in organisations %}
+    <tr class="imageline {% cycle 'hdabooddline' 'hdaboevenline'%}">
+        <td class="contenttitle">{{ item.organisation.name|default:"_" }} (<a href="{{item.organisation.website}}" target="_blank">lien</a>)</td>
+        <td class="contenttitle">
+        {% if item.nb_unval > 0 %}
+        <a class="contenttitlelink" href="{% url 'hdabo.views.display_datasheet' ds_id=item.first_id_unval %}">{{item.nb_unval}}</a>
+        {% else %}0{% endif %}</td>
+        <td class="contenttitle">
+        {% if item.nb_val > 0 %}
+        <a class="contenttitlelink" href="{% url 'hdabo.views.display_datasheet' ds_id=item.first_id_val %}">{{item.nb_val}}</a>
+        {% else %}0{% endif %}</td>
+        <td class="contenttitle">
+        {% if item.nb_all > 0 %}
+        <a class="contenttitlelink" href="{% url 'hdabo.views.list_for_orga' orga_id=item.organisation.id valid=2 %}">{{item.nb_all}}</a>
+        {% else %}0{% endif %}</td>
+    </tr>
+    {% endfor %}
+    </table>
+    {% endblock %}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/templates/partial/all_tags_table.html	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,61 @@
+{% block tag_table %}
+	<table id="all_tags_table">
+    <tr><th>id</th>
+        <th>
+        {% if sort|slice:"1:" != "lab" %}
+ 	        {% if searched and searched != "" %}
+	            <a href="{% url 'hdabo.views.all_tags' num_page='1' nb_by_page=nb_by_page sort='+lab' searched=searched %}">label</a>
+	        {% else %}
+	            <a href="{% url 'hdabo.views.all_tags' num_page='1' nb_by_page=nb_by_page sort='+lab' %}">label</a>
+	        {% endif %}
+        {% else %}label &nbsp;{% if searched and searched != "" %}<a href="{% url 'hdabo.views.all_tags' num_page='1' nb_by_page=nb_by_page sort=reverse_sort searched=searched %}">{% else %}<a href="{% url 'hdabo.views.all_tags'  num_page='1' nb_by_page=nb_by_page sort=reverse_sort %}">{% endif %}<img src="{{STATIC_URL}}hdabo/img/sort-{% if sort|first == '+' %}asc{% else %}desc{% endif %}.png"/></a>{% endif %}
+        </th>
+        <th>original_label</th>
+        <th class="text_centered">Lien W</th>
+        <th class="text_centered">Lien D</th>
+        <th>Catégorie</th>
+        <th class="large_25 text_centered">Supprimer<br/>le lien W</th>
+        <th>Alias</th>
+        <th class="text_centered">Nb de<br/>fiches</th>
+        <th>
+        {% if sort|slice:"1:" != "pop" %}
+ 	        {% if searched and searched != "" %}
+	            <a href="{% url 'hdabo.views.all_tags' num_page='1' nb_by_page=nb_by_page sort='+pop' searched=searched %}">Popularité</a>
+	        {% else %}
+	            <a href="{% url 'hdabo.views.all_tags' num_page='1' nb_by_page=nb_by_page sort='+pop' %}">Popularité</a>
+	        {% endif %}
+        {% else %}Popularité &nbsp;{% if searched and searched != "" %}<a href="{% url 'hdabo.views.all_tags' num_page='1' nb_by_page=nb_by_page sort=reverse_sort searched=searched %}">{% else %}<a href="{% url 'hdabo.views.all_tags' num_page='1' nb_by_page=nb_by_page sort=reverse_sort %}">{% endif %}<img src="{{STATIC_URL}}hdabo/img/sort-{% if sort|first == '+' %}asc{% else %}desc{% endif %}.png"/></a>{% endif %}
+        </th></tr>
+    {% for tag in tags %}
+    <tr class="imageline {% cycle 'hdabooddline' 'hdaboevenline' %}">
+        <td class="reset_wp_info">{{tag.id}}</td>
+        <td class="{{tag.url_status_text}} wikipediatag" id="{{tag.id}}" >{{tag.label}}</td>
+        <td>{{tag.original_label}}</td>
+        <td class="text_centered">
+            {% if tag.wikipedia_url and tag.wikipedia_url != ""  %}
+            <a href="{{tag.wikipedia_url}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/arrow_right.png" ></a>
+            {% else %}
+            <a href="http://fr.wikipedia.org/w/index.php?search={{tag.label}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/wikipedia_search.png" ></a>
+            {% endif %}
+        </td>
+        <td class="text_centered">
+            {% if tag.dbpedia_uri and tag.dbpedia_uri != ""  %}
+            <a href="{{tag.dbpedia_uri}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/arrow_green_right.png" ></a>
+            {% else %}
+            &nbsp;
+            {% endif %}
+        </td>
+        <td class="tag_category" id="{{tag.id}}">{% if tag.category %}{{ tag.category }}{% endif %}</td>
+        <td class="text_centered"><img src="{{STATIC_URL}}hdabo/img/red_cross.png" class="remove_wp_link" id="{{tag.id}}" alt="{{tag.label}}" /></td>
+        <td class="tag_alias" id="{{tag.id}}" >{% if tag.alias %}{{tag.alias}}{% endif %}</td>
+        <td class="text_centered">
+        {% if tag.num_ds > 0 %}
+        	<a href="{% url 'hdabo.views.display_datasheet' %}?tag={{tag.id}}" >{{tag.num_ds}}</a>
+		{% else %}
+            {{tag.num_ds}}
+        {% endif %}
+        </td>
+        <td class="text_centered">{{tag.popularity}}</td></tr>
+    {% endfor %}
+    </table>
+{% endblock %}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/templates/partial/one_sheet.html	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,43 @@
+{% block one_sheet %}
+<div class="complete_sheet">
+    <div class="left_sheet">
+        <p><b>id hda</b><br/>{{ds.hda_id}}</p>
+        <p><b>Titre</b><br><span class="sheet_title">{{ds.title}}</span></p>
+        <p><b>Description</b><br/>{{ds.description}}</p>
+        <p><b>Url</b><br/><a href="{{ds.url}}" target="_blank">{{ds.url}}</a></p>
+        <p><b>Domaine artistique</b><br/>{{ds.domains_text}}</p>
+        <p><b>Périodes Primaire</b><br/>{{ds.primary_periods_text}}</p>
+        <p><b>Périodes Collège</b><br/>{{ds.college_periods_text}}</p>
+        <p><b>Périodes Lycée</b><br/>{{ds.highschool_periods_text}}</p>
+        <p><b>Liste de référence du primaire</b><br/>{{ds.primary_themes_text}}</p>
+        <p><b>Thèmes Collège</b><br/>{{ds.college_themes_text}}</p>
+        <p><b>Thèmes Lycée</b><br/>{{ds.highschool_themes_text}}</p>
+        <p><b>Ville</b><br/>{{ds.town_text}}</p>
+        <p><b>Format</b><br/>{{ds.format}}</p>
+        <table><tr><th>Date de création</th><th>Date de modification</th></tr>
+        <tr><td>{{ds.original_creation_date|date:"d/m/Y"}}</td><td>{{ds.modification_datetime|date:"d/m/Y"}}</td></tr></table>
+        {# <p><b>original_modification_date</b><br/>{{ds.original_modification_date|date:"d/m/Y"}}</p> #}
+    </div>
+    <div class="right_sheet">
+        <div id="tags_commands" style="float:left;width: 100%" >
+	        <div style="float:left;"><input type="radio" name="gr_validated{{ds.hda_id}}" id="not_validated" value="not_validated" {% if not ds.validated %}checked{% endif %} {% if valid == "2" %}disabled{% endif %} />En cours
+	        <input type="radio" name="gr_validated{{ds.hda_id}}" id="validated" value="validated" {% if ds.validated %}checked{% endif %} {% if valid == "2" %}disabled{% endif %} />Validé
+	        {% if ds.validated %}
+	        par {{ds.validator.username}} le {{ds.validation_date|date:"d/m/Y"}}
+	        {% endif %}
+	        </div>
+	        {% if valid != "2" %}
+	        <div style="float:right;" id="tags_actions">
+	          <span>Trier les tags : <input type="image" src="{{STATIC_URL}}hdabo/img/sort-descending.png" width="16" height="16" name="trier" id="tags_sort" /></span>
+	          <span>Ajouter un tag : <input type="text" name="wp_search" id="wp_search" size="35" /> <span id="ok_search" class="hand_cursor"><b>OK</b></span></span>
+	        </div>
+	        {% endif %}
+	        {% csrf_token %}
+	        <input type="hidden" name="datasheet_id" value="{{ds.hda_id}}" id="datasheet_id" />
+        </div>
+        <div id="tag_table_container" style="float:left; width: 100%">
+        {% include "partial/tag_table.html" %}
+        </div>
+    </div>
+</div>
+{% endblock %}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/templates/partial/tag_table.html	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,87 @@
+{% block tag_table %}
+	<table id="tag_table"><tr class="nodrop nodrag">
+        {% if ordered_tags %}<th>#</th>{% endif %}
+        {% if valid != "2" and ordered_tags %}
+        <th><img src="{{STATIC_URL}}hdabo/img/arrow_up_down.png"/></th>
+        {% endif %}
+        <th>id</th>
+        <th>label</th>
+        {% comment %}<th>original_label</th>{% endcomment %}
+        <th class="text_centered">Lien W</th>
+        <th class="text_centered">pLien W</th>
+        <th class="text_centered">Lien D</th>
+        <th>Catégorie</th>
+        {% if ordered_tags %}<th class="large_25 text_centered">Supprimer<br/>le lien W</th>{% endif %}
+        <th>Alias</th>
+        {% if ordered_tags %}<th class="large_25 text_centered">Retirer le tag</th>{% endif %}</tr>
+    {% if ordered_tags %}
+    	{# ordered_tags is a list of TaggedSheet #}
+        {% for t in ordered_tags %}
+            <tr class="imageline {% cycle 'hdabooddline' 'hdaboevenline' %}" id="{{forloop.counter}}">
+            <td>{{forloop.counter}}</td>
+            {% if valid != "2" %}
+            <td class="updown_td text_centered"><img src="{{STATIC_URL}}hdabo/img/arrow_up_down.png" class="updown" alt="updown" id={{t.tag.id}} pos="{{forloop.counter0}}"></td>
+            {% endif %}
+            <td>{{t.tag.id}}</td>
+            <td class="{{t.tag.url_status_text}} wikipediatag" id="{{t.tag.id}}" >{{t.tag.label}}</td>
+            {% comment %}<td>{{t.tag.original_label}}</td>{% endcomment %}
+            <td class="text_centered">
+	            {% if t.tag.wikipedia_url and t.tag.wikipedia_url != ""  %}
+	            <a href="{{t.tag.wikipedia_url}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/arrow_right.png" ></a>
+	            {% else %}
+	            <a href="http://fr.wikipedia.org/w/index.php?search={{t.tag.label}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/wikipedia_search.png" ></a>
+	            {% endif %}
+	        </td>
+	        <td class="text_centered">
+                {% if t.wikipedia_revision_id  %}
+                <a href="{{t.wikipedia_verion_permalink}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/clock_arrow.png" ></a>
+                {% else %}
+                &nbsp;
+                {% endif %}
+	        </td>
+	        <td class="text_centered">
+	            {% if t.tag.dbpedia_uri and t.tag.dbpedia_uri != ""  %}
+	            <a href="{{t.tag.dbpedia_uri}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/arrow_green_right.png" ></a>
+	            {% else %}
+	            &nbsp;
+	            {% endif %}
+            </td>
+            <td class="tag_category" id="{{t.tag.id}}">{% if t.tag.category %}{{ t.tag.category }}{% endif %}</td>
+            <td class="text_centered"><img src="{{STATIC_URL}}hdabo/img/red_cross.png" class="remove_wp_link" id="{{t.tag.id}}" alt="{{t.tag.label}}" /></td>
+            <td>{% if t.tag.alias %}{{t.tag.alias}}{% endif %}</td>
+            <td class="text_centered"><img src="{{STATIC_URL}}hdabo/img/tag_remove.png" class="remove_tag_from_list" id="{{t.tag.id}}" alt="{{t.tag.label}}" /></td></tr>
+        {% endfor %}
+    {% else %}
+    	{# ds is a DataSheet #}
+        {% for t in ds.tags.all %}
+            <tr class="imageline {% cycle 'hdabooddline' 'hdaboevenline' %}">
+            <td>{{t.id}}</td>
+            <td class="{{t.url_status_text}}">{{t.label}}</td>
+            {% comment %}<td>{{t.original_label}}</td>{% endcomment %}
+            <td class="text_centered">
+	            {% if t.wikipedia_url and t.wikipedia_url != ""  %}
+	            <a href="{{t.wikipedia_url}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/arrow_right.png" ></a>
+	            {% else %}
+	            <a href="http://fr.wikipedia.org/w/index.php?search={{t.label}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/wikipedia_search.png" ></a>
+	            {% endif %}
+	        </td>
+	        <td class="text_centered">
+                {% if t.wikipedia_revision_id  %}
+                <a href="{{t.wikipedia_verion_permalink}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/clock_arrow.png" ></a>
+                {% else %}
+                &nbsp;
+                {% endif %}
+            </td>	        
+	        <td class="text_centered">
+                {% if t.dbpedia_uri and t.dbpedia_uri != ""  %}
+                <a href="{{t.dbpedia_uri}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/arrow_green_right.png" ></a>
+                {% else %}
+                &nbsp;
+                {% endif %}
+            </td>
+            <td>{% if t.category %}{{ t.category }}{% endif %}</td>
+            <td>{% if t.alias %}{{ t.alias }}{% endif %}</td></tr>
+        {% endfor %}
+    {% endif %}
+    </table>
+{% endblock %}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/templates/registration/login.html	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,28 @@
+{% extends "hdabo_base.html" %}
+{% load i18n %}
+    {% block content %}
+    {{block.super}}
+    {% if form.errors %}
+        <p class="error">{% trans "Sorry, that's not a valid username or password." %}</p>
+    {% endif %}
+       <div class="span-24 last">
+         <form action="" method='post' id="login-form">
+             <div id="loginform_div" class="span-12">
+             {% csrf_token %}
+             <input type="hidden" name="next" value="{{ next }}" />
+             <div id="login_fields_list">
+             <table>
+             {{form.as_table}}
+             </table>
+             </div>
+             <div>
+                 <a href="{% url 'django.contrib.auth.views.password_reset'  %}" >{% trans "Forget password?" %}</a>
+             </div>
+             <div id="submitcontent-buttons-login" class="span-24 last">
+                 <button class="button"type="submit" value="login">{% trans "login" %}</button>
+             </div>
+             </div>
+         </form>
+     </div> 
+    {% endblock %}
+    
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/templates/search/indexes/hdabo/datasheet_text.txt	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,4 @@
+{{ object.title }}
+{{ object.description }}
+{{ object.tags_text }}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/templates/search/search.html	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,50 @@
+{% extends 'hdabo_base.html' %}
+
+{% block content %}
+    <h2>Recherche</h2>
+    
+    <div id="search_form">
+    <form method="get" action=".">
+        <table>
+            <tr>
+                <th><label for="id_q">Recherche&nbsp:</label></th>
+                <td><input type="text" name="q" id="id_q" value="{{query}}"></td>
+            </tr>            
+            <tr>
+                <td>&nbsp;</td>
+                <td>
+                    <input type="submit" value="Rechercher">
+                </td>
+            </tr>
+        </table>
+     </form>
+     </div>
+    <div id="search_results">
+        {% if query %}
+            <h3>Résultats</h3>
+            <div id="page_number">Page {{page.number}}/{{paginator.num_pages}}</div>
+            <table id="search_result">
+            {% for result in page.object_list %}
+                <tr>
+                    <th class="result_counter">{{forloop.counter0|add:page.start_index}}.</th>
+	                <td>
+	                    <a href="{{ result.object.get_absolute_url }}" class="result_link" >{{ result.object.title }}</a>
+	                </td>
+                </tr>
+            
+            {% empty %}
+                <tr><td>Pas de résultats.</td></tr>
+            {% endfor %}
+            </table>
+
+            {% if page.has_previous or page.has_next %}
+                <div id="search_prev_next">                    
+                    {% if page.has_previous %}<a href="?q={{ query }}&amp;page={{ page.previous_page_number }}">{% endif %}&laquo; Prec.{% if page.has_previous %}</a>{% endif %}
+                    |
+                    {% if page.has_next %}<a href="?q={{ query }}&amp;page={{ page.next_page_number }}">{% endif %}Suiv. &raquo;{% if page.has_next %}</a>{% endif %}
+                </div>
+            {% endif %}
+        {% endif %}
+    </div>
+
+{% endblock %}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/tests/__init__.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,3 @@
+from hdabo.tests.models import DatasheetTest
+
+#from hdabo.tests.sortedm2mfield import TestSortedFormField, TestSortedManyToManyField, TestStringReference
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/tests/models.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+
+from django.test import TestCase
+from hdabo.models import Datasheet
+
+
+class DatasheetTest(TestCase):
+    fixtures = ['datasheet_10']
+    
+    def setUp(self):
+        self.datasheet_instance = Datasheet.objects.get(hda_id='1608')
+    
+    def test_domains_text(self):
+        domains_text = self.datasheet_instance.domains_text
+        self.assertEqual(u"Arts du quotidien; Arts du visuel", domains_text)
+
+    def test_domains_list(self):
+        domains_list = self.datasheet_instance.domains_list
+        self.assertListEqual([u"Arts du quotidien", u"Arts du visuel"], domains_list)
+    
+    def test_tags_text(self):
+        tags_text = [s.strip() for s in self.datasheet_instance.tags_text.split(";")]
+        tags_text.sort()
+        self.assertListEqual(tags_text, [u'XIXe s.', u'XVIIIe s.', u'XVIIe s.', u'XVIe s.', u'affichage', u'affiche', u'afficheur', u'aménagement urbain', u'colonne Morris', u'mobilier urbain', u'ordonnance de François Ier', u'publicité'], "Tags list does not match")
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/urls.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,47 @@
+from django.conf.urls import patterns, include, url
+from django.contrib import admin
+from django.contrib.auth import urls as auth_url
+
+
+# Uncomment the next two lines to enable the admin:
+admin.autodiscover()
+
+urlpatterns = patterns('',
+    # Examples:
+    # url(r'^$', 'hdabo.views.home', name='home'),
+    # url(r'^hdabo/', include('hdabo.foo.urls')),
+
+    # Uncomment the admin/doc line below to enable admin documentation:
+    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
+
+    # Uncomment the next line to enable the admin:
+    url(r'^accounts/', include(auth_url)),
+    url(r'^logout/', 'django.contrib.auth.views.logout_then_login'),
+    url(r'^admin/', include(admin.site.urls)),
+    url(r'^search/', include('haystack.urls')),
+    url(r'^$', 'hdabo.views.home', name='home'),
+    url(r'^list/(?P<orga_id>[\w-]+)$', 'hdabo.views.list_for_orga', name='list_for_orga'),
+    url(r'^list/(?P<orga_id>[\w-]+)/(?P<valid>[\w-]+)/$', 'hdabo.views.list_for_orga', name='list_for_orga'),
+    url(r'^list/(?P<orga_id>[\w-]+)/(?P<valid>[\w-]+)/(?P<start_index>[\w-]+)/$', 'hdabo.views.list_for_orga', name='list_for_orga'),
+    url(r'^list/(?P<orga_id>[\w-]+)/(?P<valid>[\w-]+)/(?P<start_index>[\w-]+)/(?P<length>[\w-]+)/$', 'hdabo.views.list_for_orga', name='list_for_orga'),
+    url(r'^data$', 'hdabo.views.display_datasheet', name='display_datasheet'),
+    url(r'^data/(?P<ds_id>[\w-]+)$', 'hdabo.views.display_datasheet', name='display_datasheet'),
+    url(r'^tagupdown$', 'hdabo.views.tag_up_down'),
+    url(r'^removetagfromlist$', 'hdabo.views.remove_tag_from_list'),
+    url(r'^modifytag$', 'hdabo.views.modify_tag'),
+    url(r'^modifytagds$', 'hdabo.views.modify_tag_datasheet'),
+    url(r'^resetwpinfo$', 'hdabo.views.reset_wikipedia_info'),
+    url(r'^addtag$', 'hdabo.views.add_tag'),
+    url(r'^removewplink$', 'hdabo.views.remove_wp_link'),
+    url(r'^alltags/?$', 'hdabo.views.all_tags'),
+    url(r'^alltags/(?P<num_page>[\w-]+)/?$', 'hdabo.views.all_tags'),
+    url(r'^alltags/(?P<num_page>[\w-]+)/(?P<nb_by_page>[\w-]+)/?$', 'hdabo.views.all_tags'),
+    url(r'^alltags/(?P<num_page>[\w-]+)/(?P<nb_by_page>[\w-]+)/(?P<sort>[+-][\w]+)/?$', 'hdabo.views.all_tags'),
+    url(r'^alltags/(?P<num_page>[\w-]+)/(?P<nb_by_page>[\w-]+)/(?P<sort>[+-][\w]+)/(?P<searched>.*)/?$', 'hdabo.views.all_tags'),
+    url(r'^validatedatasheet$', 'hdabo.views.validate_datasheet'),
+    url(r'^validatedatasheet/(?P<ds_id>[\w-]+)$', 'hdabo.views.validate_datasheet'),
+    url(r'^validatedatasheet/(?P<ds_id>[\w-]+)/(?P<valid>[\w-]+)/$', 'hdabo.views.validate_datasheet'),
+    url(r'^updatetagalias$', 'hdabo.views.update_tag_alias'),
+    url(r'^updatetagcategory$', 'hdabo.views.update_tag_category'),
+    url(r'^ordertagsdatasheet$', 'hdabo.views.reorder_tag_datasheet'),
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/utils.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,374 @@
+# -*- coding: utf-8 -*-
+import collections
+import unicodedata
+import sys
+import math
+import codecs
+
+###
+# allow to declare a property as a decorator
+###
+def Property(func):
+    return property(**func())
+
+
+## {{{ http://code.activestate.com/recipes/576694/ (r7)
+
+KEY, PREV, NEXT = range(3)
+
+class OrderedSet(collections.MutableSet):
+
+    def __init__(self, iterable=None):
+        self.end = end = [] 
+        end += [None, end, end]         # sentinel node for doubly linked list
+        self.map = {}                   # key --> [key, prev, next]
+        if iterable is not None:
+            self |= iterable
+
+    def __len__(self):
+        return len(self.map)
+
+    def __contains__(self, key):
+        return key in self.map
+
+    def add(self, key):
+        if key not in self.map:
+            end = self.end
+            curr = end[PREV]
+            curr[NEXT] = end[PREV] = self.map[key] = [key, curr, end]
+
+    def discard(self, key):
+        if key in self.map:        
+            key, prev, next = self.map.pop(key)
+            prev[NEXT] = next
+            next[PREV] = prev
+
+    def __iter__(self):
+        end = self.end
+        curr = end[NEXT]
+        while curr is not end:
+            yield curr[KEY]
+            curr = curr[NEXT]
+
+    def __reversed__(self):
+        end = self.end
+        curr = end[PREV]
+        while curr is not end:
+            yield curr[KEY]
+            curr = curr[PREV]
+
+    def pop(self, last=True):
+        if not self:
+            raise KeyError('set is empty')
+        key = next(reversed(self)) if last else next(iter(self))
+        self.discard(key)
+        return key
+
+    def __repr__(self):
+        if not self:
+            return '%s()' % (self.__class__.__name__,)
+        return '%s(%r)' % (self.__class__.__name__, list(self))
+
+    def __eq__(self, other):
+        if isinstance(other, OrderedSet):
+            return len(self) == len(other) and list(self) == list(other)
+        return set(self) == set(other)
+
+    def __del__(self):
+        self.clear()                    # remove circular references
+
+            
+## end of http://code.activestate.com/recipes/576694/ }}}
+
+
+## {{{ http://code.activestate.com/recipes/576693/ (r9)
+# Backport of OrderedDict() class that runs on Python 2.4, 2.5, 2.6, 2.7 and pypy.
+# Passes Python2.7's test suite and incorporates all the latest updates.
+
+try:
+    from thread import get_ident as _get_ident
+except ImportError:
+    from dummy_thread import get_ident as _get_ident
+
+try:
+    from _abcoll import KeysView, ValuesView, ItemsView
+except ImportError:
+    pass
+
+
+class OrderedDict(dict):
+    'Dictionary that remembers insertion order'
+    # An inherited dict maps keys to values.
+    # The inherited dict provides __getitem__, __len__, __contains__, and get.
+    # The remaining methods are order-aware.
+    # Big-O running times for all methods are the same as for regular dictionaries.
+
+    # The internal self.__map dictionary maps keys to links in a doubly linked list.
+    # The circular doubly linked list starts and ends with a sentinel element.
+    # The sentinel element never gets deleted (this simplifies the algorithm).
+    # Each link is stored as a list of length three:  [PREV, NEXT, KEY].
+
+    def __init__(self, *args, **kwds):
+        '''Initialize an ordered dictionary.  Signature is the same as for
+        regular dictionaries, but keyword arguments are not recommended
+        because their insertion order is arbitrary.
+
+        '''
+        if len(args) > 1:
+            raise TypeError('expected at most 1 arguments, got %d' % len(args))
+        try:
+            self.__root
+        except AttributeError:
+            self.__root = root = []                     # sentinel node
+            root[:] = [root, root, None]
+            self.__map = {}
+        self.__update(*args, **kwds)
+
+    def __setitem__(self, key, value, dict_setitem=dict.__setitem__):
+        'od.__setitem__(i, y) <==> od[i]=y'
+        # Setting a new item creates a new link which goes at the end of the linked
+        # list, and the inherited dictionary is updated with the new key/value pair.
+        if key not in self:
+            root = self.__root
+            last = root[0]
+            last[1] = root[0] = self.__map[key] = [last, root, key]
+        dict_setitem(self, key, value)
+
+    def __delitem__(self, key, dict_delitem=dict.__delitem__):
+        'od.__delitem__(y) <==> del od[y]'
+        # Deleting an existing item uses self.__map to find the link which is
+        # then removed by updating the links in the predecessor and successor nodes.
+        dict_delitem(self, key)
+        link_prev, link_next, key = self.__map.pop(key)
+        link_prev[1] = link_next
+        link_next[0] = link_prev
+
+    def __iter__(self):
+        'od.__iter__() <==> iter(od)'
+        root = self.__root
+        curr = root[1]
+        while curr is not root:
+            yield curr[2]
+            curr = curr[1]
+
+    def __reversed__(self):
+        'od.__reversed__() <==> reversed(od)'
+        root = self.__root
+        curr = root[0]
+        while curr is not root:
+            yield curr[2]
+            curr = curr[0]
+
+    def clear(self):
+        'od.clear() -> None.  Remove all items from od.'
+        try:
+            for node in self.__map.itervalues():
+                del node[:]
+            root = self.__root
+            root[:] = [root, root, None]
+            self.__map.clear()
+        except AttributeError:
+            pass
+        dict.clear(self)
+
+    def popitem(self, last=True):
+        '''od.popitem() -> (k, v), return and remove a (key, value) pair.
+        Pairs are returned in LIFO order if last is true or FIFO order if false.
+
+        '''
+        if not self:
+            raise KeyError('dictionary is empty')
+        root = self.__root
+        if last:
+            link = root[0]
+            link_prev = link[0]
+            link_prev[1] = root
+            root[0] = link_prev
+        else:
+            link = root[1]
+            link_next = link[1]
+            root[1] = link_next
+            link_next[0] = root
+        key = link[2]
+        del self.__map[key]
+        value = dict.pop(self, key)
+        return key, value
+
+    # -- the following methods do not depend on the internal structure --
+
+    def keys(self):
+        'od.keys() -> list of keys in od'
+        return list(self)
+
+    def values(self):
+        'od.values() -> list of values in od'
+        return [self[key] for key in self]
+
+    def items(self):
+        'od.items() -> list of (key, value) pairs in od'
+        return [(key, self[key]) for key in self]
+
+    def iterkeys(self):
+        'od.iterkeys() -> an iterator over the keys in od'
+        return iter(self)
+
+    def itervalues(self):
+        'od.itervalues -> an iterator over the values in od'
+        for k in self:
+            yield self[k]
+
+    def iteritems(self):
+        'od.iteritems -> an iterator over the (key, value) items in od'
+        for k in self:
+            yield (k, self[k])
+
+    def update(*args, **kwds): #@NoSelf
+        '''od.update(E, **F) -> None.  Update od from dict/iterable E and F.
+
+        If E is a dict instance, does:           for k in E: od[k] = E[k]
+        If E has a .keys() method, does:         for k in E.keys(): od[k] = E[k]
+        Or if E is an iterable of items, does:   for k, v in E: od[k] = v
+        In either case, this is followed by:     for k, v in F.items(): od[k] = v
+
+        '''
+        if len(args) > 2:
+            raise TypeError('update() takes at most 2 positional '
+                            'arguments (%d given)' % (len(args),))
+        elif not args:
+            raise TypeError('update() takes at least 1 argument (0 given)')
+        self = args[0]
+        # Make progressively weaker assumptions about "other"
+        other = ()
+        if len(args) == 2:
+            other = args[1]
+        if isinstance(other, dict):
+            for key in other:
+                self[key] = other[key]
+        elif hasattr(other, 'keys'):
+            for key in other.keys():
+                self[key] = other[key]
+        else:
+            for key, value in other:
+                self[key] = value
+        for key, value in kwds.items():
+            self[key] = value
+
+    __update = update  # let subclasses override update without breaking __init__
+
+    __marker = object()
+
+    def pop(self, key, default=__marker):
+        '''od.pop(k[,d]) -> v, remove specified key and return the corresponding value.
+        If key is not found, d is returned if given, otherwise KeyError is raised.
+
+        '''
+        if key in self:
+            result = self[key]
+            del self[key]
+            return result
+        if default is self.__marker:
+            raise KeyError(key)
+        return default
+
+    def setdefault(self, key, default=None):
+        'od.setdefault(k[,d]) -> od.get(k,d), also set od[k]=d if k not in od'
+        if key in self:
+            return self[key]
+        self[key] = default
+        return default
+
+    def __repr__(self, _repr_running={}):
+        'od.__repr__() <==> repr(od)'
+        call_key = id(self), _get_ident()
+        if call_key in _repr_running:
+            return '...'
+        _repr_running[call_key] = 1
+        try:
+            if not self:
+                return '%s()' % (self.__class__.__name__,)
+            return '%s(%r)' % (self.__class__.__name__, self.items())
+        finally:
+            del _repr_running[call_key]
+
+    def __reduce__(self):
+        'Return state information for pickling'
+        items = [[k, self[k]] for k in self]
+        inst_dict = vars(self).copy()
+        for k in vars(OrderedDict()):
+            inst_dict.pop(k, None)
+        if inst_dict:
+            return (self.__class__, (items,), inst_dict)
+        return self.__class__, (items,)
+
+    def copy(self):
+        'od.copy() -> a shallow copy of od'
+        return self.__class__(self)
+
+    @classmethod
+    def fromkeys(cls, iterable, value=None):
+        '''OD.fromkeys(S[, v]) -> New ordered dictionary with keys from S
+        and values equal to v (which defaults to None).
+
+        '''
+        d = cls()
+        for key in iterable:
+            d[key] = value
+        return d
+
+    def __eq__(self, other):
+        '''od.__eq__(y) <==> od==y.  Comparison to another OD is order-sensitive
+        while comparison to a regular mapping is order-insensitive.
+
+        '''
+        if isinstance(other, OrderedDict):
+            return len(self) == len(other) and self.items() == other.items()
+        return dict.__eq__(self, other)
+
+    def __ne__(self, other):
+        return not self == other
+
+    # -- the following methods are only used in Python 2.7 --
+
+    def viewkeys(self):
+        "od.viewkeys() -> a set-like object providing a view on od's keys"
+        return KeysView(self)
+
+    def viewvalues(self):
+        "od.viewvalues() -> an object providing a view on od's values"
+        return ValuesView(self)
+
+    def viewitems(self):
+        "od.viewitems() -> a set-like object providing a view on od's items"
+        return ItemsView(self)
+## end of http://code.activestate.com/recipes/576693/ }}}
+
+def remove_accents(str):
+    nkfd_form = unicodedata.normalize('NFKD', unicode(str))
+    return u"".join([c for c in nkfd_form if not unicodedata.combining(c)])
+
+def normalize(str):
+    return remove_accents(str).lower().replace(u"œ",u"oe")
+
+def show_progress(current_line, total_line, label, width, writer=None):
+
+    if writer is None:
+        writer = sys.stdout
+        if sys.stdout.encoding is not None:
+            writer = codecs.getwriter(sys.stdout.encoding)(sys.stdout)
+
+    percent = (float(current_line) / float(total_line)) * 100.0
+
+    marks = math.floor(width * (percent / 100.0))
+    spaces = math.floor(width - marks)
+
+    loader = u'[' + (u'=' * int(marks)) + (u' ' * int(spaces)) + u']'
+        
+    s = u"%s %3d%% %*d/%d - %*s\r" % (loader, percent, len(str(total_line)), current_line, total_line, width, label[:width])
+    
+    writer.write(s) #takes the header into account
+    if percent >= 100:
+        writer.write("\n")
+    writer.flush()
+    
+    return writer
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/views.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,580 @@
+# -*- coding: utf-8 -*-
+
+from django.conf import settings
+from django.contrib.auth.decorators import login_required #@UnusedImport
+from django.core.paginator import Paginator
+from django.db import connection
+from django.db.models import Max, Count, Min
+from django.http import HttpResponseBadRequest
+from django.shortcuts import render_to_response, redirect
+from django.template import RequestContext
+from django.utils.http import urlquote
+from haystack.constants import DJANGO_ID
+from haystack.query import SearchQuerySet
+from hdabo.utils import OrderedDict, remove_accents, normalize
+from hdabo.wp_utils import (normalize_tag, query_wikipedia_title,
+    get_or_create_tag, process_tag, reorder_datasheet_tags)
+from models import Datasheet, Organisation, Tag, TagCategory, TaggedSheet
+from wikitools import wiki
+import django.utils.simplejson as json
+import re
+
+
+@login_required
+def home(request):
+    
+    orgas = Organisation.objects.all().order_by('name')
+
+    org_list = []
+    all_ds_mapping = dict([(res['organisation'], res['nb_all']) for res in Datasheet.objects.values("organisation").annotate(nb_all=Count("organisation"))])
+    validated_ds_mapping = dict([(res['organisation'], [res['nb_val'], res['first_id_val']]) for res in Datasheet.objects.filter(validated=True).values("organisation").annotate(nb_val=Count("organisation")).annotate(first_id_val=Min("id"))])
+    unvalidated_ds_mapping = dict([(res['organisation'], [res['nb_unval'], res['first_id_unval']]) for res in Datasheet.objects.filter(validated=False).values("organisation").annotate(nb_unval=Count("organisation")).annotate(first_id_unval=Min("id"))])
+    # We get the hda_id from the id
+    val_hda_ids = dict([(res.id, res.hda_id) for res in Datasheet.objects.filter(id__in=[v[1] for v in validated_ds_mapping.values()]).only("id", "hda_id")])
+    unval_hda_ids = dict([(res.id, res.hda_id) for res in Datasheet.objects.filter(id__in=[v[1] for v in unvalidated_ds_mapping.values()]).only("id", "hda_id")])
+    
+    for orga in orgas :
+        nb_all = all_ds_mapping.get(orga.id, 0)
+        duo_val = validated_ds_mapping.get(orga.id, [0, None])
+        nb_val = duo_val[0]
+        first_id_val = val_hda_ids.get(duo_val[1], None)
+        duo_unval = unvalidated_ds_mapping.get(orga.id, [0, None])
+        nb_unval = duo_unval[0]
+        first_id_unval = unval_hda_ids.get(duo_unval[1], None)
+        org_list.append({'organisation':orga, 'nb_all':nb_all, 'nb_val':nb_val, 'first_id_val':first_id_val, 'nb_unval':nb_unval, 'first_id_unval':first_id_unval})
+    
+    return render_to_response("organisation_list.html",
+                              {'organisations':org_list},
+                              context_instance=RequestContext(request))
+
+
+@login_required
+def display_datasheet(request, ds_id=None):
+    
+    if ds_id :
+        ds = Datasheet.objects.get(hda_id=ds_id)
+    
+    # In this function the context is given by the get parameters.
+    if "index" in request.GET :
+        try:
+            index = int(request.GET["index"])
+        except :
+            index = 0
+    else :
+        index = 0
+    if "nb_sheets" in request.GET :
+        try:
+            nb_sheets = int(request.GET["nb_sheets"])
+        except :
+            nb_sheets = None
+    else :
+        nb_sheets = None
+    # If there is tag parameter, it means that we display all the ds tagged by one particular tag
+    tag = None
+    if "tag" in request.GET :
+        tag = Tag.objects.get(id=int(request.GET["tag"]))
+        datasheets_qs = Datasheet.objects.filter(tags__in=[tag]).order_by("organisation__name", "original_creation_date").select_related("format")
+        # If tag is set and if ds_id is None, it means that we have to display the first ds
+        if not ds_id :
+            index = 0
+            ds = datasheets_qs[0]
+    else :
+        # The current list depends on the ds's validation state
+        datasheets_qs = Datasheet.objects.filter(organisation=ds.organisation).filter(validated=ds.validated).order_by("id").select_related("format")
+    # We calculate the number of sheets if necessary
+    if not nb_sheets :
+        nb_sheets = datasheets_qs.count()
+    
+    # We get only the prev/current/next sheets
+    if nb_sheets > 1 :
+        if index == 0 :
+            select_qs = datasheets_qs[:2]
+            prev_index = 0
+            prev_id = select_qs[0].hda_id
+            next_index = 1
+            next_id = select_qs[1].hda_id
+        elif index == (nb_sheets - 1) :
+            select_qs = datasheets_qs[nb_sheets - 2:]
+            prev_index = nb_sheets - 2
+            prev_id = select_qs[0].hda_id
+            next_index = nb_sheets - 1
+            next_id = select_qs[1].hda_id
+        else :
+            select_qs = datasheets_qs[index - 1:index + 2]
+            prev_index = index - 1
+            prev_id = select_qs[0].hda_id
+            next_index = index + 1
+            next_id = select_qs[2].hda_id
+    else :
+        prev_index = next_index = 0
+        prev_id = next_id = datasheets_qs[0].hda_id
+    
+    # We get the ORDERED tags if we display one sheet (case valid = 0 and 1)
+    ordered_tags = TaggedSheet.objects.filter(datasheet=ds).select_related("tag").order_by('order')
+    
+    displayed_index = index + 1;
+    zero_id = datasheets_qs[0].hda_id
+    last_index = max(nb_sheets - 1, 0)
+    last_id = datasheets_qs[last_index].hda_id
+    
+    return render_to_response("generic_sheet.html",
+                              {'ds':ds, 'orga_name':ds.organisation.name,
+                               'nb_sheets':nb_sheets, 'ordered_tags':ordered_tags,
+                               'zero_id':zero_id, 'prev_index':prev_index, 'prev_id':prev_id,
+                               'next_index':next_index, 'next_id':next_id,
+                               'last_index':last_index, 'last_id':last_id,
+                               'displayed_index':displayed_index, 'tag':tag, 'valid':ds.validated,
+                               'categories':json.dumps(get_categories())},
+                              context_instance=RequestContext(request))
+
+
+@login_required
+def list_for_orga(request, orga_id=None, valid=None, start_index=None):
+    
+    orga = Organisation.objects.get(id=orga_id)
+    orga_name = orga.name
+    
+    if start_index :
+        try:
+            start_index = int(start_index)
+        except :
+            start_index = 0
+    else :
+        start_index = 0
+    
+    # If valid = 0, we search unvalidated sheets
+    # If valid = 1, we search validated sheets
+    # If valid = 2, we search AND DISPLAY all sheets
+    datasheets_qs = Datasheet.objects.filter(organisation=orga).order_by("id").select_related("format")
+    
+    if valid == "1" :
+        # We count all the validated sheets
+        datasheets_qs = datasheets_qs.filter(validated=True)
+        # And select the current one
+        datasheets = [datasheets_qs[start_index]]
+    elif valid != "2":
+        valid = "0"
+        # We count all the validated sheets
+        datasheets_qs = datasheets_qs.filter(validated=False)
+        # And select the current one
+        datasheets = [datasheets_qs[start_index]]
+    else:
+        datasheets = datasheets_qs
+
+    nb_sheets = datasheets_qs.count()
+    
+    # We get the ORDERED tags if we display one sheet (case valid = 0 and 1)
+    ordered_tags = None
+    if valid != "2" :
+        ordered_tags = TaggedSheet.objects.filter(datasheet=datasheets[0]).select_related("tag").order_by('order')
+    
+    displayed_index = start_index + 1;
+    prev_index = max(start_index - 1, 0);
+    next_index = min(nb_sheets - 1, start_index + 1);
+    last_index = max(nb_sheets - 1, 0);
+    
+    return render_to_response("list_for_orga.html",
+                              {'datasheets':datasheets, 'orga_name':orga_name,
+                               'nb_sheets':nb_sheets, 'orga_id':orga_id, 'ordered_tags':ordered_tags,
+                               'prev_index':prev_index, 'next_index':next_index, 'last_index':last_index,
+                               'start_index':start_index, 'displayed_index':displayed_index, 'valid':valid,
+                               'categories':json.dumps(get_categories())},
+                              context_instance=RequestContext(request))
+
+
+@login_required
+def all_tags(request, num_page=None, nb_by_page=None, sort="+pop", searched=None):
+    
+    # If the view is asked after a form sent with post vars, it means that searched is a post var.
+    if u"searched" in request.POST :
+        searched = request.POST["searched"]
+        nb_by_page = settings.PAGINATION_DEFAULT_NB_BY_PAGE
+        num_page = 1
+    
+    # Get paginator and current page 
+    current_page, p, num_page, nb_by_page = get_current_page(num_page, nb_by_page, sort, searched)
+    
+    prev_page = max(num_page - 1, 1)
+    next_page = min(num_page + 1, p.num_pages)
+    last_page = p.num_pages
+    
+    
+    cursor = connection.cursor() #@UndefinedVariable
+    fl_list = []
+    try:
+        cursor.execute("select upper(substring(normalized_label from 1 for 1)) as fl from hdabo_tag group by fl order by fl;")
+    
+        for row in cursor:
+            new_char = remove_accents(row[0])
+            if new_char not in fl_list:
+                fl_list.append(new_char)
+    finally:
+        cursor.close()
+    
+    search_def = tuple([(c, urlquote(c + settings.SEARCH_STAR_CHARACTER)) for c in fl_list])
+    reverse_sort = ("-" if sort[0] == "+" else "+") + sort[1:]
+        
+    return render_to_response("all_tags.html",
+                              {'nb_total':p.count, 'tags':current_page.object_list, 'current_page':current_page,
+                               'prev_page':prev_page, 'next_page':next_page, 'last_page':last_page,
+                               'num_page':num_page, 'nb_by_page':nb_by_page, 'searched':searched,
+                               'categories':json.dumps(get_categories()),
+                               'search_def':search_def, 'sort':sort, 'reverse_sort': reverse_sort},
+                              context_instance=RequestContext(request))
+    
+
+@login_required
+def tag_up_down(request):
+    ds_id = request.POST["datasheet_id"]
+    # post vars new_order and old_order indicate the position (from 1) of the tag in the list.
+    # NB : it is different from the TagSheet.order in the database.
+    new_order = int(request.POST["new_order"]) - 1
+    old_order = int(request.POST["old_order"]) - 1
+    # First we get the datasheet's TaggedSheets (list to force evaluation)
+    ordered_tags = list(TaggedSheet.objects.filter(datasheet__hda_id=ds_id).order_by('order'))
+    # We change the moved TaggedSheets's order
+    new_ts_order = ordered_tags[new_order].order
+    moved_ts = ordered_tags[old_order]
+    moved_ts.order = new_ts_order
+    moved_ts.save()
+    # We move the TaggedSheets's order
+    if new_order > old_order :
+        # And we decrease the other ones
+        for i in range(old_order + 1, new_order + 1) :
+            ts = ordered_tags[i]
+            ts.order = ts.order - 1
+            ts.save()
+    else :
+        # And we increase the other ones
+        for i in range(new_order, old_order) :
+            ts = ordered_tags[i]
+            ts.order = ts.order + 1
+            ts.save()
+    ds = Datasheet.objects.get(hda_id=ds_id)
+    ds.manual_order = True
+    ds.save()
+    
+    return get_tag_table(request=request, ds_id=ds_id, valid=0)
+
+
+@login_required
+def get_tag_table(request=None, ds_id=None, valid=None):
+    
+    ordered_tags = TaggedSheet.objects.filter(datasheet__hda_id=ds_id).order_by('order')
+    
+    return render_to_response("partial/tag_table.html",
+                              {'ordered_tags':ordered_tags, 'valid':valid},
+                              context_instance=RequestContext(request))
+
+
+@login_required
+def get_all_tags_table(request, num_page=None, nb_by_page=None, sort="+pop", searched=None):
+    
+    current_page, p, num_page, nb_by_page = get_current_page(num_page, nb_by_page, sort, searched) #@UnusedVariable
+    reverse_sort = ("-" if sort[0] == "+" else "+") + sort[1:] 
+    
+    return render_to_response("partial/all_tags_table.html",
+                              {'tags':current_page.object_list, 'nb_by_page':nb_by_page, 'searched':searched, 'sort': sort, 'reverse_sort': reverse_sort},
+                              context_instance=RequestContext(request))
+
+
+def get_current_page(num_page=None, nb_by_page=None, sort="+pop", searched=None):
+    
+    base_queryset = Tag.objects
+    
+    if searched and searched != "" :
+        searched = normalize(searched.strip())
+        regex = "^%s$" % (re.escape(searched).replace(re.escape(settings.SEARCH_STAR_CHARACTER), ".*"))
+        base_queryset = base_queryset.filter(normalized_label__iregex=regex)
+
+    alltags = base_queryset.annotate(num_ds=Count('datasheet'))
+    
+    alltags = {
+        "+lab" : alltags.order_by('normalized_label', 'label'),
+        "-lab" : alltags.order_by('-normalized_label', '-label'),
+        "+pop" : alltags.order_by('-popularity', '-num_ds', 'normalized_label', 'label'),
+        "-pop" : alltags.order_by('popularity', 'num_ds', '-normalized_label', '-label'),
+    }.get(sort, alltags.order_by('-popularity', '-num_ds', 'normalized_label', 'label'))
+    
+    
+    # We build the paginator for the requested list
+    if nb_by_page :
+        try:
+            nb_by_page = int(nb_by_page)
+        except :
+            nb_by_page = settings.PAGINATION_DEFAULT_NB_BY_PAGE
+    else :
+        nb_by_page = settings.PAGINATION_DEFAULT_NB_BY_PAGE
+    if num_page :
+        try:
+            num_page = int(num_page)
+        except :
+            num_page = 1
+    else :
+        num_page = 1
+    p = Paginator(alltags, nb_by_page)
+    
+    #use the much simpler base query to have the count
+    p._count = base_queryset.count()
+    current_page = p.page(num_page)
+    
+    return current_page, p, num_page, nb_by_page
+
+
+@login_required
+def remove_tag_from_list(request=None):
+    
+    ds_id = request.POST["datasheet_id"]
+    tag_id = request.POST["tag_id"]
+    # First we get the datasheet's TaggedSheets
+    ds_tags = TaggedSheet.objects.filter(datasheet__hda_id=ds_id)
+    # We get the current TaggedSheet and we delete it
+    ts = ds_tags.filter(tag=Tag.objects.filter(id=tag_id))[0]
+    ts.delete()
+    
+    ds = Datasheet.objects.get(hda_id=ds_id)
+    ds.manual_order = True
+    ds.save()
+
+    return get_tag_table(request=request, ds_id=ds_id, valid=0)
+
+
+@login_required
+def modify_tag(request):
+
+    tag_id = request.POST["id"]
+    tag_label = request.POST["value"]
+        
+    tag = Tag.objects.get(id=tag_id)
+    
+    if tag.label != tag_label:
+
+        tag.label = tag_label
+        
+        site = wiki.Wiki(settings.WIKIPEDIA_API_URL) #@UndefinedVariable
+        wp_res = query_wikipedia_title(site, label=tag_label)
+        status, url, pageid, dbpedia_uri, revision_id = (wp_res['status'], wp_res['wikipedia_url'], wp_res['pageid'], wp_res["dbpedia_uri"], wp_res['revision_id'])
+
+        if status is not None:
+            tag.url_status = status
+
+        old_pageid = tag.wikipedia_pageid
+        
+        tag.wikipedia_url = url
+        tag.wikipedia_pageid = pageid            
+        tag.dbpedia_uri = dbpedia_uri 
+            
+        try:
+            tag.save()
+        except:
+            return  HttpResponseBadRequest(json.dumps({'error': 'duplicate_tag', 'message': u"Le tag %s (%s) existe déjà." % (tag_label, tag.original_label)}), mimetype="application/json")
+        
+        if old_pageid != pageid:
+            TaggedSheet.objects.filter(tag=tag).update(wikipedia_revision_id=revision_id)
+    
+    return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"], sort=request.POST["sort"], searched=request.POST["searched"])
+
+
+@login_required
+def modify_tag_datasheet(request):
+
+    tag_id = request.POST["id"]
+    tag_label = request.POST["value"]
+    ds_id = request.POST["datasheet_id"]
+        
+    tag = Tag.objects.get(id=tag_id)
+    
+    ds = Datasheet.objects.get(hda_id=ds_id)
+        
+    if tag.label != tag_label:
+        
+        if tag_label.lower() in [t.label.lower() for t in ds.tags.all()]:
+            return  HttpResponseBadRequest(json.dumps({'error': 'duplicate_tag', 'message': u"Le tag %s existe déjà pour cette fiche." % (tag_label)}), mimetype="application/json")
+
+        tag, revision_id, created = get_or_create_tag(tag_label) #@UnusedVariable
+
+        ts = TaggedSheet.objects.get(tag=tag_id, datasheet__hda_id=ds_id)
+        ts.tag = tag
+        ts.wikipedia_revision_id = revision_id
+        kwargs = {DJANGO_ID + "__exact": unicode(ds_id)}
+        results = SearchQuerySet().filter(title=tag_label).filter_or(description=tag_label).filter(**kwargs)
+        if len(results) > 0:
+            ts.index_note = results[0].score        
+
+        ts.save()
+        
+        ds.manual_order = True
+        ds.save()        
+    
+    return get_tag_table(request=request, ds_id=ds_id, valid=0)
+
+
+
+@login_required
+def reset_wikipedia_info(request):
+    # 2 cases : 
+    # - ordered tag for one datasheet : POST["datasheet_id"] is not null
+    # - all tags list : POST["datasheet_id"] is null and POST["num_page"] and POST["nb_by_page"] are not null
+    tag_id = request.POST["tag_id"]
+    
+    tag = Tag.objects.get(id=tag_id)
+    site = wiki.Wiki(settings.WIKIPEDIA_API_URL) #@UndefinedVariable
+    
+    tag.label = normalize_tag(tag.original_label)
+    
+    #reset tag info
+    tag.wikipedia_url = None
+    tag.wikipedia_pageid = None
+    
+    try:
+        process_tag(site, tag)
+    except:
+        return HttpResponseBadRequest(json.dumps({'error': 'duplicate_tag', 'message': u"La version sémantisée du tag %s (%s) existe déjà." % (tag.label, tag.original_label)}), mimetype="application/json")
+
+    
+    
+    if u"datasheet_id" in request.POST :
+        return get_tag_table(request=request, ds_id=request.POST["datasheet_id"], valid=0)
+    else :
+        return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"], sort=request.POST["sort"], searched=request.POST["searched"])
+
+
+@login_required
+def add_tag(request=None):
+    
+    ds_id = request.POST["datasheet_id"]
+    tag_label = request.POST["value"]
+    
+    ds = Datasheet.objects.get(hda_id=ds_id)
+    if tag_label.lower() in [t.label.lower() for t in ds.tags.all()]:
+        return  HttpResponseBadRequest(json.dumps({'error': 'duplicate_tag', 'message': u"Le tag %s existe déjà pour cette fiche." % (tag_label)}), mimetype="application/json")
+
+
+    tag, revision_id, created = get_or_create_tag(tag_label)    
+    # We put the tag at the bottom of the datasheet's tag list 
+    # if the tag is created or if the tag is not in the list
+    
+    list_ts = TaggedSheet.objects.filter(datasheet=ds)
+    if created or list_ts.filter(tag=tag).count() == 0 :
+        new_order = list_ts.aggregate(Max('order'))['order__max'] + 1
+        ts = TaggedSheet.objects.create(datasheet=ds, tag=tag, original_order=new_order, order=new_order, wikipedia_revision_id=revision_id)
+        ts.save()
+        ds.manual_order = True
+        ds.save()
+    
+    return get_tag_table(request=request, ds_id=ds_id, valid=0)
+
+
+@login_required
+def remove_wp_link(request=None):
+    # 2 cases : 
+    # - ordered tag for one datasheet : POST["datasheet_id"] is not null
+    # - all tags list : POST["datasheet_id"] is null and POST["num_page"] and POST["nb_by_page"] are not null
+    tag_id = request.POST["tag_id"]
+    tag = Tag.objects.get(id=tag_id)
+
+    
+    if u"datasheet_id" in request.POST :
+        #create another tag almost identical, without the W info
+        new_tag, created = Tag.objects.get_or_create(label=tag.label, original_label=tag.original_label, url_status=Tag.TAG_URL_STATUS_DICT['null_result'], #@UnusedVariable
+                                            defaults={'label':tag.label, 'original_label': tag.original_label, 'url_status':Tag.TAG_URL_STATUS_DICT['null_result'], 'wikipedia_url': None, 'wikipedia_pageid': None, 'dbpedia_uri': None, 'category':tag.category, 'alias':tag.alias, 'popularity':tag.popularity})
+        
+        TaggedSheet.objects.filter(tag=tag, datasheet__hda_id=request.POST["datasheet_id"]).update(tag=new_tag, wikipedia_revision_id=None)
+        
+    else:
+        
+        if Tag.objects.filter(label=tag.label, original_label=tag.original_label, url_status=Tag.TAG_URL_STATUS_DICT['null_result']).count() > 0:
+            return HttpResponseBadRequest(json.dumps({'error': 'duplicate_tag', 'message': u"La version désémantisée du tag %s (%s) existe déjà." % (tag.label, tag.original_label)}), mimetype="application/json")
+        tag.wikipedia_url = None
+        tag.wikipedia_pageid = None
+        tag.dbpedia_uri = None
+        tag.url_status = Tag.TAG_URL_STATUS_DICT['null_result']
+        tag.save()
+    
+        TaggedSheet.objects.filter(tag=tag).update(wikipedia_revision_id=None)
+    
+    if u"datasheet_id" in request.POST :
+        return get_tag_table(request=request, ds_id=request.POST["datasheet_id"], valid=0)
+    else :
+        return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"], sort=request.POST["sort"], searched=request.POST["searched"])
+
+
+@login_required
+def validate_datasheet(request=None, ds_id=None, valid=None):
+    # We set if valid is true of false, function of the url parameters
+    if valid == "1" or valid == "true" or not valid :
+        valid = True
+    else :
+        valid = False
+    # We validate or unvalidate the requester datasheet
+    
+    if request.user.is_authenticated():
+        user = request.user
+    else:
+        user = None
+    
+    ds = Datasheet.objects.get(hda_id=ds_id)
+    if valid :
+        ds.validate(user)
+    else :
+        ds.unvalidate()
+    ds.save()
+    
+    # If there are still some unvalidated/validated ds for the ds's orga, we display the first one
+    same_organisation_ds = Datasheet.objects.filter(organisation=ds.organisation).filter(validated=not valid)
+    if len(same_organisation_ds) > 0 :
+        return redirect('display_datasheet', ds_id=same_organisation_ds[0].hda_id)
+    else :
+        return redirect('home')
+    
+
+@login_required
+def update_tag_alias(request):
+    # 2 cases : 
+    # - ordered tag for one datasheet : POST["datasheet_id"] is not null
+    # - all tags list : POST["datasheet_id"] is null and POST["num_page"] and POST["nb_by_page"] are not null
+    tag_id = request.POST["id"]
+    tag_alias = request.POST["value"]
+    tag = Tag.objects.get(id=tag_id)
+    tag.alias = tag_alias
+    tag.save()
+    
+    if u"datasheet_id" in request.POST :
+        return get_tag_table(request=request, ds_id=request.POST["datasheet_id"], valid=0)
+    else :
+        return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"], sort=request.POST["sort"], searched=request.POST["searched"])
+    
+
+def get_categories():
+    # List of categories in an OrderedDict
+    categories = OrderedDict({"":""})
+    for c in TagCategory.objects.order_by('label') :
+        categories.update({c.label:c.label})
+    return categories
+    
+
+@login_required
+def update_tag_category(request):
+    
+    tag_id = request.POST["id"]
+    cat = request.POST["value"]
+    tag = Tag.objects.get(id=tag_id)
+    if cat and cat != "" :
+        tag.category = TagCategory.objects.get(label=cat)
+    else :
+        tag.category = None
+    tag.save()
+    
+    if u"datasheet_id" in request.POST :
+        return get_tag_table(request=request, ds_id=request.POST["datasheet_id"], valid=0)
+    else :
+        return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"], sort=request.POST["sort"], searched=request.POST["searched"])
+    
+@login_required
+def reorder_tag_datasheet(request):
+    
+    ds_id = request.REQUEST['datasheet_id']
+    ds = Datasheet.objects.get(hda_id=ds_id)
+    reorder_datasheet_tags(ds)
+    
+    return get_tag_table(request=request, ds_id=ds_id, valid=0)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/wp_utils.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,222 @@
+# -*- coding: utf-8 -*-
+from django.conf import settings
+from django.utils.http import urlquote
+from haystack.constants import DJANGO_ID
+from haystack.query import SearchQuerySet
+from hdabo.models import Tag, TaggedSheet
+from wikitools import api, wiki
+
+
+def normalize_tag(tag):
+    if len(tag) == 0:
+        return tag
+    tag = tag.strip()
+    tag = tag.replace("_", " ")
+    tag = " ".join(tag.split())
+    tag = tag[0].upper() + tag[1:]
+    return tag
+
+def urlize_for_wikipedia(label):
+    return urlquote(label.replace(" ", "_"))
+
+
+def __is_homonymie(page_dict):
+    for cat in page_dict.get(u"categories", []):
+        if u'Catégorie:Homonymie' in cat.get(u"title", u"") or u'Category:Disambiguation pages' in cat.get(u"title", u""):
+            return True
+    return False
+
+
+def query_wikipedia_title(site, label=None, pageid=None):
+    
+    params = {'action':'query', 'prop':'info|categories|langlinks', 'inprop':'url', 'lllimit':'500', 'cllimit':'500', 'rvprop':'ids'}
+        
+    if label:
+        params['titles'] = label
+    else:
+        params['pageids'] = pageid
+    wpquery = api.APIRequest(site, params) #@UndefinedVariable
+    
+    response = wpquery.query()
+    original_response = response
+    def return_null_result():
+        return { 'new_label': None, 'alternative_label': None, 'status': Tag.TAG_URL_STATUS_DICT["null_result"], 'wikipedia_url': None, 'pageid': None, 'alternative_wikipedia_url': None, 'alternative_pageid': None, 'dbpedia_uri': None, 'revision_id': None, 'response': response }
+    
+
+    query_dict = response['query']
+    # get page if multiple pages or none -> return Tag.null_result
+    pages = query_dict.get("pages", {})
+    if len(pages) > 1 or len(pages) == 0:
+        return return_null_result()
+    
+    page = pages.values()[0]
+    
+    if u"invalid" in page or u"missing" in page:
+        return return_null_result()
+
+    url = page.get(u'fullurl', None)
+    pageid = page.get(u'pageid', None)
+    new_label = page[u'title']
+    alternative_label = None
+    alternative_url = None
+    alternative_pageid = None
+    
+    if __is_homonymie(page):
+        status = Tag.TAG_URL_STATUS_DICT["homonyme"]
+    elif u"redirect" in page:
+        status = Tag.TAG_URL_STATUS_DICT["redirection"]
+    else:
+        status = Tag.TAG_URL_STATUS_DICT["match"]
+    
+    if status == Tag.TAG_URL_STATUS_DICT["redirection"]:
+        params['redirects'] = True
+        wpquery = api.APIRequest(site, params) #@UndefinedVariable    
+        response = wpquery.query()
+        query_dict = response['query']
+        pages = query_dict.get("pages", {})
+        #we know that we have at least one answer        
+        if len(pages) > 1 or len(pages) == 0:
+            return return_null_result()
+        page = pages.values()[0]
+        alternative_label = page.get('title', None)
+        alternative_url = page.get('fullurl', None)
+        alternative_pageid = page.get('pageid',None)
+        
+
+    revision_id = page.get('lastrevid', None)
+    
+    #process language to extract the english label
+    english_label = None
+    
+    if status == Tag.TAG_URL_STATUS_DICT['match'] or status == Tag.TAG_URL_STATUS_DICT['redirection']:
+        lang_links = page.get('langlinks', [])
+        for lang_info_dict in lang_links:
+            if lang_info_dict['lang'] == "en":
+                english_label = lang_info_dict["*"]
+                break
+    
+    if english_label and "#" not in english_label:
+        dbpedia_uri = settings.DBPEDIA_URI_TEMPLATE % (urlize_for_wikipedia(english_label))
+    else:
+        dbpedia_uri = None
+            
+
+    return { 'new_label': new_label, 'alternative_label': alternative_label, 'status': status, 'wikipedia_url': url, 'pageid': pageid, 'alternative_wikipedia_url': alternative_url, 'alternative_pageid': alternative_pageid, 'dbpedia_uri': dbpedia_uri, 'revision_id': revision_id, 'response': original_response }
+
+
+
+def get_or_create_tag(tag_label):
+    
+    tag_label_normalized = normalize_tag(tag_label)
+    # We get the wikipedia references for the tag_label
+    # We get or create the tag object
+    
+    tag = None
+    for t in Tag.objects.filter(label__iexact=tag_label_normalized):
+        if tag is None or t.url_status != Tag.TAG_URL_STATUS_DICT['null_result']:
+            tag = t
+            if tag.url_status != Tag.TAG_URL_STATUS_DICT['null_result']:
+                break
+ 
+    if tag is None:
+        tag = Tag(label=tag_label_normalized, original_label=tag_label)
+        created = True
+    else:
+        created = False
+    
+    site = wiki.Wiki(settings.WIKIPEDIA_API_URL) #@UndefinedVariable
+
+    if created:
+        wp_res = query_wikipedia_title(site, label=tag_label_normalized)
+        new_label = wp_res['new_label']
+        alternative_label= wp_res['alternative_label']
+        status = wp_res['status']
+        url = wp_res['wikipedia_url']
+        alternative_url = wp_res['alternative_wikipedia_url']
+        pageid = wp_res['pageid']
+        alternative_pageid = wp_res['alternative_pageid']
+        dbpedia_uri = wp_res["dbpedia_uri"]
+        wikipedia_revision_id = wp_res['revision_id']
+
+    
+        # We save the datas
+        if new_label is not None:
+            tag.label = new_label
+        if status is not None:
+            tag.url_status = status
+        tag.alternative_label = alternative_label
+        tag.alternative_wikipedia_url = alternative_url
+        tag.alternative_wikipedia_pageid = alternative_pageid
+        tag.wikipedia_url = url            
+        tag.wikipedia_pageid = pageid
+        tag.dbpedia_uri = dbpedia_uri 
+
+        tag.save()
+        
+    elif tag.wikipedia_pageid:
+        wp_res = query_wikipedia_title(site, pageid=tag.wikipedia_pageid)
+        wikipedia_revision_id = wp_res['revision_id']
+    else:
+        wikipedia_revision_id = None
+        
+        
+    return tag, wikipedia_revision_id, created
+
+def process_tag(site, tag, verbosity=0):
+    
+    wp_res = query_wikipedia_title(site, label=tag.label)
+    new_label = wp_res['new_label']
+    alternative_label= wp_res['alternative_label']
+    status =  wp_res['status']
+    url = wp_res['wikipedia_url']
+    alternative_url = wp_res['alternative_wikipedia_url']
+    pageid = wp_res['pageid']
+    alternative_pageid = wp_res['alternative_pageid']
+    response = wp_res['response']
+    dbpedia_uri =  wp_res["dbpedia_uri"]
+    revision_id = wp_res["revision_id"]
+    
+    if verbosity >= 2 :
+        print "response from query to %s with parameters %s :" % (site.apibase, repr(new_label))
+        print repr(response)
+    
+    prev_wikipedia_pageid = tag.wikipedia_pageid
+    
+    if new_label is not None:
+        tag.label = new_label
+    if status is not None:
+        tag.url_status = status
+    tag.wikipedia_url = url
+    tag.wikipedia_pageid = pageid
+    tag.dbpedia_uri = dbpedia_uri
+    tag.alternative_label = alternative_label
+    tag.alternative_wikipedia_url = alternative_url
+    tag.alternative_wikipedia_pageid = alternative_pageid
+        
+    tag.save()
+    
+    if prev_wikipedia_pageid != pageid:
+        TaggedSheet.objects.filter(tag=tag).update(wikipedia_revision_id=revision_id)
+
+
+def reorder_datasheet_tags(ds):
+    ts_list = []
+    for ts in ds.taggedsheet_set.all():
+        ts.index_note = 0
+        kwargs = {DJANGO_ID + "__exact": unicode(ds.pk)}
+
+        results = SearchQuerySet().filter(title=ts.tag.label).filter_or(description=ts.tag.label).filter(**kwargs)
+        if len(results) > 0:
+            ts.index_note += results[0].score
+            ts.save()
+
+        ts_list.append(ts)
+    ts_list.sort(key=lambda t: (-t.index_note, t.order))
+    for k, ts in enumerate(ts_list):
+        ts.order = k + 1
+        ts.save()
+    if ds.manual_order:
+        ds.manual_order = False
+        ds.save()
+
+    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/.htaccess.mod_wsgi.tmpl	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,20 @@
+
+SetEnv DJANGO_SETTINGS_MODULE hdalab.settings
+SetEnv PROJECT_PATH /Users/ymh/dev/workspace/hdabo/web
+SetEnv PYTHON_PATH /Users/ymh/dev/workspace/hdabo/virtualenv/web/env/hdabo/lib/python2.6/site-packages:/Applications/Dev/eclipse/plugins/org.python.pydev.debug_2.2.0.2011062419/pysrc/
+SetEnv PYDEV_DEBUG False
+
+Options ExecCGI FollowSymLinks
+SetHandler wsgi-script
+
+#if defined in global definition
+#defined with WSGIDaemonProcess 
+#WSGIProcessGroup platform
+
+RewriteEngine On
+RewriteCond %{REQUEST_FILENAME} !-f
+RewriteRule ^(.*)$ /~ymh/hdabo/hdalab/modwsgi.wsgi/$1 [QSA,PT,L]
+
+Header set Pragma "no-cache"
+Header set Cache-Control "no-cache"
+Header set Expires "-1"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/README.txt	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,47 @@
+== Inclusion géographique ==
+
+La migration 0007_geographic_inclusion crée les tables nécessaires
+
+Pour récupérer les informations d'inclusion géographique de DBpedia (nécessite le package python SparqlWrapper)
+    python manage.py query_geo_inclusion
+
+== Traitement du fichier countries.geo.json ==
+
+Le fichier a été téléchargé sur https://github.com/johan/world.geo.json/
+Afin de faire correspondre les labels des pays aux tags sémantisés, on applique le script
+    python manage.py geojson_transform <chemin/nom_du_fichier.geo.json>
+pour rajouter ces informations dans le fichier
+
+== Import des données Insee ==
+
+La migration 0008_datasheet_insee crée les tables nécessaires
+
+Il faut d'abord importer les fichiers donnant les coordonnées géographiques par code Insee dans la base.
+Le fichier data/villes.csv a été téléchargé sur http://www.pillot.fr/cartographe/fic_villes.php
+Il manque dans ce fichier quelques villes et les codes INSEE pour Paris, Marseille et Lyon n'incluent pas les arrondissements
+Les communes manquantes se trouvent dans additional_cities.csv
+Pour importer chacun de ces fichiers :
+    python manage.py import_insee_csv <chemin/nom_du_fichier.csv>
+
+Il faut ensuite importer les fichiers donnant la correspondance entre notices HDA (référencées par leur identifiant hda_id) et codes INSEE
+Celles-ci sont fournies dans un fichier Excel donné par Bertrand, que j'ai converti en CSV et corrigé. Il s'agit de data/hda_insee.csv
+Pour importer ce fichier:
+    python manage.py import_insee_hda_csv <chemin/nom_du_fichier.csv>
+    
+    
+=== Migration hdabo -> hdalab ===
+
+0) appliquer les migrations south
+1) lancement de la commande query_wikipedia_category
+2) lancement de la commande fill_tag_years
+3) lancement de la commande query_wikipedia
+4) lancement de la commande query_geo_inclusion
+5) lancement de la commande geo_json_transform
+6) lancement de la commande import_insee_csv
+7) lancement de la commande import_hda_insee_csv
+8) lancement de la commande query_category_inclusion
+
+Toutes ces actions sont echaînées dans la commande import_hdabo_db
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/__init__.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,17 @@
+# -*- coding: utf-8 -*-
+VERSION = (2, 22, 0, "final", 0)
+
+
+def get_version():
+    version = '%s.%s' % (VERSION[0], VERSION[1])
+    if VERSION[2]:
+        version = '%s.%s' % (version, VERSION[2])
+    if VERSION[3:] == ('alpha', 0):
+        version = '%s pre-alpha' % version
+    else:
+        if VERSION[3] != 'final':
+            version = '%s %s %s' % (version, VERSION[3], VERSION[4])
+    return version
+
+
+__version__ = get_version()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/config.py.tmpl	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,60 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Jan 26, 2012
+
+@author: ymh
+'''
+import os
+
+DEBUG = True
+TEMPLATE_DEBUG = DEBUG
+
+ADMINS = (
+    # ('Your Name', 'your_email@example.com'),
+)
+
+MANAGERS = ADMINS
+
+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.
+    }
+}
+
+BASE_DIR = os.path.dirname(os.path.abspath(__file__)).rstrip("/") + "/"
+BASE_URL = '/~ymh/hdabo/'
+WEB_URL = 'http://localhost'
+
+LOCALE_PATHS = ( os.path.join(BASE_DIR, 'locale',), )
+
+# Absolute filesystem path to the directory that will hold user-uploaded files.
+# Example: "/home/media/media.lawrence.com/media/"
+MEDIA_ROOT = os.path.abspath(BASE_DIR + "../static/media/")
+
+# URL that handles the media served from MEDIA_ROOT. Make sure to use a
+# trailing slash.
+# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
+MEDIA_URL = BASE_URL + "static/media/"
+
+# Absolute path to the directory static files should be collected to.
+# Don't put anything in this directory yourself; store your static files
+# in apps' "static/" subdirectories and in STATICFILES_DIRS.
+# Example: "/home/media/media.lawrence.com/static/"
+STATIC_ROOT = os.path.abspath(BASE_DIR + "../static/site/")
+
+# URL prefix for static files.
+# Example: "http://media.lawrence.com/static/"
+STATIC_URL = BASE_URL + "static/site/"
+
+# URL prefix for admin static files -- CSS, JavaScript and images.
+# Make sure to use a trailing slash.
+# Examples: "http://foo.com/static/admin/", "/static/admin/".
+ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'
+
+GOOGLE_ANALYTICS_CODE = None
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/django_wsgi.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,11 @@
+import os
+
+os.environ['DJANGO_SETTINGS_MODULE'] = 'hdalab.settings'
+ 
+import django.core.handlers.wsgi
+
+application = django.core.handlers.wsgi.WSGIHandler()
+
+if os.environ.get('PYDEV_DEBUG', "False").lower() in ["true", "1", "t"]:
+    import pydevd #@UnresolvedImport
+    pydevd.settrace(suspend=False)
Binary file src/hdalab/locale/de/LC_MESSAGES/django.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/locale/de/LC_MESSAGES/django.po	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,130 @@
+# 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.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-05-30 10:20-0500\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"
+"Language: \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"
+
+#: settings.py:40
+msgid "French"
+msgstr "Französisch"
+
+#: settings.py:41
+msgid "English"
+msgstr "Englisch"
+
+#: settings.py:42
+msgid "Italian"
+msgstr "Italienisch"
+
+#: settings.py:43
+msgid "German"
+msgstr "Deutsch"
+
+#: settings.py:44
+msgid "Spanish"
+msgstr "Spanisch"
+
+#: settings.py:45
+msgid "Japanese"
+msgstr "Japanisch"
+
+#: settings.py:46
+msgid "Chinese"
+msgstr "Chinesisch"
+
+#: templates/facettes.html:5 templates/facettes.html.py:42
+msgid "Recherche par facettes"
+msgstr "Suche nach Facetten"
+
+#: templates/facettes.html:55
+msgid "Partager la session"
+msgstr "Die Session teilen"
+
+#: templates/facettes.html:58
+msgid "En lecture seule"
+msgstr "Schreibgeschützt"
+
+#: templates/facettes.html:59
+msgid "En lecture-ecriture"
+msgstr "In Handschrift"
+
+#: templates/facettes.html:62
+msgid "Copier le lien"
+msgstr "Link kopieren"
+
+#: templates/facettes.html:67
+msgid "Mes vues :"
+msgstr "Meine Ansichten"
+
+#: templates/facettes.html:73
+msgid "Creer une vue sur des resultats de recherche"
+msgstr "Eine Ansicht über die Suchergebnisse schaffen"
+
+#: templates/facettes.html:74
+msgid "Creer une liste de notices"
+msgstr "Eine Hinweisliste schaffen"
+
+#: templates/facettes.html:82
+msgid "Filtres :"
+msgstr "Filter:"
+
+#: templates/facettes.html:100
+msgid "Gerer la vue"
+msgstr "Die Ansicht verwalten"
+
+#: templates/facettes.html:104
+msgid "Nom :"
+msgstr "Name:"
+
+#: templates/facettes.html:107
+msgid "Blocs visibles :"
+msgstr "Sichtbare Blöcke:"
+
+#: templates/facettes.html:112
+msgid "Pays"
+msgstr "Länder"
+
+#: templates/facettes.html:118
+msgid "Nuage de mots-cles"
+msgstr "Stichwortwolke"
+
+#: templates/facettes.html:125
+msgid "Information sur un mot-cle"
+msgstr "Information über ein Stichwort"
+
+#: templates/facettes.html:129
+msgid "Rechercher un tag"
+msgstr "Einen Tag suchen"
+
+#: templates/facettes.html:134
+msgid "translation_info"
+msgstr "Schnittstelle übersetzt von Mara Dumitru"
+
+#: templates/facettes.html:140
+msgid "Notes"
+msgstr "Notizen"
+
+#: templates/facettes.html:146
+msgid "Disciplines artistiques"
+msgstr "Künstlerische Disziplinen"
+
+#: templates/facettes.html:152
+msgid "Resultats de recherche"
+msgstr "Suchergebnisse"
+
+#: templates/completion.html:37
+msgid "Recherche par liste de completion"
+msgstr "Autovervollständigen Suche"
Binary file src/hdalab/locale/de/LC_MESSAGES/djangojs.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/locale/de/LC_MESSAGES/djangojs.po	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,121 @@
+# 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.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-06-01 09:09-0500\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"
+"Language: \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"
+
+#: static/hdalab/js/gomina.js:123
+msgid "contenu"
+msgid_plural "contenus"
+msgstr[0] "Inhalt"
+msgstr[1] "Inhalte"
+
+#: static/hdalab/js/gomina.js:123
+msgid "pour ce tag"
+msgstr "für diesen Tag"
+
+#: static/hdalab/js/gomina.js:261
+msgid "Toutes periodes"
+msgstr "Alle Zeitspannen"
+
+#: static/hdalab/js/gomina.js:263
+msgid "Periode&nbsp;:"
+msgstr "Zeitspanne:"
+
+#: static/hdalab/js/gomina.js:265
+msgid "a"
+msgstr "bis"
+
+#: static/hdalab/js/gomina.js:285
+msgid "Pays&nbsp;:"
+msgstr "Länder:"
+
+#: static/hdalab/js/gomina.js:294
+msgid "Tag&nbsp;:"
+msgstr "Tag:"
+
+#: static/hdalab/js/gomina.js:337
+msgid "Annotations"
+msgstr "Anmerkungen"
+
+#: static/hdalab/js/gomina.js:344 static/hdalab/js/gomina.js.c:394
+msgid "Annoter ce contenu"
+msgstr "Diesen Inhalt anmerken"
+
+#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:374
+msgid "Ajouter a {0}"
+msgstr "An {0} hinzufügen"
+
+#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:371
+msgid "Retirer de {0}"
+msgstr "Von {0} entfernen"
+
+#: static/hdalab/js/gomina.js:427
+msgid "notice"
+msgid_plural "notices"
+msgstr[0] "Hinweis"
+msgstr[1] "Hinweise"
+
+#: static/hdalab/js/gomina.js:539
+msgid ""
+"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
+msgstr ""
+"Die Inhaltsliste ist leer! Fügen Sie Inhalte hinzu um die Liste sie "
+"öffentlich bekannt zu machen!"
+
+#: static/hdalab/js/gomina.js:552 static/hdalab/js/gomina.js.c:855
+msgid "Gerer la vue"
+msgstr "Die Ansicht verwalten"
+
+#: static/hdalab/js/gomina.js:561 static/hdalab/js/gomina.js.c:866
+msgid "Annoter cette vue"
+msgstr "Diese Ansicht anmerken"
+
+#: static/hdalab/js/gomina.js:614
+msgid "Nouvelle session"
+msgstr "Neue Session"
+
+#: static/hdalab/js/gomina.js:620
+msgid "Mes resultats de recherche"
+msgstr "Meine Suchergebnisse"
+
+#: static/hdalab/js/gomina.js:621
+msgid "Ma liste"
+msgstr "Meine Liste"
+
+#: static/hdalab/js/gomina.js:632
+msgid "lecture seule"
+msgstr "Schreibgeschützt"
+
+#: static/hdalab/js/gomina.js:912 static/hdalab/js/gomina.js.c:920
+msgid "Comment souhaitez-vous nommer votre nouvelle vue ?"
+msgstr "Wie möchten Sie Ihre neue Ansicht nennen?"
+
+#: static/hdalab/js/gomina.js:912
+msgid "Nouveaux resultats de recherche"
+msgstr "Neue Suchergebnisse"
+
+#: static/hdalab/js/gomina.js:920
+msgid "Nouvelle liste"
+msgstr "Neue Liste"
+
+#: static/hdalab/js/completion.js:73
+msgid "Source&nbsp;: Wikipédia"
+msgstr "Quelle: Wikipedia"
+
+#: static/hdalab/js/completion.js:20
+msgid "Localisation&nbsp;:"
+msgstr "Standort:"
Binary file src/hdalab/locale/en/LC_MESSAGES/django.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/locale/en/LC_MESSAGES/django.po	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,130 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Yves-Marie Haussonne <ymh.work@gmail.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-05-30 10:20-0500\n"
+"PO-Revision-Date: 2012-03-09 02:10+0200\n"
+"Last-Translator: Yves-Marie Haussonne <ymh.work@gmail.com>\n"
+"Language-Team: IRI\n"
+"Language: en\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: Virtaal 0.7.0-mac-beta-1\n"
+
+#: settings.py:40
+msgid "French"
+msgstr "French"
+
+#: settings.py:41
+msgid "English"
+msgstr "English"
+
+#: settings.py:42
+msgid "Italian"
+msgstr "Italian"
+
+#: settings.py:43
+msgid "German"
+msgstr "German"
+
+#: settings.py:44
+msgid "Spanish"
+msgstr "Spanish"
+
+#: settings.py:45
+msgid "Japanese"
+msgstr "Japanese"
+
+#: settings.py:46
+msgid "Chinese"
+msgstr "Chinese"
+
+#: templates/facettes.html:5 templates/facettes.html.py:42
+msgid "Recherche par facettes"
+msgstr "Faceted search"
+
+#: templates/facettes.html:55
+msgid "Partager la session"
+msgstr "Share session"
+
+#: templates/facettes.html:58
+msgid "En lecture seule"
+msgstr "Read-only"
+
+#: templates/facettes.html:59
+msgid "En lecture-ecriture"
+msgstr "Read-write"
+
+#: templates/facettes.html:62
+msgid "Copier le lien"
+msgstr "Copy link"
+
+#: templates/facettes.html:67
+msgid "Mes vues :"
+msgstr "My views:"
+
+#: templates/facettes.html:73
+msgid "Creer une vue sur des resultats de recherche"
+msgstr "Create a view on search results"
+
+#: templates/facettes.html:74
+msgid "Creer une liste de notices"
+msgstr "Create datasheet list"
+
+#: templates/facettes.html:82
+msgid "Filtres :"
+msgstr "Filters:"
+
+#: templates/facettes.html:100
+msgid "Gerer la vue"
+msgstr "Manage view"
+
+#: templates/facettes.html:104
+msgid "Nom :"
+msgstr "Name:"
+
+#: templates/facettes.html:107
+msgid "Blocs visibles :"
+msgstr "Visible blocs:"
+
+#: templates/facettes.html:112
+msgid "Pays"
+msgstr "Countries"
+
+#: templates/facettes.html:118
+msgid "Nuage de mots-cles"
+msgstr "Keyword cloud"
+
+#: templates/facettes.html:125
+msgid "Information sur un mot-cle"
+msgstr "Keyword information"
+
+#: templates/facettes.html:129
+msgid "Rechercher un tag"
+msgstr "Tag search"
+
+#: templates/facettes.html:134
+msgid "translation_info"
+msgstr " "
+
+#: templates/facettes.html:140
+msgid "Notes"
+msgstr "Notes"
+
+#: templates/facettes.html:146
+msgid "Disciplines artistiques"
+msgstr "Artistic discipline"
+
+#: templates/facettes.html:152
+msgid "Resultats de recherche"
+msgstr "Search results"
+
+#: templates/completion.html:37
+msgid "Recherche par liste de completion"
+msgstr "Autocomplete Search"
Binary file src/hdalab/locale/en/LC_MESSAGES/djangojs.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/locale/en/LC_MESSAGES/djangojs.po	Tue Jun 17 10:25:33 2014 +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.
+# Yves-Marie Haussonne <ymh.work@gmail.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-06-01 09:09-0500\n"
+"PO-Revision-Date: 2012-03-09 02:04+0200\n"
+"Last-Translator: Yves-Marie Haussonne <ymh.work@gmail.com>\n"
+"Language-Team: IRI\n"
+"Language: en\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: Virtaal 0.7.0-mac-beta-1\n"
+
+#: static/hdalab/js/gomina.js:123
+msgid "contenu"
+msgid_plural "contenus"
+msgstr[0] "content"
+msgstr[1] "contents"
+
+#: static/hdalab/js/gomina.js:123
+msgid "pour ce tag"
+msgstr "for this tag"
+
+#: static/hdalab/js/gomina.js:261
+msgid "Toutes periodes"
+msgstr "All periods"
+
+#: static/hdalab/js/gomina.js:263
+msgid "Periode&nbsp;:"
+msgstr "Period:"
+
+#: static/hdalab/js/gomina.js:265
+msgid "a"
+msgstr "to"
+
+#: static/hdalab/js/gomina.js:285
+msgid "Pays&nbsp;:"
+msgstr "Country:"
+
+#: static/hdalab/js/gomina.js:294
+msgid "Tag&nbsp;:"
+msgstr "Tag:"
+
+#: static/hdalab/js/gomina.js:337
+msgid "Annotations"
+msgstr "Annotations"
+
+#: static/hdalab/js/gomina.js:344 static/hdalab/js/gomina.js.c:394
+msgid "Annoter ce contenu"
+msgstr "Annotate the content"
+
+#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:374
+msgid "Ajouter a {0}"
+msgstr "Add to {0}"
+
+#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:371
+msgid "Retirer de {0}"
+msgstr "Remove from {0}"
+
+#: static/hdalab/js/gomina.js:427
+msgid "notice"
+msgid_plural "notices"
+msgstr[0] "datasheet"
+msgstr[1] "datasheets"
+
+#: static/hdalab/js/gomina.js:539
+msgid ""
+"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
+msgstr "The content list is empty! Add contents to display the list!"
+
+#: static/hdalab/js/gomina.js:552 static/hdalab/js/gomina.js.c:855
+msgid "Gerer la vue"
+msgstr "Manage the view"
+
+#: static/hdalab/js/gomina.js:561 static/hdalab/js/gomina.js.c:866
+msgid "Annoter cette vue"
+msgstr "Annotate this view"
+
+#: static/hdalab/js/gomina.js:614
+msgid "Nouvelle session"
+msgstr "New Session"
+
+#: static/hdalab/js/gomina.js:620
+msgid "Mes resultats de recherche"
+msgstr "My search results"
+
+#: static/hdalab/js/gomina.js:621
+msgid "Ma liste"
+msgstr "My list"
+
+#: static/hdalab/js/gomina.js:632
+msgid "lecture seule"
+msgstr "read only"
+
+#: static/hdalab/js/gomina.js:912 static/hdalab/js/gomina.js.c:920
+msgid "Comment souhaitez-vous nommer votre nouvelle vue ?"
+msgstr "How do you want to name your new view ?"
+
+#: static/hdalab/js/gomina.js:912
+msgid "Nouveaux resultats de recherche"
+msgstr "New search results"
+
+#: static/hdalab/js/gomina.js:920
+msgid "Nouvelle liste"
+msgstr "New list"
+
+#: static/hdalab/js/completion.js:73
+msgid "Source&nbsp;: Wikipédia"
+msgstr "Source: Wikipedia"
+
+#: static/hdalab/js/completion.js:20
+msgid "Localisation&nbsp;:"
+msgstr "Location:"
Binary file src/hdalab/locale/es/LC_MESSAGES/django.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/locale/es/LC_MESSAGES/django.po	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,130 @@
+# 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.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-05-30 10:20-0500\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"
+"Language: \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"
+
+#: settings.py:40
+msgid "French"
+msgstr "Francés"
+
+#: settings.py:41
+msgid "English"
+msgstr "Inglés"
+
+#: settings.py:42
+msgid "Italian"
+msgstr "Italiano"
+
+#: settings.py:43
+msgid "German"
+msgstr "Alemán"
+
+#: settings.py:44
+msgid "Spanish"
+msgstr "Español"
+
+#: settings.py:45
+msgid "Japanese"
+msgstr "Japonés"
+
+#: settings.py:46
+msgid "Chinese"
+msgstr "Chino"
+
+#: templates/facettes.html:5 templates/facettes.html.py:42
+msgid "Recherche par facettes"
+msgstr "Búsqueda por facetas"
+
+#: templates/facettes.html:55
+msgid "Partager la session"
+msgstr "Compartir sesión"
+
+#: templates/facettes.html:58
+msgid "En lecture seule"
+msgstr "Lectura sola"
+
+#: templates/facettes.html:59
+msgid "En lecture-ecriture"
+msgstr "Lectura-escritura"
+
+#: templates/facettes.html:62
+msgid "Copier le lien"
+msgstr "Enlácenos"
+
+#: templates/facettes.html:67
+msgid "Mes vues :"
+msgstr "Mis vistas:"
+
+#: templates/facettes.html:73
+msgid "Creer une vue sur des resultats de recherche"
+msgstr "Crear una lista de los resultados de búsqueda"
+
+#: templates/facettes.html:74
+msgid "Creer une liste de notices"
+msgstr "Crear une lista de registros"
+
+#: templates/facettes.html:82
+msgid "Filtres :"
+msgstr "Filtros:"
+
+#: templates/facettes.html:100
+msgid "Gerer la vue"
+msgstr "Administrar la vista"
+
+#: templates/facettes.html:104
+msgid "Nom :"
+msgstr "Nombre:"
+
+#: templates/facettes.html:107
+msgid "Blocs visibles :"
+msgstr "bloques visibles:"
+
+#: templates/facettes.html:112
+msgid "Pays"
+msgstr "País"
+
+#: templates/facettes.html:118
+msgid "Nuage de mots-cles"
+msgstr "Nube de palabras clave"
+
+#: templates/facettes.html:125
+msgid "Information sur un mot-cle"
+msgstr "Información sobre una palabra llave"
+
+#: templates/facettes.html:129
+msgid "Rechercher un tag"
+msgstr "Buscar una etiqueta"
+
+#: templates/facettes.html:134
+msgid "translation_info"
+msgstr "Traducción de la interfaz en español por Roselyne Aliacar"
+
+#: templates/facettes.html:140
+msgid "Notes"
+msgstr "Notas"
+
+#: templates/facettes.html:146
+msgid "Disciplines artistiques"
+msgstr "Disciplinas artísticas"
+
+#: templates/facettes.html:152
+msgid "Resultats de recherche"
+msgstr "Resultados de búsqueda"
+
+#: templates/completion.html:37
+msgid "Recherche par liste de completion"
+msgstr "Busqueda con autocompletar"
Binary file src/hdalab/locale/es/LC_MESSAGES/djangojs.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/locale/es/LC_MESSAGES/djangojs.po	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,120 @@
+# 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.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-06-01 09:09-0500\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"
+"Language: \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"
+
+#: static/hdalab/js/gomina.js:123
+msgid "contenu"
+msgid_plural "contenus"
+msgstr[0] "contenido"
+msgstr[1] "contenidos"
+
+#: static/hdalab/js/gomina.js:123
+msgid "pour ce tag"
+msgstr "para esta etiqueta"
+
+#: static/hdalab/js/gomina.js:261
+msgid "Toutes periodes"
+msgstr "Todos períodos"
+
+#: static/hdalab/js/gomina.js:263
+msgid "Periode&nbsp;:"
+msgstr "Período&nbsp;:"
+
+#: static/hdalab/js/gomina.js:265
+msgid "a"
+msgstr "a"
+
+#: static/hdalab/js/gomina.js:285
+msgid "Pays&nbsp;:"
+msgstr "País&nbsp;:"
+
+#: static/hdalab/js/gomina.js:294
+msgid "Tag&nbsp;:"
+msgstr "Etiqueta&nbsp;:"
+
+#: static/hdalab/js/gomina.js:337
+msgid "Annotations"
+msgstr "Anotaciones"
+
+#: static/hdalab/js/gomina.js:344 static/hdalab/js/gomina.js.c:394
+msgid "Annoter ce contenu"
+msgstr "Anotar este contenido"
+
+#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:374
+msgid "Ajouter a {0}"
+msgstr "Añadir a {0}"
+
+#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:371
+msgid "Retirer de {0}"
+msgstr "Borrar {0}"
+
+#: static/hdalab/js/gomina.js:427
+msgid "notice"
+msgid_plural "notices"
+msgstr[0] "Registro"
+msgstr[1] "Registros"
+
+#: static/hdalab/js/gomina.js:539
+msgid ""
+"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
+msgstr ""
+"La lista de contenidos esta vacia! Añada contenidos (para ver la lista)!"
+
+#: static/hdalab/js/gomina.js:552 static/hdalab/js/gomina.js.c:855
+msgid "Gerer la vue"
+msgstr "Administrar la vista"
+
+#: static/hdalab/js/gomina.js:561 static/hdalab/js/gomina.js.c:866
+msgid "Annoter cette vue"
+msgstr "Anotar esta vista"
+
+#: static/hdalab/js/gomina.js:614
+msgid "Nouvelle session"
+msgstr "Iniciar sesión"
+
+#: static/hdalab/js/gomina.js:620
+msgid "Mes resultats de recherche"
+msgstr "Mis resultados de búsqueda"
+
+#: static/hdalab/js/gomina.js:621
+msgid "Ma liste"
+msgstr "Mi lista"
+
+#: static/hdalab/js/gomina.js:632
+msgid "lecture seule"
+msgstr "lectura sola"
+
+#: static/hdalab/js/gomina.js:912 static/hdalab/js/gomina.js.c:920
+msgid "Comment souhaitez-vous nommer votre nouvelle vue ?"
+msgstr "Como desea nombrar su nueva vista?"
+
+#: static/hdalab/js/gomina.js:912
+msgid "Nouveaux resultats de recherche"
+msgstr "Nuevos resultados de búsqueda"
+
+#: static/hdalab/js/gomina.js:920
+msgid "Nouvelle liste"
+msgstr "Nueva lista"
+
+#: static/hdalab/js/completion.js:73
+msgid "Source&nbsp;: Wikipédia"
+msgstr "Fuente: Wikipedia"
+
+#: static/hdalab/js/completion.js:20
+msgid "Localisation&nbsp;:"
+msgstr "Localización:"
Binary file src/hdalab/locale/fr/LC_MESSAGES/django.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/locale/fr/LC_MESSAGES/django.po	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,126 @@
+# 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.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-05-30 10:20-0500\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"
+"Language: \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"
+
+#: settings.py:40
+msgid "French"
+msgstr "Français"
+
+#: settings.py:41
+msgid "English"
+msgstr "Anglais"
+
+#: settings.py:42
+msgid "Italian"
+msgstr "Italien"
+
+#: settings.py:43
+msgid "German"
+msgstr "Allemand"
+
+#: settings.py:44
+msgid "Spanish"
+msgstr "Espagnol"
+
+#: settings.py:45
+msgid "Japanese"
+msgstr "Japonais"
+
+#: settings.py:46
+msgid "Chinese"
+msgstr "Chinois"
+
+#: templates/facettes.html:5 templates/facettes.html.py:42
+msgid "Recherche par facettes"
+msgstr "Recherche par facettes"
+
+#: templates/facettes.html:55
+msgid "Partager la session"
+msgstr "Partager la session"
+
+#: templates/facettes.html:58
+msgid "En lecture seule"
+msgstr "En lecture seule"
+
+#: templates/facettes.html:59
+msgid "En lecture-ecriture"
+msgstr "En lecture-écriture"
+
+#: templates/facettes.html:62
+msgid "Copier le lien"
+msgstr "Copier le lien"
+
+#: templates/facettes.html:67
+msgid "Mes vues :"
+msgstr "Mes vues :"
+
+#: templates/facettes.html:73
+msgid "Creer une vue sur des resultats de recherche"
+msgstr "Créer une vue sur des résultats de recherche"
+
+#: templates/facettes.html:74
+msgid "Creer une liste de notices"
+msgstr "Créer une liste de notices"
+
+#: templates/facettes.html:82
+msgid "Filtres :"
+msgstr "Filtres :"
+
+#: templates/facettes.html:100
+msgid "Gerer la vue"
+msgstr "Gérer la vue"
+
+#: templates/facettes.html:104
+msgid "Nom :"
+msgstr "Nom :"
+
+#: templates/facettes.html:107
+msgid "Blocs visibles :"
+msgstr "Blocs visibles :"
+
+#: templates/facettes.html:112
+msgid "Pays"
+msgstr "Pays"
+
+#: templates/facettes.html:118
+msgid "Nuage de mots-cles"
+msgstr "Nuage de mots-clés"
+
+#: templates/facettes.html:125
+msgid "Information sur un mot-cle"
+msgstr "Information sur un mot-clé"
+
+#: templates/facettes.html:129
+msgid "Rechercher un tag"
+msgstr "Rechercher un tag"
+
+#: templates/facettes.html:134
+msgid "translation_info"
+msgstr " "
+
+#: templates/facettes.html:140
+msgid "Notes"
+msgstr "Notes"
+
+#: templates/facettes.html:146
+msgid "Disciplines artistiques"
+msgstr "Disciplines artistiques"
+
+#: templates/facettes.html:152
+msgid "Resultats de recherche"
+msgstr "Résultats de recherche"
Binary file src/hdalab/locale/fr/LC_MESSAGES/djangojs.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/locale/fr/LC_MESSAGES/djangojs.po	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,120 @@
+# 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.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-06-01 09:09-0500\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"
+"Language: \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"
+
+#: static/hdalab/js/gomina.js:123
+msgid "contenu"
+msgid_plural "contenus"
+msgstr[0] "contenu"
+msgstr[1] "contenus"
+
+#: static/hdalab/js/gomina.js:123
+msgid "pour ce tag"
+msgstr "pour ce tag"
+
+#: static/hdalab/js/gomina.js:261
+msgid "Toutes periodes"
+msgstr "Toutes périodes"
+
+#: static/hdalab/js/gomina.js:263
+msgid "Periode&nbsp;:"
+msgstr "Période&nbsp;:"
+
+#: static/hdalab/js/gomina.js:265
+msgid "a"
+msgstr "à"
+
+#: static/hdalab/js/gomina.js:285
+msgid "Pays&nbsp;:"
+msgstr "Pays&nbsp;:"
+
+#: static/hdalab/js/gomina.js:294
+msgid "Tag&nbsp;:"
+msgstr ""
+
+#: static/hdalab/js/gomina.js:337
+msgid "Annotations"
+msgstr "Annotations"
+
+#: static/hdalab/js/gomina.js:344 static/hdalab/js/gomina.js.c:394
+msgid "Annoter ce contenu"
+msgstr "Annoter ce contenu"
+
+#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:374
+msgid "Ajouter a {0}"
+msgstr "Ajouter à {0}"
+
+#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:371
+msgid "Retirer de {0}"
+msgstr "Retirer de {0}"
+
+#: static/hdalab/js/gomina.js:427
+msgid "notice"
+msgid_plural "notices"
+msgstr[0] "notice"
+msgstr[1] "notices"
+
+#: static/hdalab/js/gomina.js:539
+msgid ""
+"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
+msgstr ""
+"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
+
+#: static/hdalab/js/gomina.js:552 static/hdalab/js/gomina.js.c:855
+msgid "Gerer la vue"
+msgstr "Gérer la vue"
+
+#: static/hdalab/js/gomina.js:561 static/hdalab/js/gomina.js.c:866
+msgid "Annoter cette vue"
+msgstr "Annoter cette vue"
+
+#: static/hdalab/js/gomina.js:614
+msgid "Nouvelle session"
+msgstr "Nouvelle session"
+
+#: static/hdalab/js/gomina.js:620
+msgid "Mes resultats de recherche"
+msgstr "Mes résultats de recherche"
+
+#: static/hdalab/js/gomina.js:621
+msgid "Ma liste"
+msgstr "Ma liste"
+
+#: static/hdalab/js/gomina.js:632
+msgid "lecture seule"
+msgstr "lecture seule"
+
+#: static/hdalab/js/gomina.js:912 static/hdalab/js/gomina.js.c:920
+msgid "Comment souhaitez-vous nommer votre nouvelle vue ?"
+msgstr "Comment souhaitez-vous nommer votre nouvelle vue ?"
+
+#: static/hdalab/js/gomina.js:912
+msgid "Nouveaux resultats de recherche"
+msgstr "Nouveaux résultats de recherche"
+
+#: static/hdalab/js/gomina.js:920
+msgid "Nouvelle liste"
+msgstr "Nouvelle liste"
+
+#: static/hdalab/js/completion.js:73
+msgid "Source&nbsp;: Wikipédia"
+msgstr "Source&nbsp;: Wikipédia"
+
+#: static/hdalab/js/completion.js:20
+msgid "Localisation&nbsp;:"
+msgstr "Localisation&nbsp;:"
Binary file src/hdalab/locale/it/LC_MESSAGES/django.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/locale/it/LC_MESSAGES/django.po	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,130 @@
+# 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.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-05-30 10:20-0500\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"
+"Language: \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"
+
+#: settings.py:40
+msgid "French"
+msgstr "Francese"
+
+#: settings.py:41
+msgid "English"
+msgstr "Inglese"
+
+#: settings.py:42
+msgid "Italian"
+msgstr "Italiano"
+
+#: settings.py:43
+msgid "German"
+msgstr "Tedesco"
+
+#: settings.py:44
+msgid "Spanish"
+msgstr "Spagnolo"
+
+#: settings.py:45
+msgid "Japanese"
+msgstr "Giapponese"
+
+#: settings.py:46
+msgid "Chinese"
+msgstr "Cinese"
+
+#: templates/facettes.html:5 templates/facettes.html.py:42
+msgid "Recherche par facettes"
+msgstr "Ricerca per campo"
+
+#: templates/facettes.html:55
+msgid "Partager la session"
+msgstr "Dividere la sessione"
+
+#: templates/facettes.html:58
+msgid "En lecture seule"
+msgstr "Solo lettura"
+
+#: templates/facettes.html:59
+msgid "En lecture-ecriture"
+msgstr "Lettura-scrittura"
+
+#: templates/facettes.html:62
+msgid "Copier le lien"
+msgstr "Copiare il link"
+
+#: templates/facettes.html:67
+msgid "Mes vues :"
+msgstr "Le mie vedute:"
+
+#: templates/facettes.html:73
+msgid "Creer une vue sur des resultats de recherche"
+msgstr "Creare una veduta su i risultati della ricerca"
+
+#: templates/facettes.html:74
+msgid "Creer une liste de notices"
+msgstr "Creare un elenco di informazioni"
+
+#: templates/facettes.html:82
+msgid "Filtres :"
+msgstr "Filtri:"
+
+#: templates/facettes.html:100
+msgid "Gerer la vue"
+msgstr "Gestire la veduta"
+
+#: templates/facettes.html:104
+msgid "Nom :"
+msgstr "Nome:"
+
+#: templates/facettes.html:107
+msgid "Blocs visibles :"
+msgstr "Blocchi visibili:"
+
+#: templates/facettes.html:112
+msgid "Pays"
+msgstr "Paese"
+
+#: templates/facettes.html:118
+msgid "Nuage de mots-cles"
+msgstr "Nucleo di parole chiave"
+
+#: templates/facettes.html:125
+msgid "Information sur un mot-cle"
+msgstr "Informazioni su una parola chiave"
+
+#: templates/facettes.html:129
+msgid "Rechercher un tag"
+msgstr "Cercare un tag"
+
+#: templates/facettes.html:134
+msgid "translation_info"
+msgstr "Traduzione dell'interfaccia informatica in italiano: Natalie Biet"
+
+#: templates/facettes.html:140
+msgid "Notes"
+msgstr "Note"
+
+#: templates/facettes.html:146
+msgid "Disciplines artistiques"
+msgstr "Discipline artistiche"
+
+#: templates/facettes.html:152
+msgid "Resultats de recherche"
+msgstr "Risultati della ricerca"
+
+#: templates/completion.html:37
+msgid "Recherche par liste de completion"
+msgstr "Ricerca con autocompletamento"
Binary file src/hdalab/locale/it/LC_MESSAGES/djangojs.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/locale/it/LC_MESSAGES/djangojs.po	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,121 @@
+# 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.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-06-01 09:09-0500\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"
+"Language: \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"
+
+#: static/hdalab/js/gomina.js:123
+msgid "contenu"
+msgid_plural "contenus"
+msgstr[0] "contenuto"
+msgstr[1] "contenuti"
+
+#: static/hdalab/js/gomina.js:123
+msgid "pour ce tag"
+msgstr "Per questo tag"
+
+#: static/hdalab/js/gomina.js:261
+msgid "Toutes periodes"
+msgstr "Qualsiasi periodo"
+
+#: static/hdalab/js/gomina.js:263
+msgid "Periode&nbsp;:"
+msgstr "periodo:"
+
+#: static/hdalab/js/gomina.js:265
+msgid "a"
+msgstr "al"
+
+#: static/hdalab/js/gomina.js:285
+msgid "Pays&nbsp;:"
+msgstr "Paese:"
+
+#: static/hdalab/js/gomina.js:294
+msgid "Tag&nbsp;:"
+msgstr "Tag:"
+
+#: static/hdalab/js/gomina.js:337
+msgid "Annotations"
+msgstr "Annotazioni"
+
+#: static/hdalab/js/gomina.js:344 static/hdalab/js/gomina.js.c:394
+msgid "Annoter ce contenu"
+msgstr "Annotare questo contenuto"
+
+#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:374
+msgid "Ajouter a {0}"
+msgstr "Aggiungere a {0}"
+
+#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:371
+msgid "Retirer de {0}"
+msgstr "Togliere da {0}"
+
+#: static/hdalab/js/gomina.js:427
+msgid "notice"
+msgid_plural "notices"
+msgstr[0] "informazion"
+msgstr[1] "informazioni"
+
+#: static/hdalab/js/gomina.js:539
+msgid ""
+"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
+msgstr ""
+"L'elenco dei contenuti è vuoto! Aggiungere dei contenuti per visualizzare "
+"l'elenco !"
+
+#: static/hdalab/js/gomina.js:552 static/hdalab/js/gomina.js.c:855
+msgid "Gerer la vue"
+msgstr "Gestire la veduta"
+
+#: static/hdalab/js/gomina.js:561 static/hdalab/js/gomina.js.c:866
+msgid "Annoter cette vue"
+msgstr "Annotare questa veduta"
+
+#: static/hdalab/js/gomina.js:614
+msgid "Nouvelle session"
+msgstr "Nuova sessione"
+
+#: static/hdalab/js/gomina.js:620
+msgid "Mes resultats de recherche"
+msgstr "La mia ricerca"
+
+#: static/hdalab/js/gomina.js:621
+msgid "Ma liste"
+msgstr "Il mio elenco"
+
+#: static/hdalab/js/gomina.js:632
+msgid "lecture seule"
+msgstr "solo lettura"
+
+#: static/hdalab/js/gomina.js:912 static/hdalab/js/gomina.js.c:920
+msgid "Comment souhaitez-vous nommer votre nouvelle vue ?"
+msgstr "Come volete chiamare la vostra nuova veduta ?"
+
+#: static/hdalab/js/gomina.js:912
+msgid "Nouveaux resultats de recherche"
+msgstr "Nuovi risultati di ricerca"
+
+#: static/hdalab/js/gomina.js:920
+msgid "Nouvelle liste"
+msgstr "Nuovo elenco"
+
+#: static/hdalab/js/completion.js:73
+msgid "Source&nbsp;: Wikipédia"
+msgstr "Fonte: Wikipedia"
+
+#: static/hdalab/js/completion.js:20
+msgid "Localisation&nbsp;:"
+msgstr "Localizzazione:"
Binary file src/hdalab/locale/ja/LC_MESSAGES/django.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/locale/ja/LC_MESSAGES/django.po	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,127 @@
+# 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.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-03-20 11:21-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translamessage:%3C20120531030701.11087.qmail@ml.vector.co.jp%3Etor: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \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"
+
+#: settings.py:40
+msgid "French"
+msgstr "フランス語"
+
+#: settings.py:41
+msgid "English"
+msgstr "英語"
+
+#: settings.py:42
+msgid "Italian"
+msgstr "イタリア語"
+
+#: settings.py:43
+msgid "German"
+msgstr "ドイツ語"
+
+#: settings.py:44
+msgid "Spanish"
+msgstr "スペイン語"
+
+#: settings.py:45
+msgid "Japanese"
+msgstr "日本語"
+
+#: settings.py:46
+msgid "Chinese"
+msgstr "中国語"
+
+
+#: templates/facettes.html:5 templates/facettes.html.py:42
+msgid "Recherche par facettes"
+msgstr "ファセット検索"
+
+#: templates/facettes.html:55
+msgid "Partager la session"
+msgstr "このセッションを共有"
+
+#: templates/facettes.html:58
+msgid "En lecture seule"
+msgstr "読み出しのみ"
+
+#: templates/facettes.html:59
+msgid "En lecture-ecriture"
+msgstr "読み/書き"
+
+#: templates/facettes.html:62
+msgid "Copier le lien"
+msgstr "この行をコピー"
+
+#: templates/facettes.html:67
+msgid "Mes vues :"
+msgstr "マイ・ビュー:"
+
+#: templates/facettes.html:73
+msgid "Creer une vue sur des resultats de recherche"
+msgstr "検索結果から新規ビューを作る"
+
+#: templates/facettes.html:74
+msgid "Creer une liste de notices"
+msgstr "記事のリストを作る"
+
+#: templates/facettes.html:82
+msgid "Filtres :"
+msgstr "フィルター"
+
+#: templates/facettes.html:100
+msgid "Gerer la vue"
+msgstr "ビューの管理"
+
+#: templates/facettes.html:104
+msgid "Nom :"
+msgstr "名前:"
+
+#: templates/facettes.html:107
+msgid "Blocs visibles :"
+msgstr "可視ブロック:"
+
+#: templates/facettes.html:112
+msgid "Pays"
+msgstr "国名"
+
+#: templates/facettes.html:118
+msgid "Nuage de mots-cles"
+msgstr "キーワードクラウド"
+
+#: templates/facettes.html:125
+msgid "Information sur un mot-cle"
+msgstr "キーワードについての情報"
+
+#: templates/facettes.html:129
+msgid "Rechercher un tag"
+msgstr "タグを検索する"
+
+#: templates/facettes.html:134
+msgid "translation_info"
+msgstr "翻訳に関する情報"
+
+#: templates/facettes.html:140
+msgid "Notes"
+msgstr "注釈"
+
+#: templates/facettes.html:146
+msgid "Disciplines artistiques"
+msgstr "学術・芸術分野"
+
+#: templates/facettes.html:152
+msgid "Resultats de recherche"
+msgstr "検索結果"
Binary file src/hdalab/locale/ja/LC_MESSAGES/djangojs.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/locale/ja/LC_MESSAGES/djangojs.po	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,120 @@
+# 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.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-06-01 09:09-0500\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"
+"Language: \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"
+
+#: static/hdalab/js/gomina.js:123
+msgid "contenu"
+msgid_plural "contenus"
+msgstr[0] "個"
+msgstr[1] "個"
+
+#: static/hdalab/js/gomina.js:123
+msgid "pour ce tag"
+msgstr "のコンツンツがこのタグと関係"
+
+#: static/hdalab/js/gomina.js:261
+msgid "Toutes periodes"
+msgstr "すべての期間"
+
+#: static/hdalab/js/gomina.js:263
+msgid "Periode&nbsp;:"
+msgstr "期間:"
+
+#: static/hdalab/js/gomina.js:265
+msgid "a"
+msgstr "から"
+
+#: static/hdalab/js/gomina.js:285
+msgid "Pays&nbsp;:"
+msgstr "国名:"
+
+#: static/hdalab/js/gomina.js:294
+msgid "Tag&nbsp;:"
+msgstr "タグ:"
+
+#: static/hdalab/js/gomina.js:337
+msgid "Annotations"
+msgstr "注釈"
+
+#: static/hdalab/js/gomina.js:344 static/hdalab/js/gomina.js.c:394
+msgid "Annoter ce contenu"
+msgstr "このコンテンツに注釈をつける"
+
+#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:374
+msgid "Ajouter a {0}"
+msgstr "リストに追加 {0}"
+
+#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:371
+msgid "Retirer de {0}"
+msgstr "リストから取り除く {0}"
+
+#: static/hdalab/js/gomina.js:427
+msgid "notice"
+msgid_plural "notices"
+msgstr[0] "個の記事"
+msgstr[1] "個の記事"
+
+#: static/hdalab/js/gomina.js:539
+msgid ""
+"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
+msgstr ""
+"リストが空です。 リストを表示するにはコンテンツを1つ以上追加してください"
+
+#: static/hdalab/js/gomina.js:552 static/hdalab/js/gomina.js.c:855
+msgid "Gerer la vue"
+msgstr "ビューの管理"
+
+#: static/hdalab/js/gomina.js:561 static/hdalab/js/gomina.js.c:866
+msgid "Annoter cette vue"
+msgstr "このビューに注釈をつける"
+
+#: static/hdalab/js/gomina.js:614
+msgid "Nouvelle session"
+msgstr "新規セッション"
+
+#: static/hdalab/js/gomina.js:620
+msgid "Mes resultats de recherche"
+msgstr "マイ検索結果"
+
+#: static/hdalab/js/gomina.js:621
+msgid "Ma liste"
+msgstr "マイリスト"
+
+#: static/hdalab/js/gomina.js:632
+msgid "lecture seule"
+msgstr "読み出しのみ"
+
+#: static/hdalab/js/gomina.js:912 static/hdalab/js/gomina.js.c:920
+msgid "Comment souhaitez-vous nommer votre nouvelle vue ?"
+msgstr "新規ビューに名前を付けてください"
+
+#: static/hdalab/js/gomina.js:912
+msgid "Nouveaux resultats de recherche"
+msgstr "名称未設定の検索結果"
+
+#: static/hdalab/js/gomina.js:920
+msgid "Nouvelle liste"
+msgstr "名称未設定のリスト"
+
+#: static/hdalab/js/completion.js:73
+msgid "Source&nbsp;: Wikipédia"
+msgstr "ウィキペディア"
+
+#: static/hdalab/js/completion.js:20
+msgid "Localisation&nbsp;:"
+msgstr "Location:"
Binary file src/hdalab/locale/zh-tw/LC_MESSAGES/django.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/locale/zh-tw/LC_MESSAGES/django.po	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,127 @@
+# 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: 2012-05-30 10:20-0500\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"
+"Language: \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"
+
+#: settings.py:40
+msgid "French"
+msgstr "Français"
+
+#: settings.py:41
+msgid "English"
+msgstr "Anglais"
+
+#: settings.py:42
+msgid "Italian"
+msgstr ""
+
+#: settings.py:43
+msgid "German"
+msgstr "Allemand"
+
+#: settings.py:44
+msgid "Spanish"
+msgstr "Espagnol"
+
+#: settings.py:45
+msgid "Japanese"
+msgstr ""
+
+#: settings.py:46
+msgid "Chinese"
+msgstr ""
+
+#: templates/facettes.html:5 templates/facettes.html.py:42
+msgid "Recherche par facettes"
+msgstr "Recherche par facettes"
+
+#: templates/facettes.html:55
+msgid "Partager la session"
+msgstr "Partager la session"
+
+#: templates/facettes.html:58
+msgid "En lecture seule"
+msgstr "En lecture seule"
+
+#: templates/facettes.html:59
+msgid "En lecture-ecriture"
+msgstr "En lecture-écriture"
+
+#: templates/facettes.html:62
+msgid "Copier le lien"
+msgstr "Copier le lien"
+
+#: templates/facettes.html:67
+msgid "Mes vues :"
+msgstr "Mes vues :"
+
+#: templates/facettes.html:73
+msgid "Creer une vue sur des resultats de recherche"
+msgstr "Créer une vue sur des résultats de recherche"
+
+#: templates/facettes.html:74
+msgid "Creer une liste de notices"
+msgstr "Créer une liste de notices"
+
+#: templates/facettes.html:82
+msgid "Filtres :"
+msgstr "Filtres :"
+
+#: templates/facettes.html:100
+msgid "Gerer la vue"
+msgstr "Gérer la vue"
+
+#: templates/facettes.html:104
+msgid "Nom :"
+msgstr "Nom :"
+
+#: templates/facettes.html:107
+msgid "Blocs visibles :"
+msgstr "Blocs visibles :"
+
+#: templates/facettes.html:112
+msgid "Pays"
+msgstr "Pays"
+
+#: templates/facettes.html:118
+msgid "Nuage de mots-cles"
+msgstr "Nuage de mots-clés"
+
+#: templates/facettes.html:125
+msgid "Information sur un mot-cle"
+msgstr "Information sur un mot-clé"
+
+#: templates/facettes.html:129
+msgid "Rechercher un tag"
+msgstr "Rechercher un tag"
+
+#: templates/facettes.html:134
+msgid "translation_info"
+msgstr ""
+
+#: templates/facettes.html:140
+msgid "Notes"
+msgstr "Notes"
+
+#: templates/facettes.html:146
+msgid "Disciplines artistiques"
+msgstr "Disciplines artistiques"
+
+#: templates/facettes.html:152
+msgid "Resultats de recherche"
+msgstr "Résultats de recherche"
Binary file src/hdalab/locale/zh-tw/LC_MESSAGES/djangojs.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/locale/zh-tw/LC_MESSAGES/djangojs.po	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,118 @@
+# 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.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-06-01 09:09-0500\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"
+"Language: \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"
+
+#: static/hdalab/js/gomina.js:123
+msgid "contenu"
+msgid_plural "contenus"
+msgstr[0] "contenu"
+msgstr[1] "contenus"
+
+#: static/hdalab/js/gomina.js:123
+msgid "pour ce tag"
+msgstr "pour ce tag"
+
+#: static/hdalab/js/gomina.js:261
+msgid "Toutes periodes"
+msgstr "Toutes périodes"
+
+#: static/hdalab/js/gomina.js:263
+msgid "Periode&nbsp;:"
+msgstr "Période&nbsp;:"
+
+#: static/hdalab/js/gomina.js:265
+msgid "a"
+msgstr "à"
+
+#: static/hdalab/js/gomina.js:285
+msgid "Pays&nbsp;:"
+msgstr "Pays&nbsp;:"
+
+#: static/hdalab/js/gomina.js:294
+msgid "Tag&nbsp;:"
+msgstr ""
+
+#: static/hdalab/js/gomina.js:337
+msgid "Annotations"
+msgstr "Annotations"
+
+#: static/hdalab/js/gomina.js:344 static/hdalab/js/gomina.js.c:394
+msgid "Annoter ce contenu"
+msgstr "Annoter ce contenu"
+
+#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:374
+#, fuzzy
+msgid "Ajouter a {0}"
+msgstr "Ajouter à"
+
+#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:371
+#, fuzzy
+msgid "Retirer de {0}"
+msgstr "Retirer de"
+
+#: static/hdalab/js/gomina.js:427
+msgid "notice"
+msgid_plural "notices"
+msgstr[0] "notice"
+msgstr[1] "notices"
+
+#: static/hdalab/js/gomina.js:539
+msgid ""
+"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
+msgstr ""
+"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
+
+#: static/hdalab/js/gomina.js:552 static/hdalab/js/gomina.js.c:855
+msgid "Gerer la vue"
+msgstr "Gérer la vue"
+
+#: static/hdalab/js/gomina.js:561 static/hdalab/js/gomina.js.c:866
+msgid "Annoter cette vue"
+msgstr "Annoter cette vue"
+
+#: static/hdalab/js/gomina.js:614
+msgid "Nouvelle session"
+msgstr "Nouvelle session"
+
+#: static/hdalab/js/gomina.js:620
+msgid "Mes resultats de recherche"
+msgstr "Mes résultats de recherche"
+
+#: static/hdalab/js/gomina.js:621
+msgid "Ma liste"
+msgstr "Ma liste"
+
+#: static/hdalab/js/gomina.js:632
+msgid "lecture seule"
+msgstr "lecture seule"
+
+#: static/hdalab/js/gomina.js:912 static/hdalab/js/gomina.js.c:920
+msgid "Comment souhaitez-vous nommer votre nouvelle vue ?"
+msgstr "Comment souhaitez-vous nommer votre nouvelle vue ?"
+
+#: static/hdalab/js/gomina.js:912
+msgid "Nouveaux resultats de recherche"
+msgstr "Nouveaux résultats de recherche"
+
+#: static/hdalab/js/gomina.js:920
+msgid "Nouvelle liste"
+msgstr "Nouvelle liste"
+
+#: static/hdalab/js/completion.js:73
+msgid "Source&nbsp;: Wikipédia"
+msgstr "Source&nbsp;: Wikipédia"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/manage.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,15 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+from django.core.management import execute_manager
+import imp
+try:
+    imp.find_module('settings') # Assumed to be in the same directory.
+except ImportError:
+    import sys
+    sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n" % __file__)
+    sys.exit(1)
+
+import settings
+
+if __name__ == "__main__":
+    execute_manager(settings)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/management/commands/export_tags_csv.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,124 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Jan 25, 2012
+
+@author: ymh
+'''
+
+from django.core.management.base import BaseCommand, CommandError
+from django.db.models import Q
+from hdabo import utils
+from hdabo.models import Tag
+from optparse import make_option
+from hdalab.management.utils import UnicodeWriter
+
+class Command(BaseCommand):
+    '''
+    Command to export tags
+    '''
+    args = '<path_to_name_base_csv_file>'
+    options = '[-c|--category filter by category name] [-e|--encoding csv file encoding]'
+    help = """export csv files for hdabo
+Options:
+    -c, --category : filter by category
+    --lines : max number of lines to load (for each file). 0 means all.
+    --encoding : files encoding. default to latin-1"""
+    
+    option_list = BaseCommand.option_list + (
+        make_option("-c","--category",
+            action='append',
+            type='string',
+            dest='categories',
+            default=[],
+            help='filter tag by category (or)'),
+        make_option("-e","--encoding",
+            action='store',
+            type='string',
+            dest='encoding',
+            default="utf-8",
+            help='file encoding, default utf-8'),
+        make_option("-f","--force",
+            action='store_true',
+            dest='force',
+            default=False,
+            help='force file overwrite'),
+        )
+        
+    def handle(self, *args, **options):
+        
+        if len(args) == 0 or not args[0]:
+            raise CommandError("Gives at last one csv file to export")
+
+        self.encoding = options.get("encoding", "utf-8")
+        self.categories = options.get("categories", [])
+        self.force = options.get("force", False)
+        self.base_path = args[0].strip()
+        self.interactive = options.get("interactive",True)
+        
+        files_path = {
+            "visible" : { 'path':self.base_path + "_visible.txt",},
+            "hidden" : { 'path':self.base_path + "_hidden.txt",},
+            "infobox" : { 'path':self.base_path + "_infobox.txt",},
+        }
+        
+        try:
+            for filedef in files_path.values():
+                try:
+                    filedef['file'] = open(filedef['path'],'r')
+                    if (not self.force) and self.interactive:
+                        print filedef['path']
+                        resp = raw_input("export file already exists. override ? type yes to continue : ")
+                        if resp is not None and (resp.lower() == "yes" or resp.lower() == "y"):
+                            self.force = True
+                            # clear file
+                        else:
+                            return "error"
+                    elif not self.interactive and not self.force:
+                        print "Export file %s already exists. Exit." % (filedef['path'])
+                        return "error"
+
+                    filedef['file'].close()
+                    filedef['file'] = open(filedef['path'],'w')
+                except IOError:
+                    filedef['file'] = open(filedef['path'],'w')
+                
+                filedef['csv'] = UnicodeWriter(filedef['file'], doublequote=False, escapechar="\\", encoding=self.encoding)
+                
+            queryset = Tag.objects.exclude(wikipedia_pageid= None)
+            cat_filter = None
+            for cat in self.categories:
+                if cat_filter is None:
+                    cat_filter = Q(category__label = cat)
+                else:
+                    cat_filter = cat_filter | Q(category__label = cat)
+            if cat_filter is not None:
+                queryset = queryset.filter(cat_filter)
+            
+            tcount = queryset.count()
+            
+            print "Exporting %d tags" % (tcount)
+            writer = None
+                
+            for i,t in enumerate(queryset.order_by("label")):
+                
+                writer = utils.show_progress(i+1, tcount, t.label, 50, writer)
+                #normal category
+                row = [t.label,] + [cat.wp_category.label for cat in t.wp_categories.filter(hidden=False)]
+                files_path['visible']['csv'].writerow(row)
+                
+                #hidden category
+                row = [t.label,] + [cat.wp_category.label for cat in t.wp_categories.filter(hidden=True)]
+                files_path['hidden']['csv'].writerow(row)
+                
+                #infobox
+                for i in t.infoboxes.all():
+                    vec = [[p.param_name,p.param_value.replace('\n',"\\n")] for p in i.infoboxparameter_set.all()]
+                    ib_params = [num for elem in vec for num in elem]
+                    row = [t.label, i.name.strip()] + ib_params
+                    files_path['infobox']['csv'].writerow(row)
+            
+        finally:
+            for filedef in files_path.itervalues():
+                if filedef.get('file',None):
+                    filedef['file'].close()
+        
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/management/commands/export_wpcategory_csv.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,89 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Feb 2, 2012
+
+@author: ymh
+'''
+from django.core.management.base import BaseCommand, CommandError
+from optparse import make_option
+from hdalab.management.utils import UnicodeWriter
+from hdabo.wp_utils import normalize_tag
+from hdalab.models.categories import WpCategory
+from django.utils.http import urlquote
+from hdabo.utils import show_progress
+
+class Command(BaseCommand):
+    '''
+    Command to export tags
+    '''
+    args = '<path_to_csv_file>'
+    options = '[-e|--encoding csv file encoding]|[-f|--force force file overwrite]'
+    help = """export csv files for hdabo
+Options:
+    -e, --encoding : files encoding. default to latin-1
+    -f, --force : force file overwrite
+    """
+    
+    option_list = BaseCommand.option_list + (
+        make_option("-e","--encoding",
+            action='store',
+            type='string',
+            dest='encoding',
+            default="utf-8",
+            help='file encoding, default utf-8'),
+        make_option("-f","--force",
+            action='store_true',
+            dest='force',
+            default=False,
+            help='force file overwrite'),
+        )
+        
+    def handle(self, *args, **options):
+        
+        if len(args) == 0 or not args[0]:
+            raise CommandError("Gives at last one csv file to export")
+
+        self.encoding = options.get("encoding", "utf-8")
+        self.force = options.get("force", False)
+        self.path = args[0].strip()
+        self.interactive = options.get("interactive",True)
+
+        file = None        
+        try:
+            try:
+                file = open(self.path,'r')
+                if (not self.force) and self.interactive:
+                    print self.path
+                    resp = raw_input("export file already exists. override ? type yes to continue : ")
+                    if resp is not None and (resp.lower() == "yes" or resp.lower() == "y"):
+                        self.force = True
+                        # clear file
+                    else:
+                        return "error"
+                elif not self.interactive and not self.force:
+                    print "Export file %s already exists. Exit." % (self.path)
+                    return "error"
+    
+                file.close()
+                file = open(self.path,'w')
+            except IOError:
+                file = open(self.path,'w')
+        
+            csv = UnicodeWriter(file, doublequote=False, escapechar="\\", encoding=self.encoding)
+            writer = None
+            
+            qs = WpCategory.objects.filter(tagwpcategory__hidden=False).distinct()
+            
+            total = qs.count()
+            
+            for i,wpcat in enumerate(qs):
+                writer = show_progress(i+1, total, wpcat.label, 50, writer)
+                nb_ds = 0
+                for tag in wpcat.tagwpcategory_set.all():
+                    nb_ds += tag.tag.datasheet_set.count()
+                    
+                csv.writerow([wpcat.label, u"http://fr.wikipedia.org/wiki/Catégorie:%s" % urlquote(normalize_tag(wpcat.label)), nb_ds]) 
+
+        finally:
+            if file is not None:
+                file.close()
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/management/commands/fill_tag_years.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,53 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Jan 29, 2012
+
+@author: ymh
+'''
+from django.core.management.base import NoArgsCommand
+from django.core.management.color import no_style
+from hdabo.utils import show_progress
+import re
+from hdabo.models import Tag
+from hdalab.models import TagYears
+
+class Command(NoArgsCommand):
+    def handle_noargs(self, **options):
+        self.style = no_style()
+
+        qs = Tag.objects.filter(category__label="Datation")
+        total = qs.count()
+        dbptstart = len("http://dbpedia.org/resource/")
+        
+        writer = None
+        
+        for i,tag in enumerate(qs):
+            writer = show_progress(i+1, total, tag.label, 50, writer)
+            start = None
+            end = None
+            range = re.findall("^(Années )?(-?\d+)\-?(\d+)?( en France| au cinéma)?$", tag.label)
+            # S'il s'agit d'une année ou d'un ensemble d'années
+            if range:
+                start = int(range[0][1])
+                end = start
+                if range[0][0]:
+                    end = start + 10
+                if range[0][2]:
+                    end = int(range[0][2])
+            else:
+                if tag.dbpedia_uri:
+                    dbptitle = tag.dbpedia_uri[dbptstart:]
+                    # S'il s'agit d'un siècle, on se fie à l'URL DBpedia,
+                    # car les siècles y sont en chiffres arabes.
+                    century = re.findall("(\d+)(st|nd|rd|th)_century_?(BC)?", dbptitle)
+                    if century:
+                        val = int(century[0][0])
+                        if century[0][2] == 'BC':
+                            start = -100*val
+                        else:
+                            start = 1 + 100*(val-1)
+                        end = start + 100
+            
+            if start != None and end != None:
+                ty = TagYears.objects.create(tag=tag, start_year=start, end_year=end)
+                ty.save()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/management/commands/geojson_transform.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,109 @@
+# -*- coding: utf-8 -*-
+'''
+@author: raphv
+'''
+from django.core.management.base import BaseCommand, CommandError
+from django.utils.http import urlquote
+import django.utils.simplejson as json
+from SPARQLWrapper import SPARQLWrapper, JSON
+
+#import pydevd #@UnresolvedImport
+#pydevd.settrace(suspend=False)
+
+
+class Command(BaseCommand):
+    '''
+    Command to export tags
+    '''
+    args = '<path_to_geojson_file>'
+    options = ''
+    help = """Adds semantic data to countries.geo.json files"""
+        
+    def handle(self, *args, **options):
+
+        if len(args) == 0 or not args[0]:
+            raise CommandError("Give a Geo Json File to process")
+        
+        geojsonfile = args[0]
+        
+        f = open(geojsonfile,"r")
+        geojson = json.loads(f.read())
+        f.close()
+        
+        labels = [feature['properties']['name'] for feature in geojson['features']]
+        uris = dict([(label, 'http://dbpedia.org/resource/' + urlquote(label.replace(' ','_'))) for label in labels])
+        
+        uri_list = [uris[label] for label in uris]
+        base_uris = dict([(uris[label],uris[label]) for label in uris])
+        
+        grp = 10
+        endpoint = SPARQLWrapper("http://dbpedia.org/sparql")
+        endpoint.setReturnFormat(JSON)
+            
+        start = 0
+        while start < len(uri_list):
+            sparql = """
+                PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
+                SELECT ?source ?target
+                WHERE {
+                    ?source dbpedia-owl:wikiPageRedirects ?target .
+                    Filter (?source in (<%s>)) .
+                }
+            """ % '>, <'.join(uri_list[start:start + grp])
+            endpoint.setQuery(sparql)
+            results = endpoint.query().convert()
+            
+            for r in results["results"]["bindings"]:
+                source = r["source"]["value"]
+                target = r["target"]["value"]
+                base_uris[source] = target
+                #print "%s redirects to %s"%(source, target)
+            start += grp
+        
+        base_uri_list = [base_uris[uri] for uri in base_uris]
+        
+        french_labels = {}
+        labels = {}
+        
+        start = 0
+        while start < len(base_uri_list):
+            
+            sparql = """
+                PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
+                SELECT ?country ?label WHERE {
+                  ?country rdfs:label ?label .
+                  FILTER (?country in (<%s>))
+                }
+            """ % '>, <'.join(base_uri_list[start:start + grp])
+            
+            endpoint.setQuery(sparql)
+            results = endpoint.query().convert()
+            
+            print repr(results)
+            
+            for r in results["results"]["bindings"]:
+                country = r["country"]["value"]
+                label = r["label"]["value"]
+                if country not in labels:
+                    labels[country] = {}
+                labels[country][r["label"]["xml:lang"]] = label 
+                if r["label"]["xml:lang"] == 'fr':
+                    french_labels[country] = label
+                print "%s label: %s"%(country, label)
+            
+            start += grp
+        
+        for feature in geojson['features']:
+            base_uri = base_uris[uris[feature['properties']['name']]]
+            feature['properties']['dbpedia_uri'] = base_uri
+                        
+            if labels.has_key(base_uri):
+                feature['properties']['labels'] = labels[base_uri]
+            if french_labels.has_key(base_uri):
+                feature['properties']['label_fr'] = french_labels[base_uri]
+            else:
+                print "No label for %s"%base_uri
+        
+        f = open(geojsonfile,"w")
+        f.write(json.dumps(geojson))
+        f.close()
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/management/commands/import_hda_insee_csv.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,70 @@
+# -*- coding: utf-8 -*-
+'''
+@author: raphv
+'''
+from django.core.management.base import BaseCommand, CommandError
+import django.utils.simplejson as json
+from SPARQLWrapper import SPARQLWrapper, JSON
+from hdalab.models import InseeCoords, DatasheetExtras
+from hdabo.models import Datasheet
+import csv
+import re
+import sys
+
+class Command(BaseCommand):
+    '''
+    Command to export tags
+    '''
+    args = '<path_to_csv_file>'
+    options = ''
+    help = """Imports HDA Lab INSEE codes from a csv file"""
+        
+    def handle(self, *args, **options):
+
+        if len(args) == 0 or not args[0]:
+            raise CommandError("Give a CSV File to import")
+        
+        filename = args[0]
+        
+        csvfile = open(filename, "rb")
+        dialect = csv.Sniffer().sniff(csvfile.read(1024))
+        csvfile.seek(0)
+        reader = csv.reader(csvfile, dialect)
+        fieldstoget = [ 'id', 'insee' ]
+        
+        
+        for i,line in enumerate(reader):
+            if i == 0:
+                fields = {}
+                minlength = 0
+                for j,field in enumerate(line):
+                    for fieldname in fieldstoget:
+                        if re.search('(?i)%s' % fieldname, field):
+                            fields[fieldname] = j
+                            minlength = max(j,minlength)
+            else:
+                if len(line) > minlength:
+                    rawdata = dict([(k,line[v].strip()) for k,v in fields.iteritems()])
+                    # Traitement special pour la Corse
+                    insee = int(re.sub('^2(A|B)','20',rawdata['insee']))
+                        
+                    hda_id = int(rawdata['id'])
+                    
+                    try:
+                        datasheet = Datasheet.objects.get(hda_id=hda_id)
+                    except Datasheet.DoesNotExist:
+                        #print "Datasheet for id %d does not exist" % hda_id
+                        datasheet = None
+                    try:
+                        inseecoord = InseeCoords.objects.get(insee=insee)
+                    except InseeCoords.DoesNotExist:
+                        print "INSEE entry for Insee Code %d does not exist" % insee
+                        inseecoord = None
+                    
+                    if datasheet is not None and inseecoord is not None:
+                        dsextra, created = DatasheetExtras.objects.get_or_create(datasheet=datasheet, defaults={'insee':inseecoord})
+                        if not created:
+                            dsextra.insee = inseecoord
+                            dsextra.save()
+        
+        csvfile.close()
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/management/commands/import_hdabo_db.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,55 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Feb 28, 2012
+
+@author: ymh
+'''
+from django.core.management.base import BaseCommand
+from django.core.management import call_command
+from optparse import make_option
+import os.path
+
+
+class Command(BaseCommand):
+
+    args = "[<path to the data folder>]"
+    option_list = BaseCommand.option_list + (
+        make_option('-c', '--categories',
+            action='store_true',
+            dest='categories',
+            default=False,
+            help='load categories in db'),
+    )
+
+
+    def handle(self, *args, **options):        
+        
+        if len(args) == 0:
+            data_path = os.path.abspath(os.path.join(os.path.basename(__file__),'../../../../data'))
+        else:
+            data_path = args[0]
+        
+        print("===========  MIGRATE ===========")
+        call_command('syncdb', migrate=True)
+        if options.get('categories', False):
+            print("===========  QUERY WIKIPEDIA CATEGORY ===========")
+            call_command('query_wikipedia_category', interactive=False, force=True)
+
+        print("===========  QUERY DBPEDIA ===========")                
+        call_command('query_dbpedia', interactive=False, force=True)
+        print("===========  FILL TAG YEAR ===========")
+        call_command('fill_tag_years')
+        print("===========  GEOJSON TRANSFORM ===========")
+        call_command('geojson_transform', os.path.join(data_path,'countries.geo.json'))
+        print("===========  QUERY GEO INCLUSION ===========")
+        call_command('query_geo_inclusion')
+        print("===========  IMPORT INSEE CSV PASS 1 ===========")
+        call_command('import_insee_csv', os.path.join(data_path,'villes.csv'))
+        print("===========  IMPORT INSEE CSV PASS 2 ===========")
+        call_command('import_insee_csv', os.path.join(data_path,'additional_cities.csv'))
+        print("===========  IMPORT HDA INSEE CSV ===========")
+        call_command('import_hda_insee_csv', os.path.join(data_path,'HDA_Insee.csv'))
+        print("===========  QUERY CATEGORY INCLUSION ===========")
+        call_command('query_category_inclusion', all=True, force=True, interactive=False)
+        
+        
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/management/commands/import_insee_csv.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,59 @@
+# -*- coding: utf-8 -*-
+'''
+@author: raphv
+'''
+from django.core.management.base import BaseCommand, CommandError
+import django.utils.simplejson as json
+from SPARQLWrapper import SPARQLWrapper, JSON
+from hdalab.models import InseeCoords
+import csv
+import re
+import sys
+
+class Command(BaseCommand):
+    '''
+    Command to export tags
+    '''
+    args = '<path_to_csv_file>'
+    options = ''
+    help = """Imports Insee codes and geographic coordinates from a csv file"""
+        
+    def handle(self, *args, **options):
+
+        if len(args) == 0 or not args[0]:
+            raise CommandError("Give a CSV File to import")
+        
+        filename = args[0]
+        
+        csvfile = open(filename, "rb")
+        dialect = csv.Sniffer().sniff(csvfile.read(1024))
+        csvfile.seek(0)
+        reader = csv.reader(csvfile, dialect)
+        fieldstoget = [ 'ville', 'insee', 'latitude', 'longitude' ]
+        
+        for i,line in enumerate(reader):
+            if i == 0:
+                fields = {}
+                minlength = 0
+                for j,field in enumerate(line):
+                    for fieldname in fieldstoget:
+                        if re.search('(?i)%s' % fieldname, field):
+                            fields[fieldname] = j
+                            minlength = max(j,minlength)
+            else:
+                if len(line) > minlength:
+                    rawdata = dict([(k,line[v].strip()) for k,v in fields.iteritems()])
+                    #print "Processing line %d" % i
+                    #print rawdata
+                    try:
+                        latitude = float(rawdata['latitude'].replace(',','.'))
+                        longitude = float(rawdata['longitude'].replace(',','.')) if rawdata['longitude'] != '-' else 0
+                        insee = int(rawdata['insee'])
+                        ville = unicode(rawdata['ville'], 'iso-8859-1')
+                        
+                        InseeCoords.objects.get_or_create(insee=insee, city_name=ville, latitude=latitude, longitude=longitude)
+                        
+                    except:
+                        print line, "Error :", sys.exc_info()[1]
+        
+        csvfile.close()
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/management/commands/query_category_inclusion.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,167 @@
+# -*- coding: utf-8 -*-
+'''
+Created on July 2, 2012
+
+@author: raphv
+'''
+
+from django.conf import settings
+from django.core.management.base import NoArgsCommand
+from django.core.management.color import no_style
+from hdalab.models import WpCategory, WpCategoryInclusion
+from optparse import make_option
+from wikitools import api,wiki
+import sys
+import re
+import itertools
+from hdabo import utils
+from django.db.models import Count
+from django.db import transaction
+
+CATEGORY_PREFIX = u'Catégorie:'
+
+class Command(NoArgsCommand):
+    '''
+    query and update wikipedia for tag title.
+    '''
+    options = ''
+    help = """query and update wikipedia for tag title."""
+    
+    option_list = NoArgsCommand.option_list + (
+        make_option('--all',
+            action='store_true',
+            dest='all',
+            default=False,
+            help='force all categories to be updated, not only those not yet processed'),
+        make_option('--force',
+            action='store_true',
+            dest='force',
+            default=False,
+            help='ask no questions'),
+        make_option('--site',
+            action='store',
+            type='string',
+            dest='site_url',
+            default="http://fr.wikipedia.org/w/api.php",
+            help='the url for the wikipedia site'),
+        make_option('--limit',
+            action='store',
+            type='int',
+            dest='limit',
+            default= -1,
+            help='number of categories to process'),
+        make_option('--start',
+            action='store',
+            type='int',
+            dest='start',
+            default=0,
+            help='number of categories to ignore'),
+        make_option('--category',
+            action='append',
+            dest='category',
+            type='string',
+            default=[],
+            help='the categories to query'),
+
+    )
+
+
+    def query_all_categories(self, category_title, site):
+        
+        params = {'action':'query', 'cmtitle':category_title, 'list':'categorymembers', 'cmlimit': 'max'}
+        
+        res = []
+        
+        wpquery = api.APIRequest(site, params) #@UndefinedVariable
+        response = wpquery.query()
+        
+        if self.verbosity > 1:
+            print "Query category : " + repr(wpquery.request.get_full_url()+"?"+wpquery.request.get_data())
+            print repr(response)
+        
+        members = response.get('query', {}).get('categorymembers', [])
+                    
+        for member in members:
+            title = member.get('title',"")
+            if re.match(CATEGORY_PREFIX, title):
+                res.append(re.sub(CATEGORY_PREFIX, "", title))
+            
+        if self.verbosity > 1:
+            print "Query categories result: "
+            print repr(res)
+            
+        return res
+    
+    def process_categories(self, cat_list, parent_cat):
+        for cat in cat_list:
+            child_cat,created = WpCategory.objects.get_or_create(label=cat) #@UnusedVariable
+            WpCategoryInclusion.objects.get_or_create(parent_category=parent_cat, child_category=child_cat)
+        
+    def handle_noargs(self, **options):
+        
+        self.style = no_style()
+        
+        interactive = options.get('interactive', True)
+        
+        self.verbosity = int(options.get('verbosity', '1'))
+        
+        force = options.get('force', False)
+        
+        limit = options.get("limit", -1)
+        start = options.get("start", 0)
+        
+        site_url = options.get('site_url', settings.WIKIPEDIA_API_URL)
+        
+        types_mask = 0
+        
+        if self.verbosity > 2:
+            print "option passed : " + repr(options)
+
+        queryset = WpCategory.objects.filter(tags__hidden = False).distinct()
+        
+        cat_list = options.get("category", []);
+        
+        if cat_list:
+            queryset = queryset.filter(label__in=cat_list)
+        elif options.get('all',False):            
+            queryset = queryset.annotate(wpc=Count('child_categories')).filter(wpc = 0)                    
+        
+        queryset = queryset.order_by("label")
+        
+        if limit >= 0:
+            queryset = queryset[start:limit]
+        elif start > 0:
+            queryset = queryset[start:]            
+        
+        if self.verbosity > 2 :
+            print "Category Query is %s" % (queryset.query)
+        
+        site = wiki.Wiki(site_url) #@UndefinedVariable
+        
+        
+        count = queryset.count()
+        if self.verbosity > 1:
+            print "Processing %d categories" % (count)
+        
+        if not force and interactive:
+            confirm = raw_input("You have requested to query and replace the wikipedia information for %d categories.\n Are you sure you want to do this? \nType 'yes' to continue, or 'no' to cancel: " % (count))
+        else:
+            confirm = 'yes'
+            
+        if confirm != "yes":
+            print "wikipedia query cancelled"
+            return
+        
+        for i, category in enumerate(queryset):
+            
+            if self.verbosity > 1:
+                print "processing category %s (%d/%d)" % (category.label, i + 1, count)
+            else:
+                utils.show_progress(i + 1, count, category.label, 60)                            
+                
+            title = CATEGORY_PREFIX + category.label
+            # query categories
+
+            with transaction.commit_on_success():
+                res = self.query_all_categories(title, site)
+                self.process_categories(res, category)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/management/commands/query_dbpedia.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,205 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Jan 30, 2012
+
+@author: ymh
+'''
+
+from django.core.management.base import NoArgsCommand
+from django.core.management.color import no_style
+
+from optparse import make_option
+from django.conf import settings
+from django.db.models import Count
+from django.db import transaction
+from hdabo.models import Tag
+from hdalab.models import DbpediaFields, TagLinks
+from hdabo.utils import show_progress
+from rdflib.graph import Graph
+from rdflib import URIRef
+import traceback
+import sys
+from hdalab.models.dataviz import DbpediaFieldsTranslation
+from django import db
+from SPARQLWrapper import SPARQLWrapper, RDF
+
+class Command(NoArgsCommand):
+    '''
+    query and update wikipedia for tag title.
+    '''
+    options = ''
+    help = """query and update wikipedia for tag title."""
+    
+    option_list = NoArgsCommand.option_list + (
+        make_option('--all',
+            action='store_true',
+            dest='all',
+            default=False,
+            help='force all tags to be updated, not only those not yet processed'),
+        make_option('--force',
+            action='store_true',
+            dest='force',
+            default=False,
+            help='ask no questions'),
+        make_option('--random',
+            action='store_true',
+            dest='random',
+            default=False,
+            help='randomize query on tags'),
+        make_option('--limit',
+            action='store',
+            type='int',
+            dest='limit',
+            default= -1,
+            help='number of tag to process'),
+        make_option('--start',
+            action='store',
+            type='int',
+            dest='start',
+            default=0,
+            help='number of tag to ignore'),
+        make_option('--tag',
+            action='append',
+            dest='tags',
+            type='string',
+            default=[],
+            help='the tag to query'),
+    )
+    
+    def handle_noargs(self, **options):
+                
+        self.style = no_style()
+        
+        self.interactive = options.get('interactive', True)
+        
+        self.verbosity = int(options.get('verbosity', '1'))
+        
+        self.force = options.get('force', False)
+        
+        self.limit = options.get("limit", -1)
+        self.start = options.get("start", 0)
+        
+        self.random = options.get('random', False)
+                        
+        if self.verbosity > 2:
+            print "option passed : " + repr(options)
+
+        self.tag_list = options.get("tags", []);
+
+        queryset = Tag.objects.exclude(dbpedia_uri= None)
+        
+                
+        if self.tag_list:
+            queryset = queryset.filter(label__in=self.tag_list)
+        elif not options.get('all',False):            
+            queryset = queryset.annotate(dbfc=Count('dbpedia_fields')).filter(dbfc = 0)
+
+        if self.random:
+            queryset = queryset.order_by("?")
+        else:
+            queryset = queryset.order_by("label")
+        
+        if self.limit >= 0:
+            queryset = queryset[self.start:self.limit]
+        elif self.start > 0:
+            queryset = queryset[self.start:]
+        
+        if self.verbosity > 2 :
+            print "Tag Query is %s" % (queryset.query)
+
+        count = queryset.count()
+        
+        if count == 0:
+            print "No tag to query : exit."
+            return
+            
+            
+        if not self.force and self.interactive:
+            confirm = raw_input("You have requested to query and replace the dbpedia information for %d tags.\n Are you sure you want to do this? \nType 'yes' to continue, or 'no' to cancel: " % (count))
+        else:
+            confirm = 'yes'
+            
+        if confirm != "yes":
+            print "dbpedia query cancelled"
+            return
+
+        endpoint = SPARQLWrapper("http://dbpedia.org/sparql", returnFormat=RDF)
+
+        writer = None
+        for i,tag in enumerate(queryset):
+            writer = show_progress(i+1, count, tag.label, 50, writer)
+            db.reset_queries()
+            
+            #abstract query
+            #"select ?y
+            # where {<%s>  <http://dbpedia.org/ontology/abstract> ?y}" % (tag.dbpedia_uri)
+            
+            #rdf_uri = re.sub('\/resource\/', "/data/", tag.dbpedia_uri) + ".n3"            
+            #g = Graph()
+            try :
+                abstracts = {}
+                labels = {}
+                thumbnail = None
+                with transaction.commit_on_success():
+                    endpoint.setQuery("select distinct ?y where {<%s>  <http://dbpedia.org/ontology/abstract> ?y}" % (tag.dbpedia_uri))
+                    res_abstracts = endpoint.queryAndConvert()
+                    for _,_,o in res_abstracts.triples((None, URIRef('http://www.w3.org/2005/sparql-results#value'), None)):
+                        abstracts[o.language] = (unicode(o), True)
+
+                    endpoint.setQuery("select distinct ?y where {<%s>  <http://www.w3.org/2000/01/rdf-schema#label> ?y}" % (tag.dbpedia_uri))
+                    res_labels = endpoint.queryAndConvert()
+                    for _,_,o in res_labels.triples((None, URIRef('http://www.w3.org/2005/sparql-results#value'), None)):
+                        labels[o.language] = (unicode(o), True)
+                            
+                    endpoint.setQuery("select distinct ?y where {<%s>  <http://dbpedia.org/ontology/thumbnail> ?y} limit 1" % (tag.dbpedia_uri))
+                    res_thumbnails = endpoint.queryAndConvert()
+                    for _,_,o in res_thumbnails.triples((None, URIRef('http://www.w3.org/2005/sparql-results#value'), None)):
+                        thumbnail = unicode(o)
+
+                    endpoint.setQuery('select distinct ?y where { <%s> ?p ?y . FILTER regex(?y, "^http://dbpedia.org/resource")}' % (tag.dbpedia_uri))
+                    res_links = endpoint.queryAndConvert()
+                    for _,_,o in res_links.triples((None, URIRef('http://www.w3.org/2005/sparql-results#value'), None)):
+                        tagqs = Tag.objects.filter(dbpedia_uri=unicode(o))
+                        if tagqs:
+                            TagLinks.objects.get_or_create(subject=tag, object=tagqs[0])                        
+                    
+                    ref_label_lang, (ref_label, _) = ('fr',labels['fr']) if 'fr' in labels else ('en',labels['en']) if 'en' in labels else labels.items()[0] if len(labels) > 0 else ('fr',(tag.label, True))
+                    ref_abstract_lang, (ref_abstract, _) = ('fr',abstracts['fr']) if 'fr' in abstracts else ('en',abstracts['en']) if 'en' in abstracts else abstracts.items()[0] if len(abstracts) > 0 else ('fr',(None, 'True'))
+
+                    for lang in settings.LANGUAGES:
+                        if lang[0] not in labels:
+                            labels[lang[0]]= (ref_label, False)
+                        if lang[0] not in abstracts:
+                            abstracts[lang[0]] = (ref_abstract, False)
+
+                    dbfield , created = DbpediaFields.objects.get_or_create(dbpedia_uri=tag.dbpedia_uri,tag=tag, defaults={'abstract':ref_abstract, 'thumbnail':thumbnail, 'label':ref_label}) #@UndefinedVariable                    
+                    if not created:
+                        dbfield.abstract = ref_abstract
+                        dbfield.thumbnail = thumbnail
+                        dbfield.label = ref_label
+                        dbfield.save()
+                        DbpediaFieldsTranslation.objects.filter(master=dbfield).delete()
+
+                    consolidated_trans = {}
+                    for lang,label in labels.iteritems():
+                        consolidated_trans[lang] = [label,(ref_abstract, lang==ref_abstract_lang)]
+                    for lang,abstract in abstracts.iteritems():
+                        if lang in consolidated_trans:
+                            consolidated_trans[lang][1] = abstract
+                        else:
+                            consolidated_trans[lang] = [(ref_label, lang==ref_label_lang), abstract] 
+                         
+                    for lang, trans in consolidated_trans.iteritems():
+                        label, abstract = tuple(trans)
+                        DbpediaFieldsTranslation.objects.create(master=dbfield, language_code=lang, label=label[0], is_label_translated=label[1], abstract=abstract[0], is_abstract_translated=abstract[1])
+                    
+                    
+            except Exception as e:
+                print "\nError processing resource %s : %s" %(rdf_uri,unicode(e))
+                traceback.print_exception(type(e), e, sys.exc_info()[2])
+                
+
+
+            
+            
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/management/commands/query_geo_inclusion.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,61 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Feb 22, 2012
+
+@author: raphv
+'''
+
+from django.core.management.base import NoArgsCommand
+from django.core.management.color import no_style
+from hdabo.utils import show_progress
+from hdabo.models import Tag
+from hdalab.models import Country, GeoInclusion
+from SPARQLWrapper import SPARQLWrapper, JSON
+import re
+
+class Command(NoArgsCommand):
+    def handle_noargs(self, **options):
+        self.style = no_style()
+
+        qs = Tag.objects.filter(category__label="Localisation").exclude(dbpedia_uri = None)
+        total = qs.count()
+        
+        endpoint = SPARQLWrapper("http://dbpedia.org/sparql")
+        endpoint.setReturnFormat(JSON)
+        sparqltext = """
+            SELECT ?resource WHERE {
+             { <%s> ?resource <http://dbpedia.org/ontology/Country> . }
+            UNION
+             { <%s> <http://dbpedia.org/ontology/country> ?resource . }
+            }
+        """
+        resourceprefix = "http://dbpedia.org/resource/"
+        identityuri = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"
+        
+        writer = None
+        
+        for i,tag in enumerate(qs):
+            endpoint.setQuery(sparqltext % (tag.dbpedia_uri, tag.dbpedia_uri))
+    
+            results = endpoint.query().convert()['results']['bindings']
+            
+            if len(results) == 1: # We don't want places located in multiple countries
+                
+                resourceuri = results[0]['resource']['value']
+                
+                if re.match(resourceprefix, resourceuri):
+                    countrytxt = re.findall('([^/]+$)', resourceuri)[0]
+                    
+                    country, created = Country.objects.get_or_create(dbpedia_uri=resourceuri)
+                    GeoInclusion.objects.get_or_create(tag=tag, country=country)
+                    
+                if resourceuri == identityuri:
+                    countrytxt = '<is a country>'
+                    
+                    country, created = Country.objects.get_or_create(dbpedia_uri=tag.dbpedia_uri)
+                    GeoInclusion.objects.get_or_create(tag=tag, country=country)
+                
+            else:
+                countrytxt = '<unknown>'
+            
+            writer = show_progress(i+1, total, '%s => %s'%(tag.label, countrytxt), 50, writer)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/management/commands/query_wikipedia_category.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,396 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Jun 7, 2011
+
+@author: ymh
+'''
+
+from django.conf import settings
+from django.core.management.base import NoArgsCommand
+from django.core.management.color import no_style
+from hdabo.models import Tag
+from hdalab.models import WpCategory, TagWpCategory, TagInfobox, InfoboxParameter
+from optparse import make_option
+from wikitools import api,wiki
+import sys
+import re
+import itertools
+from hdabo import utils
+from django.db.models import Count
+from django.db import transaction
+
+
+TYPES_MASK_DICT = {
+        u'visible': 0b001,
+        u'hidden': 0b010,
+        u'infobox': 0b100,
+        u'all': 0b111,
+    }
+
+START_PATTERN = re.compile(u"\{\{\s?Infobox\s+([^|]+)", re.M|re.U|re.I)
+END_PATTERN = re.compile(u"\{\{|\}\}", re.M|re.U)
+SPLIT_PATTERN = re.compile("\s*?\|\s*([\w]+[^=|]*)\s*=", re.U|re.M)
+DELIMITER_PATTERN = re.compile("\{{2,3}|\}{2,3}|\[\[|\]\]|\[|\]")
+COMMENT_PATTERN = re.compile("<!--.*?-->",re.U|re.M)
+
+
+
+class Command(NoArgsCommand):
+    '''
+    query and update wikipedia for tag title.
+    '''
+    options = ''
+    help = """query and update wikipedia for tag title."""
+    
+    option_list = NoArgsCommand.option_list + (
+        make_option('--all',
+            action='store_true',
+            dest='all',
+            default=False,
+            help='force all tags to be updated, not only those not yet processed'),
+        make_option('--force',
+            action='store_true',
+            dest='force',
+            default=False,
+            help='ask no questions'),
+        make_option('--random',
+            action='store_true',
+            dest='random',
+            default=False,
+            help='randomize query on tags'),
+        make_option('--site',
+            action='store',
+            type='string',
+            dest='site_url',
+            default="http://fr.wikipedia.org/w/api.php",
+            help='the url for the wikipedia site'),
+        make_option('--limit',
+            action='store',
+            type='int',
+            dest='limit',
+            default= -1,
+            help='number of tag to process'),
+        make_option('--start',
+            action='store',
+            type='int',
+            dest='start',
+            default=0,
+            help='number of tag to ignore'),
+        make_option('--type',
+            action='append',
+            dest='types',
+            type='choice',
+            choices=['visible','hidden', 'infobox', 'all'],
+            default=[],
+            help='what type of query to perform : visible : visible categories, hidden : hidden categories, infobox: infoboxes, all: all of them. This option can be assed multiple times'),
+        make_option('--use-label',
+            action='store_true',
+            dest='use_label',
+            default=False,
+            help='use label instead of pageid to query wikipedia'),
+        make_option('--tag',
+            action='append',
+            dest='tags',
+            type='string',
+            default=[],
+            help='the tag to query'),
+
+    )
+    
+    
+#    def process_wp_response(self, label, response):        
+#
+#        query_dict = response['query']
+#        # get page if multiple pages or none -> return Tag.null_result
+#        pages = query_dict.get("pages", {})
+#        if len(pages) > 1 or len(pages) == 0:
+#            return None, Tag.TAG_URL_STATUS_DICT["null_result"], None, None
+#        
+#        page = pages.values()[0]
+#        
+#        if u"invalid" in page or u"missing" in page:
+#            return None, Tag.TAG_URL_STATUS_DICT["null_result"], None, None
+#
+#        url = page.get(u'fullurl', None)
+#        pageid = page.get(u'pageid', None)
+#        new_label = page[u'title']
+#        
+#        if self.__is_homonymie(page):
+#            status = Tag.TAG_URL_STATUS_DICT["homonyme"]
+#        elif u"redirect" in page:
+#            status = Tag.TAG_URL_STATUS_DICT["redirection"]
+#        else:
+#            status = Tag.TAG_URL_STATUS_DICT["match"]
+#        
+#        return new_label, status, url, pageid 
+
+    def query_all_categories(self, hidden, site, pageid, use_label):
+        
+        clshow = 'hidden' if hidden else '!hidden'
+        params = {'action':'query', 'titles' if use_label else 'pageids': pageid, 'prop':'categories', 'clshow': clshow}
+        
+        clcontinue = ""        
+        res = []
+        
+        while clcontinue is not None:
+            if clcontinue:
+                params['clcontinue'] = clcontinue
+                
+            wpquery = api.APIRequest(site, params) #@UndefinedVariable
+            response = wpquery.query()
+            
+            if self.verbosity > 1:
+                print "Query infoboxes : " + repr(wpquery.request.get_full_url()+"?"+wpquery.request.get_data())
+                print repr(response)
+
+            
+            query_dict = response.get('query', None)
+            
+            if query_dict is None:
+                return res
+            
+            pages = query_dict.get("pages", {})
+            if len(pages) > 1 or len(pages) == 0:
+                return res
+            
+            page = pages.values()[0]
+                        
+            for cat in page.get('categories',[]):
+                title = cat.get('title',"")
+                title = title[title.find(":")+1:]
+                if title and clcontinue != ("%s|%s" % (pageid,title)):
+                    res.append(title)
+            
+            clcontinue = response.get('query-continue', {}).get('categories',{}).get('clcontinue', None)
+
+        if self.verbosity > 1:
+            print "Query infoboxes RES: "
+            print repr(res)
+            
+        return res
+    
+    def process_categories(self, cat_list, hidden, tag):
+        
+        for cat in cat_list:
+            wp_cat,created = WpCategory.objects.get_or_create(label=cat) #@UnusedVariable
+            TagWpCategory.objects.get_or_create(tag=tag, wp_category=wp_cat, hidden=hidden)
+            
+                
+    def query_infoboxes(self, site, pageid, use_label):
+        
+        res = []
+        params = {'action':'query', 'titles' if use_label else 'pageids': pageid, 'prop':'revisions', 'rvprop': 'ids|content'}
+        wpquery = api.APIRequest(site, params) #@UndefinedVariable
+        response = wpquery.query()
+        
+        query_dict = response.get('query', None)
+            
+        if query_dict is None:
+            return res
+            
+        pages = query_dict.get("pages", {})
+        if len(pages) > 1 or len(pages) == 0:
+            return res
+
+        page = pages.values()[0]
+        
+        if 'revisions' not in page or not page['revisions']:
+            return res
+        
+        rev = page['revisions'][0]
+        
+        content = rev['*']
+                
+        start = 0
+        depth = 0
+        current_infobox_name = None
+        current_start = 0
+        
+        while start <= len(content):
+            if depth==0:
+                resm = START_PATTERN.search(content[start:])
+                if resm is None:
+                    break
+                depth = 1
+                current_start = resm.start()+start
+                start += resm.end()+1
+                current_infobox_name = resm.group(1)                    
+            else:
+                resm = END_PATTERN.search(content[start:])
+                if resm is None:
+                    break
+                if resm.group(0) == "{{":
+                    depth += 1
+                elif resm.group(0) == "}}":
+                    depth -= 1
+                if depth == 0:
+                    res.append((content[current_start:resm.end()+start], current_infobox_name))
+                start += resm.end()+1
+
+        return_val = (rev['revid'],res)
+        
+        if self.verbosity > 1:
+            print "Query infoboxes url: " + repr(wpquery.request.get_full_url()+"?"+wpquery.request.get_data())
+            print repr(return_val)
+        
+        return return_val
+    
+    def split_infoboxes(self, src):
+        
+        start = 0
+        previous_end = 0
+        split_indexes = []
+        delimiter_stack = []
+        while start<=len(src):            
+            resd = DELIMITER_PATTERN.search(src[start:])
+            ress = SPLIT_PATTERN.search(src[start:]) if len(delimiter_stack) == 0 else None
+            startd = resd.start() if resd is not None else sys.maxint
+            starts = ress.start() if ress is not None else sys.maxint
+            if starts < startd:
+                if len(split_indexes)>0:
+                    split_indexes.append((previous_end, ress.start(0)+start))
+                split_indexes.append((ress.start(1)+start, ress.end(1)+start))
+                start += ress.end(0)
+                previous_end = start
+            elif startd < sys.maxint:
+                if resd.group().startswith("{") or resd.group().startswith("[") :
+                    delimiter_stack.append(resd.group())
+                elif len(delimiter_stack)>0 and ( (delimiter_stack[-1].startswith('{') and resd.group()[0] == '}') or (delimiter_stack[-1].startswith('[') and resd.group()[0] == ']') ) and len(delimiter_stack[-1]) == len(resd.group()):
+                    delimiter_stack.pop()
+                start += resd.end()
+            else:
+                break
+            
+        if previous_end > 0:
+            split_indexes.append((previous_end,len(src)))
+        res = [src[start:end] for start,end in split_indexes]
+        return res
+
+
+
+    def process_infoboxes(self, infobox_defs, tag):
+        
+        if not infobox_defs:
+            return
+        
+        revision_id = infobox_defs[0]
+        for infobox in infobox_defs[1]:
+            src = infobox[0].strip(' \t\n\r')            
+            name = infobox[1]
+            tag_infobox, created = TagInfobox.objects.get_or_create(tag=tag, name=name, revision_id = revision_id, defaults={'source': src})
+            if not created:
+                tag_infobox.source = src
+                tag_infobox.save()
+
+            src = COMMENT_PATTERN.sub('',src)
+            src = START_PATTERN.sub('',src[:-2]).strip()
+            
+            keyvalues = self.split_infoboxes(src)
+
+            for key,value in itertools.izip(*[itertools.islice(keyvalues, i, None, 2) for i in range(2)]):
+                param, created = InfoboxParameter.objects.get_or_create(tag_infobox=tag_infobox, param_name=key.strip(), defaults={'param_value':value.strip()})
+                if not created:
+                    param.param_value = value.strip()
+                    param.save()
+        
+    def handle_noargs(self, **options):
+        
+        self.style = no_style()
+        
+        interactive = options.get('interactive', True)
+        
+        self.verbosity = int(options.get('verbosity', '1'))
+        use_label = options.get('use_label', False)
+        
+        force = options.get('force', False)
+        
+        limit = options.get("limit", -1)
+        start = options.get("start", 0)
+        
+        site_url = options.get('site_url', settings.WIKIPEDIA_API_URL)
+        
+        random = options.get('random', False)
+        
+        types_mask = 0
+        types_list = options.get('types', [])
+        
+        if len(types_list) == 0:
+            types_mask = TYPES_MASK_DICT['all']
+        else:
+            for t in types_list:
+                types_mask |=  TYPES_MASK_DICT[t]
+                
+        if self.verbosity > 1 :
+            print "types mask %s " % (bin(types_mask))  
+        
+        if self.verbosity > 2:
+            print "option passed : " + repr(options)
+
+
+        queryset = Tag.objects.exclude(wikipedia_pageid= None)
+        
+        tag_list = options.get("tags", []);
+        
+        if tag_list:
+            queryset = queryset.filter(label__in=tag_list)
+        elif not options.get('all',False):            
+            queryset = queryset.annotate(wpc=Count('wp_categories')).filter(wpc = 0)
+        #else:
+        #    queryset = Tag.objects.filter(url_status=None)                    
+        
+        if random:
+            queryset = queryset.order_by("?")
+        else:
+            queryset = queryset.order_by("label")
+        
+        if limit >= 0:
+            queryset = queryset[start:limit]
+        elif start > 0:
+            queryset = queryset[start:]            
+        
+        if self.verbosity > 2 :
+            print "Tag Query is %s" % (queryset.query)
+        
+        site = wiki.Wiki(site_url) #@UndefinedVariable
+        
+        
+        count = queryset.count()
+        if self.verbosity > 1:
+            print "Processing %d tags" % (count)
+        
+        if not force and interactive:
+            confirm = raw_input("You have requested to query and replace the wikipedia information for %d tags.\n Are you sure you want to do this? \nType 'yes' to continue, or 'no' to cancel: " % (count))
+        else:
+            confirm = 'yes'
+            
+        if confirm != "yes":
+            print "wikipedia query cancelled"
+            return
+
+        
+        
+        for i, tag in enumerate(queryset):
+            
+            if self.verbosity > 1:
+                print "processing tag %s (%d/%d)" % (tag.label, i + 1, count)
+            else:
+                utils.show_progress(i + 1, count, tag.label, 60)                            
+
+            # query categories
+            wikipedia_pageid = tag.label if use_label else tag.wikipedia_pageid
+            if tag.url_status == Tag.TAG_URL_STATUS_DICT['redirection'] and tag.alternative_wikipedia_pageid is not None :
+                wikipedia_pageid = tag.alternative_label if use_label else tag.alternative_wikipedia_pageid
+
+            with transaction.commit_on_success():
+                if types_mask & TYPES_MASK_DICT['visible']:
+                    res = self.query_all_categories(False, site, wikipedia_pageid, use_label)
+                    self.process_categories(res, False, tag)
+    
+                if types_mask & TYPES_MASK_DICT['hidden']:
+                    res = self.query_all_categories(True, site, wikipedia_pageid, use_label)
+                    self.process_categories(res, True, tag)
+                
+                if types_mask & TYPES_MASK_DICT['infobox']:
+                    res = self.query_infoboxes(site, wikipedia_pageid, use_label)
+                    self.process_infoboxes(res, tag)
+            
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/management/utils.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Feb 2, 2012
+
+@author: ymh
+'''
+
+import cStringIO
+import csv
+import codecs
+
+class UnicodeWriter:
+    """
+    A CSV writer which will write rows to CSV file "f",
+    which is encoded in the given encoding.
+    """
+
+    def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds):
+        # Redirect output to a queue
+        self.queue = cStringIO.StringIO()
+        self.writer = csv.writer(self.queue, dialect=dialect, **kwds)
+        self.stream = f
+        self.encoder = codecs.getincrementalencoder(encoding)()
+
+    def writerow(self, row):
+        self.writer.writerow([unicode(s).encode("utf-8") for s in row])
+        # Fetch UTF-8 output from the queue ...
+        data = self.queue.getvalue()
+        data = data.decode("utf-8")
+        # ... and reencode it into the target encoding
+        data = self.encoder.encode(data)
+        # write to the target stream
+        self.stream.write(data)
+        # empty queue
+        self.queue.truncate(0)
+
+    def writerows(self, rows):
+        for row in rows:
+            self.writerow(row)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/migrations/0001_initial.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,131 @@
+# encoding: utf-8
+from south.db import db
+from south.v2 import SchemaMigration
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+        
+        # Adding model 'WpCategory'
+        db.create_table('hdalab_wpcategory', ( #@UndefinedVariable
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('label', self.gf('django.db.models.fields.CharField')(unique=True, max_length=2048)),
+        ))
+        db.send_create_signal('hdalab', ['WpCategory']) #@UndefinedVariable
+
+        # Adding model 'TagWpCategory'
+        db.create_table('hdalab_tagwpcategory', ( #@UndefinedVariable
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('tag', self.gf('django.db.models.fields.related.ForeignKey')(related_name='wp_categories', to=orm['hdabo.Tag'])),
+            ('wp_category', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdalab.WpCategory'])),
+            ('hidden', self.gf('django.db.models.fields.BooleanField')(default=False)),
+        ))
+        db.send_create_signal('hdalab', ['TagWpCategory']) #@UndefinedVariable
+
+        # Adding unique constraint on 'TagWpCategory', fields ['tag', 'wp_category', 'hidden']
+        db.create_unique('hdalab_tagwpcategory', ['tag_id', 'wp_category_id', 'hidden']) #@UndefinedVariable
+
+        # Adding model 'TagInfobox'
+        db.create_table('hdalab_taginfobox', ( #@UndefinedVariable
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('tag', self.gf('django.db.models.fields.related.ForeignKey')(related_name='infoboxes', to=orm['hdabo.Tag'])),
+            ('name', self.gf('django.db.models.fields.CharField')(max_length=2048)),
+            ('source', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+            ('revision_id', self.gf('django.db.models.fields.BigIntegerField')(null=True, blank=True)),
+        ))
+        db.send_create_signal('hdalab', ['TagInfobox']) #@UndefinedVariable
+
+        # Adding unique constraint on 'TagInfobox', fields ['tag', 'name', 'revision_id']
+        db.create_unique('hdalab_taginfobox', ['tag_id', 'name', 'revision_id']) #@UndefinedVariable
+
+        # Adding model 'InfoboxParameter'
+        db.create_table('hdalab_infoboxparameter', ( #@UndefinedVariable
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('tag_infobox', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdalab.TagInfobox'])),
+            ('param_name', self.gf('django.db.models.fields.CharField')(max_length=2048)),
+            ('param_value', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+        ))
+        db.send_create_signal('hdalab', ['InfoboxParameter']) #@UndefinedVariable
+
+        # Adding unique constraint on 'InfoboxParameter', fields ['tag_infobox', 'param_name']
+        db.create_unique('hdalab_infoboxparameter', ['tag_infobox_id', 'param_name']) #@UndefinedVariable
+
+
+    def backwards(self, orm):
+        
+        # Removing unique constraint on 'InfoboxParameter', fields ['tag_infobox', 'param_name']
+        db.delete_unique('hdalab_infoboxparameter', ['tag_infobox_id', 'param_name']) #@UndefinedVariable
+
+        # Removing unique constraint on 'TagInfobox', fields ['tag', 'name', 'revision_id']
+        db.delete_unique('hdalab_taginfobox', ['tag_id', 'name', 'revision_id']) #@UndefinedVariable
+
+        # Removing unique constraint on 'TagWpCategory', fields ['tag', 'wp_category', 'hidden']
+        db.delete_unique('hdalab_tagwpcategory', ['tag_id', 'wp_category_id', 'hidden']) #@UndefinedVariable
+
+        # Deleting model 'WpCategory'
+        db.delete_table('hdalab_wpcategory') #@UndefinedVariable
+
+        # Deleting model 'TagWpCategory'
+        db.delete_table('hdalab_tagwpcategory') #@UndefinedVariable
+
+        # Deleting model 'TagInfobox'
+        db.delete_table('hdalab_taginfobox') #@UndefinedVariable
+
+        # Deleting model 'InfoboxParameter'
+        db.delete_table('hdalab_infoboxparameter') #@UndefinedVariable
+
+
+    models = {
+        'hdabo.tag': {
+            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
+            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+            'wikipedia_url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.tagcategory': {
+            'Meta': {'object_name': 'TagCategory'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+        },
+        'hdalab.infoboxparameter': {
+            'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
+        },
+        'hdalab.taginfobox': {
+            'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+            'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.tagwpcategory': {
+            'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
+            'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
+            'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
+        },
+        'hdalab.wpcategory': {
+            'Meta': {'object_name': 'WpCategory'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
+        }
+    }
+
+    complete_apps = ['hdalab']
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/migrations/0002_dataviz.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,144 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+        
+        # Adding model 'DbpediaFields'
+        db.create_table('hdalab_dbpediafields', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('dbpedia_uri', self.gf('django.db.models.fields.URLField')(unique=True, max_length=2048, db_index=True)),
+            ('tag', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='dbpedia_fields', null=True, to=orm['hdabo.Tag'])),
+            ('abstract', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+            ('label', self.gf('django.db.models.fields.CharField')(max_length=2048, null=True, blank=True)),
+            ('thumbnail', self.gf('django.db.models.fields.URLField')(max_length=2048, null=True, blank=True)),
+        ))
+        db.send_create_signal('hdalab', ['DbpediaFields'])
+
+        # Adding model 'TagLinks'
+        db.create_table('hdalab_taglinks', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('subject', self.gf('django.db.models.fields.related.ForeignKey')(related_name='taglinks_subjects', to=orm['hdabo.Tag'])),
+            ('object', self.gf('django.db.models.fields.related.ForeignKey')(related_name='taglinks_objects', to=orm['hdabo.Tag'])),
+        ))
+        db.send_create_signal('hdalab', ['TagLinks'])
+
+        # Adding model 'CountryCode'
+        db.create_table('hdalab_countrycode', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('label', self.gf('django.db.models.fields.CharField')(unique=True, max_length=1024, db_index=True)),
+            ('isocode', self.gf('django.db.models.fields.CharField')(unique=True, max_length=3, db_index=True)),
+        ))
+        db.send_create_signal('hdalab', ['CountryCode'])
+
+        # Adding model 'TagYears'
+        db.create_table('hdalab_tagyears', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('tag', self.gf('django.db.models.fields.related.ForeignKey')(related_name='years', to=orm['hdabo.Tag'])),
+            ('start_year', self.gf('django.db.models.fields.IntegerField')(db_index=True)),
+            ('end_yar', self.gf('django.db.models.fields.IntegerField')(db_index=True)),
+        ))
+        db.send_create_signal('hdalab', ['TagYears'])
+
+
+    def backwards(self, orm):
+        
+        # Deleting model 'DbpediaFields'
+        db.delete_table('hdalab_dbpediafields')
+
+        # Deleting model 'TagLinks'
+        db.delete_table('hdalab_taglinks')
+
+        # Deleting model 'CountryCode'
+        db.delete_table('hdalab_countrycode')
+
+        # Deleting model 'TagYears'
+        db.delete_table('hdalab_tagyears')
+
+
+    models = {
+        'hdabo.tag': {
+            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
+            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.tagcategory': {
+            'Meta': {'object_name': 'TagCategory'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+        },
+        'hdalab.countrycode': {
+            'Meta': {'object_name': 'CountryCode'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'isocode': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3', 'db_index': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024', 'db_index': 'True'})
+        },
+        'hdalab.dbpediafields': {
+            'Meta': {'object_name': 'DbpediaFields'},
+            'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'null': 'True', 'to': "orm['hdabo.Tag']"}),
+            'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdalab.infoboxparameter': {
+            'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
+        },
+        'hdalab.taginfobox': {
+            'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+            'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.taglinks': {
+            'Meta': {'object_name': 'TagLinks'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
+            'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.tagwpcategory': {
+            'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
+            'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
+            'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
+        },
+        'hdalab.tagyears': {
+            'Meta': {'object_name': 'TagYears'},
+            'end_yar': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.wpcategory': {
+            'Meta': {'object_name': 'WpCategory'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
+        }
+    }
+
+    complete_apps = ['hdalab']
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/migrations/0003_hdasession.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,113 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+        
+        # Adding model 'HdaSession'
+        db.create_table('hdalab_hdasession', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('sessionid', self.gf('django.db.models.fields.CharField')(unique=True, max_length=36, db_index=True)),
+            ('data', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+        ))
+        db.send_create_signal('hdalab', ['HdaSession'])
+
+
+    def backwards(self, orm):
+        
+        # Deleting model 'HdaSession'
+        db.delete_table('hdalab_hdasession')
+
+
+    models = {
+        'hdabo.tag': {
+            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
+            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.tagcategory': {
+            'Meta': {'object_name': 'TagCategory'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+        },
+        'hdalab.countrycode': {
+            'Meta': {'object_name': 'CountryCode'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'isocode': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3', 'db_index': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024', 'db_index': 'True'})
+        },
+        'hdalab.dbpediafields': {
+            'Meta': {'object_name': 'DbpediaFields'},
+            'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'null': 'True', 'to': "orm['hdabo.Tag']"}),
+            'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdalab.hdasession': {
+            'Meta': {'object_name': 'HdaSession'},
+            'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
+        },
+        'hdalab.infoboxparameter': {
+            'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
+        },
+        'hdalab.taginfobox': {
+            'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+            'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.taglinks': {
+            'Meta': {'object_name': 'TagLinks'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
+            'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.tagwpcategory': {
+            'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
+            'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
+            'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
+        },
+        'hdalab.tagyears': {
+            'Meta': {'object_name': 'TagYears'},
+            'end_yar': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.wpcategory': {
+            'Meta': {'object_name': 'WpCategory'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
+        }
+    }
+
+    complete_apps = ['hdalab']
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/migrations/0004_remove_dbpedia_unicity.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,108 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+        
+        # Removing unique constraint on 'DbpediaFields', fields ['dbpedia_uri']
+        db.delete_unique('hdalab_dbpediafields', ['dbpedia_uri'])
+
+
+    def backwards(self, orm):
+        
+        # Adding unique constraint on 'DbpediaFields', fields ['dbpedia_uri']
+        db.create_unique('hdalab_dbpediafields', ['dbpedia_uri'])
+
+
+    models = {
+        'hdabo.tag': {
+            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
+            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.tagcategory': {
+            'Meta': {'object_name': 'TagCategory'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+        },
+        'hdalab.countrycode': {
+            'Meta': {'object_name': 'CountryCode'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'isocode': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3', 'db_index': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024', 'db_index': 'True'})
+        },
+        'hdalab.dbpediafields': {
+            'Meta': {'object_name': 'DbpediaFields'},
+            'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'null': 'True', 'to': "orm['hdabo.Tag']"}),
+            'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdalab.hdasession': {
+            'Meta': {'object_name': 'HdaSession'},
+            'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
+        },
+        'hdalab.infoboxparameter': {
+            'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
+        },
+        'hdalab.taginfobox': {
+            'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+            'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.taglinks': {
+            'Meta': {'object_name': 'TagLinks'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
+            'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.tagwpcategory': {
+            'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
+            'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
+            'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
+        },
+        'hdalab.tagyears': {
+            'Meta': {'object_name': 'TagYears'},
+            'end_yar': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.wpcategory': {
+            'Meta': {'object_name': 'WpCategory'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
+        }
+    }
+
+    complete_apps = ['hdalab']
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/migrations/0005_rename_end_year.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,114 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+        
+        # Deleting field 'TagYears.end_yar'
+        db.delete_column('hdalab_tagyears', 'end_yar')
+
+        # Adding field 'TagYears.end_year'
+        db.add_column('hdalab_tagyears', 'end_year', self.gf('django.db.models.fields.IntegerField')(default=2012, db_index=True), keep_default=False)
+
+
+    def backwards(self, orm):
+        
+        # User chose to not deal with backwards NULL issues for 'TagYears.end_yar'
+        raise RuntimeError("Cannot reverse this migration. 'TagYears.end_yar' and its values cannot be restored.")
+
+        # Deleting field 'TagYears.end_year'
+        db.delete_column('hdalab_tagyears', 'end_year')
+
+
+    models = {
+        'hdabo.tag': {
+            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
+            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.tagcategory': {
+            'Meta': {'object_name': 'TagCategory'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+        },
+        'hdalab.countrycode': {
+            'Meta': {'object_name': 'CountryCode'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'isocode': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3', 'db_index': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024', 'db_index': 'True'})
+        },
+        'hdalab.dbpediafields': {
+            'Meta': {'object_name': 'DbpediaFields'},
+            'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'null': 'True', 'to': "orm['hdabo.Tag']"}),
+            'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdalab.hdasession': {
+            'Meta': {'object_name': 'HdaSession'},
+            'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
+        },
+        'hdalab.infoboxparameter': {
+            'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
+        },
+        'hdalab.taginfobox': {
+            'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+            'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.taglinks': {
+            'Meta': {'object_name': 'TagLinks'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
+            'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.tagwpcategory': {
+            'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
+            'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
+            'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
+        },
+        'hdalab.tagyears': {
+            'Meta': {'object_name': 'TagYears'},
+            'end_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.wpcategory': {
+            'Meta': {'object_name': 'WpCategory'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
+        }
+    }
+
+    complete_apps = ['hdalab']
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/migrations/0006_dbpedia_fields_one_to_one.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,114 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+        
+        # Changing field 'DbpediaFields.tag'
+        db.alter_column('hdalab_dbpediafields', 'tag_id', self.gf('django.db.models.fields.related.OneToOneField')(unique=True, null=True, to=orm['hdabo.Tag']))
+
+        # Adding unique constraint on 'DbpediaFields', fields ['tag']
+        db.create_unique('hdalab_dbpediafields', ['tag_id'])
+
+
+    def backwards(self, orm):
+        
+        # Removing unique constraint on 'DbpediaFields', fields ['tag']
+        db.delete_unique('hdalab_dbpediafields', ['tag_id'])
+
+        # Changing field 'DbpediaFields.tag'
+        db.alter_column('hdalab_dbpediafields', 'tag_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['hdabo.Tag']))
+
+
+    models = {
+        'hdabo.tag': {
+            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
+            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.tagcategory': {
+            'Meta': {'object_name': 'TagCategory'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+        },
+        'hdalab.countrycode': {
+            'Meta': {'object_name': 'CountryCode'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'isocode': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3', 'db_index': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024', 'db_index': 'True'})
+        },
+        'hdalab.dbpediafields': {
+            'Meta': {'object_name': 'DbpediaFields'},
+            'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'tag': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'unique': 'True', 'null': 'True', 'to': "orm['hdabo.Tag']"}),
+            'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdalab.hdasession': {
+            'Meta': {'object_name': 'HdaSession'},
+            'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
+        },
+        'hdalab.infoboxparameter': {
+            'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
+        },
+        'hdalab.taginfobox': {
+            'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+            'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.taglinks': {
+            'Meta': {'object_name': 'TagLinks'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
+            'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.tagwpcategory': {
+            'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
+            'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
+            'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
+        },
+        'hdalab.tagyears': {
+            'Meta': {'object_name': 'TagYears'},
+            'end_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.wpcategory': {
+            'Meta': {'object_name': 'WpCategory'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
+        }
+    }
+
+    complete_apps = ['hdalab']
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/migrations/0007_geographic_inclusion.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,139 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+        
+        # Deleting model 'CountryCode'
+        db.delete_table('hdalab_countrycode')
+
+        # Adding model 'GeoInclusion'
+        db.create_table('hdalab_geoinclusion', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('tag', self.gf('django.db.models.fields.related.OneToOneField')(related_name='locatedin', unique=True, to=orm['hdabo.Tag'])),
+            ('country', self.gf('django.db.models.fields.related.ForeignKey')(related_name='includes', to=orm['hdalab.Country'])),
+        ))
+        db.send_create_signal('hdalab', ['GeoInclusion'])
+
+        # Adding model 'Country'
+        db.create_table('hdalab_country', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('dbpedia_uri', self.gf('django.db.models.fields.URLField')(unique=True, max_length=255, db_index=True)),
+        ))
+        db.send_create_signal('hdalab', ['Country'])
+
+
+    def backwards(self, orm):
+        
+        # Adding model 'CountryCode'
+        db.create_table('hdalab_countrycode', (
+            ('isocode', self.gf('django.db.models.fields.CharField')(max_length=3, unique=True, db_index=True)),
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('label', self.gf('django.db.models.fields.CharField')(max_length=1024, unique=True, db_index=True)),
+        ))
+        db.send_create_signal('hdalab', ['CountryCode'])
+
+        # Deleting model 'GeoInclusion'
+        db.delete_table('hdalab_geoinclusion')
+
+        # Deleting model 'Country'
+        db.delete_table('hdalab_country')
+
+
+    models = {
+        'hdabo.tag': {
+            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
+            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.tagcategory': {
+            'Meta': {'object_name': 'TagCategory'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+        },
+        'hdalab.country': {
+            'Meta': {'object_name': 'Country'},
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+        },
+        'hdalab.dbpediafields': {
+            'Meta': {'object_name': 'DbpediaFields'},
+            'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'tag': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'unique': 'True', 'null': 'True', 'to': "orm['hdabo.Tag']"}),
+            'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdalab.geoinclusion': {
+            'Meta': {'object_name': 'GeoInclusion'},
+            'country': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'includes'", 'to': "orm['hdalab.Country']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'tag': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'locatedin'", 'unique': 'True', 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.hdasession': {
+            'Meta': {'object_name': 'HdaSession'},
+            'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
+        },
+        'hdalab.infoboxparameter': {
+            'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
+        },
+        'hdalab.taginfobox': {
+            'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+            'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.taglinks': {
+            'Meta': {'object_name': 'TagLinks'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
+            'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.tagwpcategory': {
+            'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
+            'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
+            'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
+        },
+        'hdalab.tagyears': {
+            'Meta': {'object_name': 'TagYears'},
+            'end_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.wpcategory': {
+            'Meta': {'object_name': 'WpCategory'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
+        }
+    }
+
+    complete_apps = ['hdalab']
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/migrations/0008_datasheet_insee.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,304 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+        
+        # Adding model 'DatasheetExtras'
+        db.create_table('hdalab_datasheetextras', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('datasheet', self.gf('django.db.models.fields.related.OneToOneField')(related_name='extras', unique=True, to=orm['hdabo.Datasheet'])),
+            ('insee', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdalab.InseeCoords'], null=True, blank=True)),
+        ))
+        db.send_create_signal('hdalab', ['DatasheetExtras'])
+
+        # Adding model 'InseeCoords'
+        db.create_table('hdalab_inseecoords', (
+            ('insee', self.gf('django.db.models.fields.IntegerField')(primary_key=True)),
+            ('city_name', self.gf('django.db.models.fields.CharField')(max_length=255)),
+            ('latitude', self.gf('django.db.models.fields.FloatField')()),
+            ('longitude', self.gf('django.db.models.fields.FloatField')()),
+        ))
+        db.send_create_signal('hdalab', ['InseeCoords'])
+
+
+    def backwards(self, orm):
+        
+        # Deleting model 'DatasheetExtras'
+        db.delete_table('hdalab_datasheetextras')
+
+        # Deleting model 'InseeCoords'
+        db.delete_table('hdalab_inseecoords')
+
+
+    models = {
+        'auth.group': {
+            'Meta': {'object_name': 'Group'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+        },
+        'auth.permission': {
+            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+        },
+        'auth.user': {
+            'Meta': {'object_name': 'User'},
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+        },
+        'contenttypes.contenttype': {
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+        },
+        'hdabo.author': {
+            'Meta': {'object_name': 'Author'},
+            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.datasheet': {
+            'Meta': {'object_name': 'Datasheet'},
+            'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
+            'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+            'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
+            'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
+            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+            'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+            'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+            'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']"}),
+            'original_creation_date': ('django.db.models.fields.DateField', [], {}),
+            'original_modification_date': ('django.db.models.fields.DateField', [], {}),
+            'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+            'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
+            'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
+            'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+            'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.datasheet_college_periods': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+        },
+        'hdabo.datasheet_college_themes': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.datasheet_domains': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.datasheet_highschool_periods': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+        },
+        'hdabo.datasheet_highschool_themes': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.datasheet_primary_periods': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+        },
+        'hdabo.datasheet_primary_themes': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.documentformat': {
+            'Meta': {'object_name': 'DocumentFormat'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+        },
+        'hdabo.domain': {
+            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+            'school_period': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.location': {
+            'Meta': {'object_name': 'Location'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
+        },
+        'hdabo.organisation': {
+            'Meta': {'object_name': 'Organisation'},
+            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+            'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.tag': {
+            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
+            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.tagcategory': {
+            'Meta': {'object_name': 'TagCategory'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+        },
+        'hdabo.taggedsheet': {
+            'Meta': {'object_name': 'TaggedSheet'},
+            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
+            'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+            'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
+            'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.timeperiod': {
+            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+            'school_period': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdalab.country': {
+            'Meta': {'object_name': 'Country'},
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+        },
+        'hdalab.datasheetextras': {
+            'Meta': {'object_name': 'DatasheetExtras'},
+            'datasheet': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'extras'", 'unique': 'True', 'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'insee': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.InseeCoords']", 'null': 'True', 'blank': 'True'})
+        },
+        'hdalab.dbpediafields': {
+            'Meta': {'object_name': 'DbpediaFields'},
+            'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'tag': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'unique': 'True', 'null': 'True', 'to': "orm['hdabo.Tag']"}),
+            'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdalab.geoinclusion': {
+            'Meta': {'object_name': 'GeoInclusion'},
+            'country': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'includes'", 'to': "orm['hdalab.Country']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'tag': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'locatedin'", 'unique': 'True', 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.hdasession': {
+            'Meta': {'object_name': 'HdaSession'},
+            'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
+        },
+        'hdalab.infoboxparameter': {
+            'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
+        },
+        'hdalab.inseecoords': {
+            'Meta': {'object_name': 'InseeCoords'},
+            'city_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'insee': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
+            'latitude': ('django.db.models.fields.FloatField', [], {}),
+            'longitude': ('django.db.models.fields.FloatField', [], {})
+        },
+        'hdalab.taginfobox': {
+            'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+            'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.taglinks': {
+            'Meta': {'object_name': 'TagLinks'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
+            'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.tagwpcategory': {
+            'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
+            'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
+            'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
+        },
+        'hdalab.tagyears': {
+            'Meta': {'object_name': 'TagYears'},
+            'end_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.wpcategory': {
+            'Meta': {'object_name': 'WpCategory'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
+        }
+    }
+
+    complete_apps = ['hdalab']
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/migrations/0009_i18n.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,308 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+        
+        # Adding model 'DbpediaFieldsTranslation'
+        db.create_table('hdalab_dbpediafieldstranslation', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('master', self.gf('django.db.models.fields.related.ForeignKey')(related_name='translations', to=orm['hdalab.DbpediaFields'])),
+            ('language_code', self.gf('django.db.models.fields.CharField')(max_length=15, db_index=True)),
+            ('label', self.gf('django.db.models.fields.CharField')(max_length=2048, blank=True)),
+            ('abstract', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+        ))
+        db.send_create_signal('hdalab', ['DbpediaFieldsTranslation'])
+
+        # Adding unique constraint on 'DbpediaFieldsTranslation', fields ['master', 'language_code']
+        db.create_unique('hdalab_dbpediafieldstranslation', ['master_id', 'language_code'])
+
+
+    def backwards(self, orm):
+        
+        # Removing unique constraint on 'DbpediaFieldsTranslation', fields ['master', 'language_code']
+        db.delete_unique('hdalab_dbpediafieldstranslation', ['master_id', 'language_code'])
+
+        # Deleting model 'DbpediaFieldsTranslation'
+        db.delete_table('hdalab_dbpediafieldstranslation')
+
+
+    models = {
+        'auth.group': {
+            'Meta': {'object_name': 'Group'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+        },
+        'auth.permission': {
+            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+        },
+        'auth.user': {
+            'Meta': {'object_name': 'User'},
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 3, 8, 13, 47, 54, 155003)'}),
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 3, 8, 13, 47, 54, 154782)'}),
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+        },
+        'contenttypes.contenttype': {
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+        },
+        'hdabo.author': {
+            'Meta': {'object_name': 'Author'},
+            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.datasheet': {
+            'Meta': {'object_name': 'Datasheet'},
+            'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
+            'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+            'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
+            'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
+            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+            'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+            'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+            'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']"}),
+            'original_creation_date': ('django.db.models.fields.DateField', [], {}),
+            'original_modification_date': ('django.db.models.fields.DateField', [], {}),
+            'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+            'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
+            'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
+            'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+            'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.datasheet_college_periods': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+        },
+        'hdabo.datasheet_college_themes': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.datasheet_domains': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.datasheet_highschool_periods': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+        },
+        'hdabo.datasheet_highschool_themes': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.datasheet_primary_periods': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+        },
+        'hdabo.datasheet_primary_themes': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.documentformat': {
+            'Meta': {'object_name': 'DocumentFormat'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+        },
+        'hdabo.domain': {
+            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+            'school_period': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.location': {
+            'Meta': {'object_name': 'Location'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
+        },
+        'hdabo.organisation': {
+            'Meta': {'object_name': 'Organisation'},
+            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+            'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.tag': {
+            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
+            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.tagcategory': {
+            'Meta': {'object_name': 'TagCategory'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+        },
+        'hdabo.taggedsheet': {
+            'Meta': {'object_name': 'TaggedSheet'},
+            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
+            'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+            'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
+            'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.timeperiod': {
+            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+            'school_period': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdalab.country': {
+            'Meta': {'object_name': 'Country'},
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+        },
+        'hdalab.datasheetextras': {
+            'Meta': {'object_name': 'DatasheetExtras'},
+            'datasheet': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'extras'", 'unique': 'True', 'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'insee': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.InseeCoords']", 'null': 'True', 'blank': 'True'})
+        },
+        'hdalab.dbpediafields': {
+            'Meta': {'object_name': 'DbpediaFields'},
+            'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'tag': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'unique': 'True', 'null': 'True', 'to': "orm['hdabo.Tag']"}),
+            'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdalab.dbpediafieldstranslation': {
+            'Meta': {'unique_together': "(('master', 'language_code'),)", 'object_name': 'DbpediaFieldsTranslation'},
+            'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'blank': 'True'}),
+            'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
+            'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'to': "orm['hdalab.DbpediaFields']"})
+        },
+        'hdalab.geoinclusion': {
+            'Meta': {'object_name': 'GeoInclusion'},
+            'country': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'includes'", 'to': "orm['hdalab.Country']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'tag': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'locatedin'", 'unique': 'True', 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.hdasession': {
+            'Meta': {'object_name': 'HdaSession'},
+            'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
+        },
+        'hdalab.infoboxparameter': {
+            'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
+        },
+        'hdalab.inseecoords': {
+            'Meta': {'object_name': 'InseeCoords'},
+            'city_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'insee': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
+            'latitude': ('django.db.models.fields.FloatField', [], {}),
+            'longitude': ('django.db.models.fields.FloatField', [], {})
+        },
+        'hdalab.taginfobox': {
+            'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+            'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.taglinks': {
+            'Meta': {'object_name': 'TagLinks'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
+            'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.tagwpcategory': {
+            'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
+            'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
+            'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
+        },
+        'hdalab.tagyears': {
+            'Meta': {'object_name': 'TagYears'},
+            'end_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.wpcategory': {
+            'Meta': {'object_name': 'WpCategory'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
+        }
+    }
+
+    complete_apps = ['hdalab']
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/migrations/0010_categoryinclusion.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,312 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+        
+        # Adding model 'WpCategoryInclusion'
+        db.create_table('hdalab_wpcategoryinclusion', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('parent_category', self.gf('django.db.models.fields.related.ForeignKey')(related_name='child_categories', to=orm['hdalab.WpCategory'])),
+            ('child_category', self.gf('django.db.models.fields.related.ForeignKey')(related_name='parent_categories', to=orm['hdalab.WpCategory'])),
+        ))
+        db.send_create_signal('hdalab', ['WpCategoryInclusion'])
+
+        # Adding unique constraint on 'WpCategoryInclusion', fields ['parent_category', 'child_category']
+        db.create_unique('hdalab_wpcategoryinclusion', ['parent_category_id', 'child_category_id'])
+
+
+    def backwards(self, orm):
+        
+        # Removing unique constraint on 'WpCategoryInclusion', fields ['parent_category', 'child_category']
+        db.delete_unique('hdalab_wpcategoryinclusion', ['parent_category_id', 'child_category_id'])
+
+        # Deleting model 'WpCategoryInclusion'
+        db.delete_table('hdalab_wpcategoryinclusion')
+
+
+    models = {
+        'auth.group': {
+            'Meta': {'object_name': 'Group'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+        },
+        'auth.permission': {
+            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+        },
+        'auth.user': {
+            'Meta': {'object_name': 'User'},
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 7, 2, 5, 14, 31, 895549)'}),
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 7, 2, 5, 14, 31, 895384)'}),
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+        },
+        'contenttypes.contenttype': {
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+        },
+        'hdabo.author': {
+            'Meta': {'object_name': 'Author'},
+            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.datasheet': {
+            'Meta': {'object_name': 'Datasheet'},
+            'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
+            'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+            'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
+            'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
+            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+            'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+            'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+            'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']", 'null': 'True'}),
+            'original_creation_date': ('django.db.models.fields.DateField', [], {}),
+            'original_modification_date': ('django.db.models.fields.DateField', [], {}),
+            'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+            'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
+            'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
+            'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+            'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.datasheet_college_periods': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+        },
+        'hdabo.datasheet_college_themes': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.datasheet_domains': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.datasheet_highschool_periods': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+        },
+        'hdabo.datasheet_highschool_themes': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.datasheet_primary_periods': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+        },
+        'hdabo.datasheet_primary_themes': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.documentformat': {
+            'Meta': {'object_name': 'DocumentFormat'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+        },
+        'hdabo.domain': {
+            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+            'school_period': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.location': {
+            'Meta': {'object_name': 'Location'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
+        },
+        'hdabo.organisation': {
+            'Meta': {'object_name': 'Organisation'},
+            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+            'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.tag': {
+            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
+            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.tagcategory': {
+            'Meta': {'object_name': 'TagCategory'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+        },
+        'hdabo.taggedsheet': {
+            'Meta': {'object_name': 'TaggedSheet'},
+            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
+            'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+            'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
+            'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.timeperiod': {
+            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+            'school_period': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdalab.country': {
+            'Meta': {'object_name': 'Country'},
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+        },
+        'hdalab.datasheetextras': {
+            'Meta': {'object_name': 'DatasheetExtras'},
+            'datasheet': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'extras'", 'unique': 'True', 'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'insee': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.InseeCoords']", 'null': 'True', 'blank': 'True'})
+        },
+        'hdalab.dbpediafields': {
+            'Meta': {'object_name': 'DbpediaFields'},
+            'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'tag': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'unique': 'True', 'null': 'True', 'to': "orm['hdabo.Tag']"}),
+            'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdalab.dbpediafieldstranslation': {
+            'Meta': {'unique_together': "(('master', 'language_code'),)", 'object_name': 'DbpediaFieldsTranslation'},
+            'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'blank': 'True'}),
+            'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
+            'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'to': "orm['hdalab.DbpediaFields']"})
+        },
+        'hdalab.geoinclusion': {
+            'Meta': {'object_name': 'GeoInclusion'},
+            'country': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'includes'", 'to': "orm['hdalab.Country']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'tag': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'locatedin'", 'unique': 'True', 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.hdasession': {
+            'Meta': {'object_name': 'HdaSession'},
+            'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
+        },
+        'hdalab.infoboxparameter': {
+            'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
+        },
+        'hdalab.inseecoords': {
+            'Meta': {'object_name': 'InseeCoords'},
+            'city_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'insee': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
+            'latitude': ('django.db.models.fields.FloatField', [], {}),
+            'longitude': ('django.db.models.fields.FloatField', [], {})
+        },
+        'hdalab.taginfobox': {
+            'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+            'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.taglinks': {
+            'Meta': {'object_name': 'TagLinks'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
+            'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.tagwpcategory': {
+            'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
+            'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
+            'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
+        },
+        'hdalab.tagyears': {
+            'Meta': {'object_name': 'TagYears'},
+            'end_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.wpcategory': {
+            'Meta': {'object_name': 'WpCategory'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
+        },
+        'hdalab.wpcategoryinclusion': {
+            'Meta': {'unique_together': "(('parent_category', 'child_category'),)", 'object_name': 'WpCategoryInclusion'},
+            'child_category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'parent_categories'", 'to': "orm['hdalab.WpCategory']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'parent_category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'child_categories'", 'to': "orm['hdalab.WpCategory']"})
+        }
+    }
+
+    complete_apps = ['hdalab']
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/migrations/0011_auto__add_field_dbpediafieldstranslation_is_label_translated__add_fiel.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,309 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+        
+        # Adding field 'DbpediaFieldsTranslation.is_label_translated'
+        db.add_column('hdalab_dbpediafieldstranslation', 'is_label_translated', self.gf('django.db.models.fields.BooleanField')(default=True), keep_default=False)
+
+        # Adding field 'DbpediaFieldsTranslation.is_abstract_translated'
+        db.add_column('hdalab_dbpediafieldstranslation', 'is_abstract_translated', self.gf('django.db.models.fields.BooleanField')(default=True), keep_default=False)
+
+
+    def backwards(self, orm):
+        
+        # Deleting field 'DbpediaFieldsTranslation.is_label_translated'
+        db.delete_column('hdalab_dbpediafieldstranslation', 'is_label_translated')
+
+        # Deleting field 'DbpediaFieldsTranslation.is_abstract_translated'
+        db.delete_column('hdalab_dbpediafieldstranslation', 'is_abstract_translated')
+
+
+    models = {
+        'auth.group': {
+            'Meta': {'object_name': 'Group'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+        },
+        'auth.permission': {
+            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+        },
+        'auth.user': {
+            'Meta': {'object_name': 'User'},
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 9, 6, 7, 27, 20, 166066)'}),
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 9, 6, 7, 27, 20, 165955)'}),
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+        },
+        'contenttypes.contenttype': {
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+        },
+        'hdabo.author': {
+            'Meta': {'object_name': 'Author'},
+            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.datasheet': {
+            'Meta': {'object_name': 'Datasheet'},
+            'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
+            'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+            'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
+            'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
+            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+            'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+            'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+            'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']", 'null': 'True'}),
+            'original_creation_date': ('django.db.models.fields.DateField', [], {}),
+            'original_modification_date': ('django.db.models.fields.DateField', [], {}),
+            'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
+            'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
+            'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
+            'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
+            'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.datasheet_college_periods': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+        },
+        'hdabo.datasheet_college_themes': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.datasheet_domains': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.datasheet_highschool_periods': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+        },
+        'hdabo.datasheet_highschool_themes': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.datasheet_primary_periods': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
+            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
+        },
+        'hdabo.datasheet_primary_themes': {
+            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sort_value': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.documentformat': {
+            'Meta': {'object_name': 'DocumentFormat'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+        },
+        'hdabo.domain': {
+            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+            'school_period': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdabo.location': {
+            'Meta': {'object_name': 'Location'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
+        },
+        'hdabo.organisation': {
+            'Meta': {'object_name': 'Organisation'},
+            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+            'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.tag': {
+            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
+            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
+            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
+            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
+            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
+            'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.tagcategory': {
+            'Meta': {'object_name': 'TagCategory'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
+        },
+        'hdabo.taggedsheet': {
+            'Meta': {'object_name': 'TaggedSheet'},
+            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
+            'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+            'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
+            'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
+        },
+        'hdabo.timeperiod': {
+            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
+            'school_period': ('django.db.models.fields.IntegerField', [], {})
+        },
+        'hdalab.country': {
+            'Meta': {'object_name': 'Country'},
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+        },
+        'hdalab.datasheetextras': {
+            'Meta': {'object_name': 'DatasheetExtras'},
+            'datasheet': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'extras'", 'unique': 'True', 'to': "orm['hdabo.Datasheet']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'insee': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.InseeCoords']", 'null': 'True', 'blank': 'True'})
+        },
+        'hdalab.dbpediafields': {
+            'Meta': {'object_name': 'DbpediaFields'},
+            'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'tag': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'unique': 'True', 'null': 'True', 'to': "orm['hdabo.Tag']"}),
+            'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        },
+        'hdalab.dbpediafieldstranslation': {
+            'Meta': {'unique_together': "(('master', 'language_code'),)", 'object_name': 'DbpediaFieldsTranslation'},
+            'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_abstract_translated': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'is_label_translated': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'blank': 'True'}),
+            'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
+            'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'to': "orm['hdalab.DbpediaFields']"})
+        },
+        'hdalab.geoinclusion': {
+            'Meta': {'object_name': 'GeoInclusion'},
+            'country': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'includes'", 'to': "orm['hdalab.Country']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'tag': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'locatedin'", 'unique': 'True', 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.hdasession': {
+            'Meta': {'object_name': 'HdaSession'},
+            'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
+        },
+        'hdalab.infoboxparameter': {
+            'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
+        },
+        'hdalab.inseecoords': {
+            'Meta': {'object_name': 'InseeCoords'},
+            'city_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'insee': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
+            'latitude': ('django.db.models.fields.FloatField', [], {}),
+            'longitude': ('django.db.models.fields.FloatField', [], {})
+        },
+        'hdalab.taginfobox': {
+            'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+            'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+            'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.taglinks': {
+            'Meta': {'object_name': 'TagLinks'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
+            'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.tagwpcategory': {
+            'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
+            'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
+            'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tags'", 'to': "orm['hdalab.WpCategory']"})
+        },
+        'hdalab.tagyears': {
+            'Meta': {'object_name': 'TagYears'},
+            'end_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
+        },
+        'hdalab.wpcategory': {
+            'Meta': {'object_name': 'WpCategory'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
+        },
+        'hdalab.wpcategoryinclusion': {
+            'Meta': {'unique_together': "(('parent_category', 'child_category'),)", 'object_name': 'WpCategoryInclusion'},
+            'child_category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'parent_categories'", 'to': "orm['hdalab.WpCategory']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'parent_category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'child_categories'", 'to': "orm['hdalab.WpCategory']"})
+        }
+    }
+
+    complete_apps = ['hdalab']
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/models/__init__.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,5 @@
+from hdalab.models.categories import (WpCategory, InfoboxParameter, TagInfobox, 
+    TagWpCategory, WpCategoryInclusion)
+from hdalab.models.dataviz import TagYears, Country, GeoInclusion, TagLinks, DbpediaFields, HdaSession, InseeCoords, DatasheetExtras, DbpediaFieldsTranslation
+
+__all__ = ['WpCategory', 'InfoboxParameter', 'TagInfobox', 'TagWpCategory', 'TagYears', 'Country', 'GeoInclusion', 'TagLinks', 'DbpediaFields', 'DbpediaFieldsTranslation', 'HdaSession', 'InseeCoords', 'DatasheetExtras', 'WpCategoryInclusion']
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/models/categories.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,56 @@
+'''
+Created on Jan 26, 2012
+
+@author: ymh
+'''
+from django.db import models
+from hdabo.models import Tag
+
+
+class WpCategory(models.Model):
+    label = models.CharField(max_length=2048, unique=True, blank=False, null=False)
+    
+    def __unicode__(self):
+        return unicode(self.label)
+    
+    class Meta:
+        app_label = 'hdalab'
+        verbose_name_plural = "WpCategories"
+
+class TagWpCategory(models.Model):
+    tag = models.ForeignKey(Tag, related_name="wp_categories")
+    wp_category = models.ForeignKey(WpCategory, related_name="tags")
+    hidden = models.BooleanField(blank=False, null=False)
+    
+    class Meta:
+        app_label = 'hdalab'
+        unique_together = ('tag', 'wp_category', 'hidden')
+
+class TagInfobox(models.Model):
+    tag = models.ForeignKey(Tag, related_name="infoboxes")
+    name = models.CharField(max_length=2048, unique=False, blank=False, null=False)
+    source = models.TextField(unique=False, blank=True, null=True)
+    revision_id = models.BigIntegerField(unique=False, blank=True, null=True)
+    
+    class Meta:
+        app_label = 'hdalab'
+        unique_together = ('tag','name','revision_id')
+    
+class InfoboxParameter(models.Model):
+    tag_infobox = models.ForeignKey(TagInfobox)
+    param_name = models.CharField(max_length=2048, unique=False, blank=False, null=False)
+    param_value = models.TextField(unique=False, blank=True, null=True)
+
+    class Meta:
+        app_label = 'hdalab'
+        unique_together = ('tag_infobox','param_name')
+
+# Added on 02/07/2012
+
+class WpCategoryInclusion(models.Model):
+    parent_category = models.ForeignKey(WpCategory, related_name="child_categories")
+    child_category = models.ForeignKey(WpCategory, related_name="parent_categories")
+    
+    class Meta:
+        app_label = 'hdalab'
+        unique_together = ('parent_category','child_category')
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/models/dataviz.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,93 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Jan 27, 2012
+
+@author: ymh
+'''
+from django.db import models
+from hdabo.models import Tag, Datasheet
+
+
+class TagYears(models.Model):
+    
+    tag = models.ForeignKey(Tag, related_name="years", blank=False, null=False, db_index=True)
+    start_year = models.IntegerField(blank=False, null=False, db_index=True)
+    end_year = models.IntegerField(blank=False, null=False, db_index=True)
+    
+    class Meta:
+        app_label = 'hdalab'
+        
+
+class TagLinks(models.Model):
+    
+    subject = models.ForeignKey(Tag, blank=False, null=False, db_index=True, related_name="taglinks_subjects")
+    object = models.ForeignKey(Tag, blank=False, null=False, db_index=True, related_name="taglinks_objects")
+    
+    class Meta:
+        app_label = 'hdalab'
+
+class Country(models.Model):
+    
+    dbpedia_uri = models.URLField(verify_exists=False, max_length=255, blank=False, null=False, db_index=True, unique=True)
+    
+    class Meta:
+        app_label = 'hdalab'
+
+class GeoInclusion(models.Model):
+    
+    tag = models.OneToOneField(Tag, related_name="locatedin", db_index=True)
+    country = models.ForeignKey(Country, blank=False, null=False, related_name="includes", db_index=True)
+    
+    class Meta:
+        app_label = 'hdalab'
+
+class DbpediaFields(models.Model):
+
+    dbpedia_uri = models.URLField(verify_exists=False, max_length=2048, blank=False, null=False, db_index=True, unique=False)
+    tag = models.OneToOneField(Tag, blank=True, null=True, db_index=True, related_name="dbpedia_fields")
+    abstract = models.TextField(blank=True, null=True)
+    thumbnail = models.URLField(verify_exists=False, max_length=2048, blank=True, null=True, db_index=False)    
+    label = models.CharField(max_length=2048, unique=False, blank=True, null=True)
+
+    class Meta:
+        app_label = 'hdalab'
+
+
+class DbpediaFieldsTranslation(models.Model):
+
+    master = models.ForeignKey(DbpediaFields, blank=False, null=False, db_index=True, related_name="translations")
+    language_code = models.CharField(max_length=15, blank=False, null=False, db_index=True)
+    label = models.CharField(max_length=2048, unique=False, blank=True, null=False)
+    abstract = models.TextField(blank=True, null=True)
+    is_label_translated = models.BooleanField(default=True)
+    is_abstract_translated = models.BooleanField(default=True)
+    class Meta:
+        app_label = 'hdalab'
+        unique_together = ('master', 'language_code')
+
+
+class HdaSession(models.Model):
+    
+    sessionid = models.CharField(max_length=36, unique=True, blank=False, null=False, db_index=True)
+    data = models.TextField(blank=True, null=True)
+    
+    class Meta:
+        app_label = 'hdalab'
+
+class InseeCoords(models.Model):
+    
+    insee = models.IntegerField(primary_key=True)
+    city_name = models.CharField(max_length=255, blank=False, null=False)
+    latitude = models.FloatField(blank=False, null=False)
+    longitude = models.FloatField(blank=False, null=False)
+    
+    class Meta:
+        app_label = 'hdalab'
+
+class DatasheetExtras(models.Model):
+    
+    datasheet = models.OneToOneField(Datasheet, related_name="extras", db_index=True)
+    insee = models.ForeignKey(InseeCoords, blank=True, null=True, db_index=True)
+    
+    class Meta:
+        app_label = 'hdalab'
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/modwsgi.wsgi	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,38 @@
+import os
+import sys
+import site
+
+
+
+def application(environ, start_response):
+    
+    global g_env_set
+    
+    if 'g_env_set' not in globals() or not g_env_set:
+        os.environ['DJANGO_SETTINGS_MODULE'] = environ['DJANGO_SETTINGS_MODULE']
+    
+        prev_sys_path = list(sys.path)
+    
+        sys.path.append(environ['PROJECT_PATH'])
+        for path in environ.get('PYTHON_PATH', "").split(os.pathsep):
+            if path:
+                site.addsitedir(path) #@UndefinedVariable
+    
+        new_sys_path = [] 
+        for item in list(sys.path): 
+            if item not in prev_sys_path and item not in new_sys_path: 
+                new_sys_path.append(item) 
+                sys.path.remove(item)
+        sys.path[:0] = new_sys_path
+        g_env_set = True 
+
+    import django.core.handlers.wsgi
+
+    _application = django.core.handlers.wsgi.WSGIHandler()
+
+    if environ.get('PYDEV_DEBUG', "False").lower() in ["true", "1", "t"]:
+        import pydevd #@UnresolvedImport
+        pydevd.settrace(suspend=False)
+
+    return _application(environ, start_response)
+        
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/settings.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,173 @@
+# -*- coding: utf-8 -*-
+# Django settings for hdalab project.
+
+DEBUG = True
+TEMPLATE_DEBUG = DEBUG
+
+ADMINS = (
+    # ('Your Name', 'your_email@example.com'),
+)
+
+MANAGERS = ADMINS
+
+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'
+
+# Language code for this installation. All choices can be found here:
+# http://www.i18nguy.com/unicode/language-identifiers.html
+LANGUAGE_CODE = 'fr-fr'
+
+ugettext = lambda s:s
+
+LANGUAGES = (
+  ('fr', ugettext('French')),
+  ('en', ugettext('English')),
+  ('it', ugettext('Italian')),
+  ('de', ugettext('German')),
+  ('es', ugettext('Spanish')),
+  ('ja', ugettext('Japanese')),
+  #('zh-tw', ugettext('Chinese')),
+)
+
+SITE_ID = 1
+
+# If you set this to False, Django will make some optimizations so as not
+# 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 filesystem path to the directory that will hold user-uploaded files.
+# Example: "/home/media/media.lawrence.com/media/"
+MEDIA_ROOT = ''
+
+# URL that handles the media served from MEDIA_ROOT. Make sure to use a
+# trailing slash.
+# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
+MEDIA_URL = ''
+
+# Absolute path to the directory static files should be collected to.
+# Don't put anything in this directory yourself; store your static files
+# in apps' "static/" subdirectories and in STATICFILES_DIRS.
+# Example: "/home/media/media.lawrence.com/static/"
+STATIC_ROOT = ''
+
+# URL prefix for static files.
+# Example: "http://media.lawrence.com/static/"
+STATIC_URL = '/static/'
+
+# URL prefix for admin static files -- CSS, JavaScript and images.
+# Make sure to use a trailing slash.
+# Examples: "http://foo.com/static/admin/", "/static/admin/".
+#ADMIN_MEDIA_PREFIX = '/static/admin/'
+
+# Additional locations of static files
+STATICFILES_DIRS = (
+    # Put strings here, like "/home/html/static" or "C:/www/django/static".
+    # Always use forward slashes, even on Windows.
+    # Don't forget to use absolute paths, not relative paths.
+)
+
+# List of finder classes that know how to find static files in
+# various locations.
+STATICFILES_FINDERS = (
+    'django.contrib.staticfiles.finders.FileSystemFinder',
+    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
+#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
+)
+
+# Make this unique, and don't share it with anybody.
+SECRET_KEY = 'u!@fo&-)d-hqz7==jmc2*_^__wod8$k^lb7^)y@ihbok)gn4fe'
+
+# List of callables that know how to import templates from various sources.
+TEMPLATE_LOADERS = (
+    'django.template.loaders.filesystem.Loader',
+    'django.template.loaders.app_directories.Loader',
+#     'django.template.loaders.eggs.Loader',
+)
+
+MIDDLEWARE_CLASSES = (
+    'django.contrib.sessions.middleware.SessionMiddleware',
+    'django.middleware.locale.LocaleMiddleware',
+    'django.middleware.common.CommonMiddleware',
+    'django.middleware.csrf.CsrfViewMiddleware',
+    'django.contrib.auth.middleware.AuthenticationMiddleware',
+    'django.contrib.messages.middleware.MessageMiddleware',
+)
+
+ROOT_URLCONF = 'hdalab.urls'
+
+TEMPLATE_DIRS = (
+    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
+    # Always use forward slashes, even on Windows.
+    # Don't forget to use absolute paths, not relative paths.
+)
+
+INSTALLED_APPS = (
+    'south',
+    'django.contrib.auth',
+    'django.contrib.contenttypes',
+    'django.contrib.sessions',
+    'django.contrib.sites',
+    'django.contrib.messages',
+    'django.contrib.staticfiles',
+    'django.contrib.admin',
+    'django_extensions',
+    'hdabo',
+    'hdalab',
+)
+
+# A sample logging configuration. The only tangible logging
+# performed by this configuration is to send an email to
+# the site admins on every HTTP 500 error.
+# See http://docs.djangoproject.com/en/dev/topics/logging for
+# more details on how to customize your logging configuration.
+#LOGGING = {
+#    'version': 1,
+#    'disable_existing_loggers': False,
+#    'handlers': {
+#        'mail_admins': {
+#            'level': 'ERROR',
+#            'class': 'django.utils.log.AdminEmailHandler'
+#        }
+#    },
+#    'loggers': {
+#        'django.request': {
+#            'handlers': ['mail_admins'],
+#            'level': 'ERROR',
+#            'propagate': True,
+#        },
+#    }
+#}
+
+HAYSTACK_SITECONF = 'hdabo.search.sites'
+HAYSTACK_SEARCH_ENGINE = 'hdabo.search.french_whoosh'
+#HAYSTACK_WHOOSH_PATH = os.path.abspath(BASE_DIR + "../index/").rstrip("/") + "/"
+
+WIKIPEDIA_API_URL = "http://fr.wikipedia.org/w/api.php"
+WIKIPEDIA_VERSION_PERMALINK_TEMPLATE = "http://fr.wikipedia.org/w/index.php?oldid=%s"
+DBPEDIA_URI_TEMPLATE = "http://dbpedia.org/resource/%s"
+
+LOCALE_PATHS = ()
+
+from hdalab.config import * #@UnusedWildImport
+
Binary file src/hdalab/static/hdalab/css/DroidSerif-Bold.ttf has changed
Binary file src/hdalab/static/hdalab/css/DroidSerif-BoldItalic.ttf has changed
Binary file src/hdalab/static/hdalab/css/DroidSerif-Italic.ttf has changed
Binary file src/hdalab/static/hdalab/css/DroidSerif-Regular.ttf has changed
Binary file src/hdalab/static/hdalab/css/OpenSans-Bold.ttf has changed
Binary file src/hdalab/static/hdalab/css/OpenSans-BoldItalic.ttf has changed
Binary file src/hdalab/static/hdalab/css/OpenSans-Italic.ttf has changed
Binary file src/hdalab/static/hdalab/css/OpenSans-Regular.ttf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/css/cattree.css	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,52 @@
+.leftzone {
+    width: 280px;
+    min-height: 400px;
+    float: left;
+    height: 100%;
+    padding-right: 20px;
+    border-right: 1px solid #999;
+}
+
+.leftzone h2 {
+    font-size: 16px; font-weight: bold; margin-bottom: 5px;
+}
+
+.leftzone h3 {
+    font-size: 13px; font-weight: bold; margin: 30px 0 5px;
+}
+
+.leftzone input {
+    background: #ffffff; width: 260px; font-size: 14px; font-weight: bold; margin: 5px 0;
+}
+
+.results {
+    margin-top: 30px;
+}
+
+.content-results {
+    color: #000060;
+}
+
+ul.disciplist, ul.theslist {
+    list-style: none; margin: 10px 5px;
+}
+
+.disciplist li, .theslist li {
+    font-size: 12px; font-weight: bold;
+}
+
+.disciplist a, .theslist a {
+    color: #000066;
+}
+
+.disciplist .selected a, .theslist .selected a {
+    color: #0000ff;
+}
+
+.ui-autocomplete strong {
+    font-weight: bold; color: #990000;
+}
+
+div.cattree {
+    margin: 10px 0 0 320px;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/css/common.css	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,141 @@
+@font-face
+{
+    font-family: "Open Sans"; src: url(OpenSans-Regular.ttf);
+}
+
+@font-face
+{
+    font-family: "Open Sans"; font-weight: bold; src: url(OpenSans-Bold.ttf);
+}
+
+@font-face
+{
+    font-family: "Open Sans"; font-style: italic; src: url(OpenSans-Italic.ttf);
+}
+
+@font-face
+{
+    font-family: "Open Sans"; font-weight: bold; font-style: italic; src: url(OpenSans-BoldItalic.ttf);
+}
+
+/* Browser-reset CSS */
+
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, canvas, details, embed, 
+figure, figcaption, footer, header, hgroup, 
+menu, nav, output, ruby, section, summary,
+time, mark, audio, video {
+    margin: 0;
+    padding: 0;
+    border: 0;
+    font-size: 100%;
+    font: inherit;
+    vertical-align: baseline;
+}
+
+input::-moz-focus-inner /*Remove button padding in FF*/
+{ 
+    border: 0;
+    padding: 0;
+}
+
+table {
+    border-collapse: separate; border-spacing: 0;
+}
+
+th, td {
+    vertical-align: top;
+}
+
+img a {
+    border: none;
+}
+
+/* Body */
+
+body {
+    font-family: "Open Sans", Arial, Helvetica, sans-serif; background: url(../img/bgdhdalab.png) top repeat-x #ffffff; color: #000000; font-size: 10px;
+}
+
+input, textarea {
+    font-family: "Open Sans", Arial, Helvetica, sans-serif; background: transparent;
+}
+
+a {
+    text-decoration: none;
+}
+
+a:hover {
+    text-decoration: underline;
+}
+
+/* Main container */
+
+#header {
+    position: relative; width: 960px; margin: 0 auto; height: 65px;
+}
+
+#container {
+    position: relative; width: 960px; margin: 0 auto; min-height: 800px;
+}
+
+h1 {
+    margin: 5px 0 10px; font-size: 34px;
+}
+
+h1 a {
+    color: #ffffff;
+}
+
+h1 a:hover {
+    color: #e07000;
+}
+
+#nav {
+    float: right; list-style: none; margin-top: 3px;
+}
+
+#nav li {
+    float: left; font-size: 14px; margin-left: 15px; font-weight: bold;
+    color: #CCCCCC;
+}
+
+#nav a {
+    color: #ffffff;
+}
+
+#nav a:hover {
+    color: #e07000;
+}
+
+#nav a.actif {
+    color: #ffff80;
+}
+
+#footer {
+    width: 100%; float: left; clear: both; background: url(../img/bgdfooter.png) top repeat-x #b1b4c0; padding: 110px 0 20px 0;
+}
+
+#footer-contents {
+    list-style: none; width: 960px; margin: 0 auto; color: #ffffff;
+}
+
+#footer-contents li {
+    float: left; width: 240px;
+}
+
+#footer-contents p {
+    font-size: 13px; margin: 2px 0;
+}
+
+#footer-contents img {
+    display: block; margin: 0 auto;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/css/completion.css	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,195 @@
+#titlebar, #columns {
+    width: 100%;
+    clear: both;
+}
+
+.langbutton {
+    width: 19px; height: 13px; margin: 2px; padding: 0; border: none; text-indent: -999px; background-position: 0 -26px; cursor: pointer;
+}
+
+.langbutton:hover {
+    background-position: 0 -13px;
+}
+
+.langbutton.selected {
+    background-position: 0 0; cursor: default;
+}
+
+.barrebloc {
+    float: left; width: 473px; border: 1px solid #b0b0b0;
+    background-image: url(../img/bgdhdalab.png); background-position: 0 -22px; background-repeat: repeat-x; cursor: pointer; cursor: hand;
+    border-top-left-radius: 4px; border-top-right-radius: 4px
+}
+
+.barrebloc h2 {
+    margin: 4px 0; font-size: 16px; text-align: center; color: #ffffff; font-weight: bold;
+}
+
+.bloc {
+    float: left; width: 475px; margin-bottom: 10px;
+}
+
+#bloc_translationinfo {
+	color: #666;
+	font-style: italic;
+}
+
+.corpsbloc {
+    float: left; width: 465px; border: 1px solid #b0b0b0; padding: 8px 4px; border-top-style: none;
+    background-color: #ffffff; background-image: url(../img/bgdhdalab.png); background-position: 0 -62px; background-repeat: repeat-x;
+    border-bottom-left-radius: 4px; border-bottom-right-radius: 4px
+}
+
+#hdatitle {
+    float: left; width: 475px; margin: 5px 0; font-size: 20px;
+}
+
+#titleleft {
+	float: left;
+}
+
+#titleright {
+    float: right;
+}
+
+#langselect {
+	float: right;
+}
+
+#leftcol {
+    float: left; width: 475px; margin-right: 5px;
+}
+
+#rightcol {
+    float: left; width: 475px; margin-left: 5px;
+}
+
+#contentlist {
+    list-style: none;
+}
+
+li.content-item {
+    margin: 2px 0 12px;
+}
+
+.content-item h3 {
+    font-size: 18px; margin: 3px 0; clear: both;
+}
+
+.content-item h4 {
+    font-size: 11px; margin: 3px 0;
+}
+
+.content-item h4 a {
+    color: #000066;
+}
+
+.maplet {
+    float: right;
+}
+
+.content-item p {
+    font-size: 12px; margin: 3px 0;
+}
+
+.content-annotation ul {
+    list-style : disc; margin: 2px 0; padding-left: 1.5em; font-size: 12px;
+    cursor: pointer; cursor: hand;
+}
+
+.content-annotation li {
+    margin: 2px 0;
+}
+
+.content-annotation textarea {
+    width: 99%; margin: 0; padding: 0; font-size: 12px;
+}
+
+ul.content-tags {
+    list-style: none;
+}
+
+li.content-tag-item {
+    display: inline-block; margin: 2px; padding: 2px; font-size: 13px; background: #666666;
+}
+
+.content-tag-item a {
+    color: #ffffff;
+}
+
+.content-tag-item a:hover {
+    color: #ff8080;
+}
+
+.content-tag-item a.tagmatch {
+    color: #ffff00; font-weight: bold;
+}
+
+#taginfo p, h2, h3  {
+    margin: 5px 0;
+}
+
+#taginfo h3 {
+    font-size: 14px;
+}
+
+#taginfo p {
+    font-size: 11px;
+}
+
+#img_wikipedia {
+    float: left; max-width: 160px; max-height: 120px; margin: 2px 2px 2px 0;
+}
+
+#tagsearch {
+    width: 100%; font-size: 16px; font-weight: bold; border-style: none; border-bottom: 1px solid #000;
+}
+
+#tagsearch.waiting {
+    background: url(../img/small-loader.gif) no-repeat right;
+}
+
+ul.ui-autocomplete {
+    font-family: "Open Sans"; max-width: 230px;
+    max-height: 400px; overflow-y: auto; overflow-x: hidden;
+}
+
+.wpinfo {
+    margin-left: 240px;
+}
+
+.ui-menu-item:hover .acwp {
+    display: block;
+}
+
+.acnb {
+    float: right; font-size: 12px; margin: 2px 0 0 2px;
+}
+
+.actitle {
+    font-size: 13px;
+}
+
+.wptitle {
+    font-size: 13px; font-weight: bold;
+}
+
+.wpimg {
+    max-width: 80px; max-height: 60px; float: left; margin: 5px 2px 2px 0; border: none;
+}
+
+.wpabstract {
+    font-size: 11px;
+}
+
+.wpsource {
+    font-size: 10px; font-style: bold;
+}
+
+.clear {
+    clear: both;
+}
+
+.actitle strong, .wptitle strong {
+    color: #c000c0;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/css/facettes.css	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,490 @@
+.langbutton {
+    width: 19px; height: 13px; margin: 2px; padding: 0; border: none; text-indent: -999px; background-position: 0 -26px; cursor: pointer;
+}
+
+.langbutton:hover {
+    background-position: 0 -13px;
+}
+
+.langbutton.selected {
+    background-position: 0 0; cursor: default;
+}
+
+.barrebloc {
+    float: left; width: 473px; border: 1px solid #b0b0b0;
+    background-image: url(../img/bgdhdalab.png); background-position: 0 -22px; background-repeat: repeat-x; cursor: pointer; cursor: hand;
+    border-top-left-radius: 4px; border-top-right-radius: 4px
+}
+
+.barrebloc h2 {
+    margin: 4px 0; font-size: 16px; text-align: center; color: #ffffff; font-weight: bold;
+}
+
+.bloc, #bloc_gestvue {
+    float: left; width: 475px; margin-bottom: 10px;
+}
+
+#bloc_translationinfo {
+	color: #666;
+	font-style: italic;
+}
+
+.corpsbloc {
+    float: left; width: 465px; border: 1px solid #b0b0b0; padding: 8px 4px; border-top-style: none;
+    background-color: #ffffff; background-image: url(../img/bgdhdalab.png); background-position: 0 -62px; background-repeat: repeat-x;
+    border-bottom-left-radius: 4px; border-bottom-right-radius: 4px
+}
+
+#hdatitle {
+    float: left; width: 475px; margin: 5px 0; font-size: 20px;
+}
+
+#sessionname {
+    color: #600000; font-size: 22px;
+}
+
+#hdatitle .lectseul {
+    font-size: 17px;
+}
+
+#hdatitle input {
+    display: inline; font-size: 18px; font-weight: bold;
+}
+
+
+#titleleft {
+	float: left;
+}
+
+#titleright {
+    float: right;
+}
+
+#langselect {
+	float: right;
+}
+
+
+#apartager {
+    float: right; font-size: 14px; clear: right;
+}
+
+
+#vues {
+    float: right; text-align: right; width: 475px; margin: 2px 0; clear: right;
+}
+
+#vuestitre {
+     display: inline; padding: 2px 4px; font-size: 15px;
+}
+
+#ongletsvues {
+    display: inline; list-style: none;
+}
+
+li.lienvue {
+    display: inline; padding: 3px; font-size: 13px; font-weight: bold;
+}
+
+.lienvue a, #apartager a {
+    color: #666666;
+}
+
+.lienvue.actif a, #apartager.actif a {
+    color: #cc0066;
+}
+
+#nouvellevue a {
+    font-weight: bold; color: #ff3000; font-size: 16px;
+}
+
+#partageurls, #plusdevues {
+    float: right; text-align: right; clear: both; margin: 2px 0;
+    font-size: 13px; display: none; width: 100%;
+}
+
+#partageurls ul {
+    list-style: none;
+}
+
+#partageurls li {
+    float: right; margin-left: 5px; padding: 4px; font-weight: bold;
+}
+
+#partageurls li.actif {
+    background: #000080;
+}
+
+#partageurls li.actif a {
+    color: #ffffff;
+}
+
+#zc-partageligne {
+    float: right; clear: both; margin-top: 3px; width: 100%; font-size: 13px; text-align: right;
+}
+
+#zc-partageinput {
+    width: 360px; padding: 2px; border: 1px solid #999999;
+}
+
+#zc-partageinput.hover {
+    background: #000080; color: #ffffff;
+}
+
+#zc-partageinput.active {
+    background: #800000; color: #ffffff;
+}
+
+#plusdevues {
+    list-style: none;
+}
+
+.myurl {
+    font-weight: bold;
+}
+
+#timeline {
+    float: left; width: 100%; margin: 15px 0;
+}
+
+#dates {
+    list-style: none; float: left; width: 100%; height: 0;
+}
+
+#dates li {
+    position: absolute; width: 1px; height: 20px; background: rgba(0,0,0,.3); z-index: 2;
+}
+
+div.datelabel {
+    width: 60px; margin: 4px 0 0 -30px; font-size: 10px; text-align: center; opacity: .8;
+}
+
+#dateheat {
+    float: left; width: 100%; height: 20px; z-index: 1;
+}
+
+.handle {
+    position: absolute; width: 0; z-index: 2; cursor: pointer; cursor: hand;
+}
+
+.handleinner {
+    float: left; border: 5px solid #999; background: #fff;
+    height: 30px; width: 10px; margin-top: -10px; border-radius: 4px;
+    opacity: .8;
+}
+
+.handleinner:hover {
+    background: #ccc;
+}
+
+.ui-draggable-dragging .handleinner {
+    background: #660000; color: #ffffff;
+}
+
+#leftcol {
+    float: left; width: 475px; margin-right: 5px;
+}
+
+#bandefiltre {
+    float: left; width: 100%; margin-top: 10px;
+}
+
+#filtertitle {
+    float: left; margin: 1px 0; font-size: 13px; font-weight: bold;
+}
+
+#filters {
+    list-style: none; float: left; margin: 0 20px; font-size: 12px;
+}
+
+#filters li {
+    float: left; padding: 2px 3px; margin-right: 5px; font-weight: bold;
+}
+
+#filters a {
+    color: #666666;
+}
+
+#filters li.nofilter {
+    font-style: italic; color: #ff3030;
+}
+
+#filters li.filtag {
+    color: #ffffff; background: #000066;
+}
+
+#filters li.filcountry {
+    color: #ffffff; background: #cc0066;
+}
+
+#filters li.filperiod {
+    color: #ffffff; background: #e07000;
+}
+
+span.spyr {
+     cursor: pointer; cursor: hand;
+}
+
+.spyr input {
+    display: inline; margin: 0; padding: 0; font-size: 11px;
+}
+
+#contentcount {
+    float: left; width: 100%; text-align: right; font-size: 13px; margin: 2px 0;
+}
+
+#filters a.remfil {
+    color: #cccccc; margin-left: 2px;
+}
+
+#map {
+    height: 250px;
+}
+
+.leaflet-container {
+    background: #e3e9fd url(../img/bgmap.png);
+}
+
+#tagcloud {
+    text-align: center;
+}
+
+#tclist {
+    list-style: none;
+}
+
+#tclist li {
+    display: inline-block; margin: 2px 5px;
+}
+
+#tclist a {
+    color: #000000;
+}
+
+#tclist a.tagmatch {
+    color: #0000cc;
+}
+
+#tclist a:hover {
+    color: #800000;
+}
+
+#rightcol {
+    float: left; width: 475px; margin-left: 5px;
+}
+
+#disciplines {
+    
+}
+
+.disc-ul {
+    float: left; clear: both; list-style: none;
+}
+
+.disc-li {
+    float: left; width: 230px; margin: 2px 0;
+}
+
+.disc-label {
+    float: left; font-size: 13px; width: 100px; text-align: right; margin-right: 5px; line-height: 13px;
+}
+
+.disc-bar {
+    float: left; height: 14px; margin: 2px 0; cursor: pointer; cursor: hand;
+}
+
+.disc-bar:hover {
+    background: #80a0ff;
+}
+
+#contentlist {
+    list-style: none;
+}
+
+li.content-item {
+    margin: 2px 0 12px;
+}
+
+.content-item h3 {
+    font-size: 18px; margin: 3px 0;
+}
+
+.content-item h3 a, .content-item p a {
+    color: #000000;
+}
+
+.content-item h4 {
+    font-size: 11px; margin: 3px 0;
+}
+
+.content-item h4 a {
+    color: #000066;
+}
+
+.maplet {
+    float: right;
+}
+
+.content-item p {
+    font-size: 12px; margin: 3px 0;
+}
+
+.content-annotation ul {
+    list-style : disc; margin: 2px 0; padding-left: 1.5em; font-size: 12px;
+    cursor: pointer; cursor: hand;
+}
+
+.content-annotation li {
+    margin: 2px 0;
+}
+
+.content-annotation textarea {
+    width: 99%; margin: 0; padding: 0; font-size: 12px;
+}
+
+ul.content-tags {
+    list-style: none;
+}
+
+li.content-tag-item {
+    display: inline-block; margin: 2px; padding: 2px; font-size: 13px; background: #666666;
+}
+
+.content-tag-item a {
+    color: #ffffff;
+}
+
+.content-tag-item a:hover {
+    color: #ff8080;
+}
+
+.content-tag-item a.tagmatch {
+    color: #ffff00; font-weight: bold;
+}
+
+#tagcount {
+    float: right; text-align: right; font-size: 14px; font-weight: bold;
+}
+
+#taginfo p, h2, h3  {
+    margin: 5px 0;
+}
+
+#taginfo h3 {
+    font-size: 14px;
+}
+
+#taginfo p {
+    font-size: 11px;
+}
+
+#img_wikipedia {
+    float: left; max-width: 160px; max-height: 120px; margin: 2px 2px 2px 0;
+}
+
+#gestvue {
+    display: none;
+}
+
+#div_titrevue {
+    margin: 5px 0;
+}
+
+#div_titrevue label {
+    font-size: 14px;
+}
+
+#titrevue {
+    font-size: 15px; margin: 0 0 0 5px; width: 220px; padding: 2px; border-style: none; border-bottom: 1px solid #000;
+}
+
+#gestvue h4 {
+    margin: 2px 0; font-size: 14px;
+}
+
+#widgetlist {
+    list-style: none; width: 100%;
+}
+
+#widgetlist li {
+    float: left; width: 48%;
+}
+
+#widgetlist label {
+    font-size: 13px;
+}
+
+#notes ul {
+    font-size: 13px; margin: 0; padding-left: 1.5em;
+}
+
+#notes textarea {
+    width: 99%; font-size: 13px;
+}
+
+#waitcontainer {
+    float: left; clear: both; width: 100%; height: 0; position: relative;
+}
+
+#waiting {
+    position: absolute; width: 100%; height: 600px; background: #ffffff; opacity: .8; z-index: 100;
+}
+
+.waittick {
+    position: absolute; width: 10px; height: 10px; background: #000000; border-radius: 5px; display: none;
+}
+
+/* COMPLETION */
+
+#tagsearch {
+    width: 100%; font-size: 16px; font-weight: bold; border-style: none; border-bottom: 1px solid #000;
+}
+
+#tagsearch.waiting {
+    background: url(../img/small-loader.gif) no-repeat right;
+}
+
+ul.ui-autocomplete {
+    font-family: "Open Sans"; max-width: 230px;
+    max-height: 400px; overflow-y: auto; overflow-x: hidden;
+}
+
+.wpinfo {
+    margin-left: 240px;
+}
+
+.ui-menu-item:hover .acwp {
+    display: block;
+}
+
+.acnb {
+    float: right; font-size: 12px; margin: 2px 0 0 2px;
+}
+
+.actitle {
+    font-size: 13px;
+}
+
+.wptitle {
+    font-size: 13px; font-weight: bold;
+}
+
+.wpimg {
+    max-width: 80px; max-height: 60px; float: left; margin: 5px 2px 2px 0; border: none;
+}
+
+.wpabstract {
+    font-size: 11px;
+}
+
+.wpsource {
+    font-size: 10px; font-style: bold;
+}
+
+.clear {
+    clear: both;
+}
+
+.actitle strong, .wptitle strong {
+    color: #c000c0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/css/index.css	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,89 @@
+@font-face
+{
+    font-family: "Droid Serif"; src: url(DroidSerif-Regular.ttf);
+}
+
+@font-face
+{
+    font-family: "Droid Serif"; font-weight: bold; src: url(DroidSerif-Bold.ttf);
+}
+
+@font-face
+{
+    font-family: "Droid Serif"; font-style: italic; src: url(DroidSerif-Italic.ttf);
+}
+
+@font-face
+{
+    font-family: "Droid Serif"; font-weight: bold; font-style: italic; src: url(DroidSerif-BoldItalic.ttf);
+}
+
+#container h2 {
+    text-align: center; font-size: 24px; font-style: italic; font-weight: bold; color: #999; margin: 20px 0;
+    font-family: "Droid Serif", "Times New Roman", Times, serif;
+}
+
+#container h3 {
+    color: #666; font-weight: bold; font-size: 18px; text-transform: uppercase; margin: 20px 0 5px;
+}
+
+#container h4 {
+    color: #666; font-weight: bold; font-size: 16px; margin: 0; padding: 10px 0 5px; clear: both;
+}
+
+#container p, #container li {
+   font-size: 13px; margin: 5px 0;
+   font-family: "Droid Serif", "Times New Roman", Times, serif;
+}
+
+#container ul {
+    padding-left: 18px;
+}
+
+#container strong {
+    font-weight: bold;
+}
+
+.liste {
+    clear: both;
+}
+
+.bloc-appli {
+    width: 310px; float: left;
+}
+
+.separateur-applis {
+    width: 15px; height: 100px; float: left;
+}
+
+.fond-bloc {
+    cursor: pointer; height: 290px; margin: 5px 0 15px; padding: 5px;
+}
+
+.overlay-bloc {
+    padding: 5px 10px; background: rgba(255, 190, 100, 0.85); display: none;
+}
+
+p.goto {
+    text-align: right; font-size: 20px;
+}
+
+#bloc-facettes {
+    background: url(../img/facettes-thumb.jpg);
+}
+
+#bloc-categories {
+    background: url(../img/categories-thumb.jpg);
+}
+
+#bloc-thesaurus {
+    background: url(../img/thesaurus-thumb.jpg);
+}
+
+.mini-table {
+    float: left; width: 960px; clear: both; margin: 5px 0;
+}
+
+.half-bloc {
+    float: left; width: 470px; margin-right: 10px;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/css/notice.css	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,115 @@
+h2 {
+    font-size: 20px; font-weight: bold; text-align: center;
+}
+
+.main-datasheet {
+    float: left; width: 300px; border-radius: 3px; padding: 9px; border: 1px solid #999;
+    background: #FFF8F0; margin-top: 10px;
+}
+
+.main-datasheet a {
+    color: #000000;
+}
+
+.main-datasheet h3 {
+    font-size: 16px; font-weight: bold; font-style: italic; margin: 10px 0;
+}
+
+.main-datasheet img {
+    max-width: 173px; float: right; margin: 5px 0 2px 2px; border: 1px solid #999;
+}
+
+.main-datasheet p {
+    font-size: 12px; margin: 5px 0;
+}
+
+.main-datasheet ul {
+    padding-left: 15px; margin: 10px 0 5px;
+}
+
+.main-datasheet li {
+    font-size: 13px; margin: 5px 0; font-weight: bold;
+}
+
+.main-datasheet li a {
+    text-decoration: underline;
+}
+
+.tag-container {
+    float: left; width: 320px; height: 1px; position: relative;
+}
+
+.tag-container h2, .related-datasheets h2 {
+    margin: 10px;
+}
+
+.tag-canvas, .tags-main {
+    position: absolute; top: 0; left: 0;
+}
+
+.tags-main {
+    width: 320px;
+}
+
+.tags {
+    list-style: none; text-align: center;
+}
+
+.tags li {
+    font-size: 12px; line-height: 14px; min-height: 14px; margin: 20px 0; cursor: pointer;
+}
+
+
+.tags span {
+    color: #ffffff; padding: 4px; background: #666680; 
+}
+
+.tags span.selected {
+    color: #FFFF00; font-weight: bold;
+}
+
+.related-datasheets {
+    float: left; width: 320px;
+}
+
+.datasheets {
+    list-style: none;
+}
+
+.datasheet {
+    border-radius: 3px; padding: 4px; border: 1px solid #999; margin: 5px 0;
+    background: #FFF8F0;
+}
+
+.datasheet img {
+    max-width: 86px; float: right; margin: 2px 0 2px 2px; border: 1px solid #999;
+}
+
+.datasheet h3 {
+    font-size: 13px; font-weight: bold; line-height: 13px; margin: 4px 0;
+}
+
+.datasheet h3 a {
+    color: #000000;
+}
+
+.datasheet h4 {
+    font-size: 12px; font-style: italic; line-height: 12px; margin: 4px 0;
+}
+
+.datasheet-tags {
+    list-style: none; /* display: none; */
+}
+
+.datasheet-tags li {
+    padding: 2px; color: #ffffff; background: #999999; margin: 2px 2px 0 0;
+    font-size: 11px; display: inline-block;
+}
+
+.datasheet-tags li.common-tag {
+    font-weight: bold; background: #666680;
+}
+
+.datasheet:hover .datasheet-tags {
+    display: block;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/css/thesaurus.css	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,25 @@
+.column {
+    float: left; width: 449px;
+    padding-left: 20px;
+}
+
+.separator {
+    float: left; width: 1px; height: 500px; margin: 30px 10px 0; background: #666;
+}
+
+.column h3 {
+    font-size: 14px; font-weight: bold;
+    margin: 10px 0;
+}
+
+.explain {
+    font-size: 12px;
+}
+
+.explain p, li {
+    margin: 5px 0;
+}
+
+.explain ul {
+    margin-left: 16px;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/css/trees.css	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,125 @@
+.hidden {
+    display: none;
+}
+
+.cattree .content p.title {
+    font-weight: bold; cursor: pointer;
+}
+
+.cattree .content p.title:before {
+    font-weight: normal;
+}
+
+.cattree .score_0, .cattree .score_1, .cattree .score_0 a, .cattree .score_1 a {
+    color: #80d080;
+}
+
+.cattree .score_2, .cattree .score_3, .cattree .score_4, .cattree .score_2 a, .cattree .score_3 a, .cattree .score_4 a {
+    color: #409840;
+}
+
+.cattree .score_5, .cattree .score_6, .cattree .score_7, .cattree .score_5 a, .cattree .score_6 a, .cattree .score_7 a {
+    color: #006000;
+}
+
+.cattree .score_0:before, .cattree .score_1:before {
+    content: "★☆☆ ";
+}
+
+.cattree .score_2:before, .cattree .score_3:before, .cattree .score_4:before {
+    content: "★★☆ ";
+}
+
+.cattree .score_5:before, .cattree .score_6:before, .cattree .score_7:before {
+    content: "★★★ ";
+}
+
+.cattree .img-container {
+    float: left; margin: 10px 0 0; width: 60px; height: 50px; background: #dddddd;
+}
+
+.cattree .img-container img {
+    min-width: 30px; max-width: 60px; max-height: 50px; margin: 0px auto;
+}
+
+.cattree .content p.description {
+    margin: 4px 0 4px 64px; font-size: 12px; min-height: 50px;
+}
+
+.cattree a.content {
+    color: #000000;
+}
+
+.cattree li, .cattree p.theme {
+    margin: 4px 0; font-size: 12px; position: relative;
+}
+
+.cattree p.theme {
+    color: #000080; height: 20px; cursor: pointer;
+}
+
+.cattree p.theme:after {
+    font-weight: bold;
+    content: " [-]"
+}
+
+.cattree .folded p.theme:after {
+    font-weight: bold;
+    content: " [+]"
+}
+
+.cattree .theme span {
+    font-weight: bold; line-height: 12px;
+}
+
+.cattree ul {
+    list-style: none; position: relative; padding: 0; margin: 0;
+}
+
+.cattree .folded ul {
+    display: none;
+}
+
+.cattree .foldedcontent {
+    height: 0px; overflow: hidden;
+}
+
+.cattree .show_more {
+    color: #800000; font-style: italic; cursor: pointer;
+}
+
+.cattree li {
+    list-style: none;
+}
+
+.cattree ul li {
+    margin-left: 38px;
+}
+
+.cattree ul li:after {
+   content: ""; position: absolute; left: -50px; top: 9px; width: 40px; bottom: 0; border-style: solid none none solid; border-width: 1px; border-color: #333;
+}
+
+.cattree ul li:before {
+    content: ""; position: absolute; left: -50px; top: -10px; height: 19px; width: 1px; background: #333;
+}
+
+.cattree ul li:last-child:after {
+    border-style: solid none none;
+}
+
+.cattree .eltype {
+    font-style: italic; display: none;
+}
+
+.cattree li.themeli {
+    list-style: square;
+}
+
+.cattree li.content {
+    list-style: disc;
+}
+
+.loading {
+    height: 128px; background: url(../img/loader.gif) no-repeat center;
+}
\ No newline at end of file
Binary file src/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png has changed
Binary file src/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png has changed
Binary file src/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png has changed
Binary file src/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png has changed
Binary file src/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png has changed
Binary file src/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png has changed
Binary file src/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png has changed
Binary file src/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png has changed
Binary file src/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png has changed
Binary file src/hdalab/static/hdalab/css/ui-lightness/images/ui-icons_222222_256x240.png has changed
Binary file src/hdalab/static/hdalab/css/ui-lightness/images/ui-icons_228ef1_256x240.png has changed
Binary file src/hdalab/static/hdalab/css/ui-lightness/images/ui-icons_ef8c08_256x240.png has changed
Binary file src/hdalab/static/hdalab/css/ui-lightness/images/ui-icons_ffd27a_256x240.png has changed
Binary file src/hdalab/static/hdalab/css/ui-lightness/images/ui-icons_ffffff_256x240.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/css/ui-lightness/jquery-ui-1.8.16.custom.css	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,405 @@
+/*
+ * jQuery UI CSS Framework 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden { display: none; }
+.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
+.ui-helper-clearfix { display: inline-block; }
+/* required comment for clearfix to work in Opera \*/
+* html .ui-helper-clearfix { height:1%; }
+.ui-helper-clearfix { display:block; }
+/* end clearfix */
+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled { cursor: default !important; }
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
+
+
+/*
+ * jQuery UI CSS Framework 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ *
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
+ */
+
+
+/* Component containers
+----------------------------------*/
+.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; }
+.ui-widget .ui-widget { font-size: 1em; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; }
+.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; }
+.ui-widget-content a { color: #333333; }
+.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
+.ui-widget-header a { color: #ffffff; }
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; }
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; }
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; }
+.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; }
+.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; }
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; }
+.ui-widget :active { outline: none; }
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight  {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; }
+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
+.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; }
+.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; }
+.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; }
+.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary,  .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
+.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); }
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
+.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
+.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); }
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); }
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-off { background-position: -96px -144px; }
+.ui-icon-radio-on { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; }
+.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; }
+.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
+.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
+
+/* Overlays */
+.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); }
+.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -khtml-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/*
+ * jQuery UI Resizable 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Resizable#theming
+ */
+.ui-resizable { position: relative;}
+.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; }
+.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
+.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
+.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
+.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
+.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
+.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
+.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
+.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
+.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
+ * jQuery UI Selectable 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Selectable#theming
+ */
+.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
+/*
+ * jQuery UI Autocomplete 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Autocomplete#theming
+ */
+.ui-autocomplete { position: absolute; cursor: default; }	
+
+/* workarounds */
+* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
+
+/*
+ * jQuery UI Menu 1.8.16
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Menu#theming
+ */
+.ui-menu {
+	list-style:none;
+	padding: 2px;
+	margin: 0;
+	display:block;
+	float: left;
+}
+.ui-menu .ui-menu {
+	margin-top: -3px;
+}
+.ui-menu .ui-menu-item {
+	margin:0;
+	padding: 0;
+	zoom: 1;
+	float: left;
+	clear: left;
+	width: 100%;
+}
+.ui-menu .ui-menu-item a {
+	text-decoration:none;
+	display:block;
+	padding:.2em .4em;
+	line-height:1.5;
+	zoom:1;
+}
+.ui-menu .ui-menu-item a.ui-state-hover,
+.ui-menu .ui-menu-item a.ui-state-active {
+	font-weight: normal;
+	margin: -1px;
+}
+/*
+ * jQuery UI Slider 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Slider#theming
+ */
+.ui-slider { position: relative; text-align: left; }
+.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
+.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
+
+.ui-slider-horizontal { height: .8em; }
+.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
+.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
+.ui-slider-horizontal .ui-slider-range-min { left: 0; }
+.ui-slider-horizontal .ui-slider-range-max { right: 0; }
+
+.ui-slider-vertical { width: .8em; height: 100px; }
+.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
+.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
+.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
+.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
+ * jQuery UI Progressbar 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Progressbar#theming
+ */
+.ui-progressbar { height:2em; text-align: left; }
+.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
\ No newline at end of file
Binary file src/hdalab/static/hdalab/img/bgdfooter.png has changed
Binary file src/hdalab/static/hdalab/img/bgdhdalab.png has changed
Binary file src/hdalab/static/hdalab/img/bgmap.png has changed
Binary file src/hdalab/static/hdalab/img/categories-thumb.jpg has changed
Binary file src/hdalab/static/hdalab/img/facettes-thumb.jpg has changed
Binary file src/hdalab/static/hdalab/img/favicon.ico has changed
Binary file src/hdalab/static/hdalab/img/flag_de.png has changed
Binary file src/hdalab/static/hdalab/img/flag_en.png has changed
Binary file src/hdalab/static/hdalab/img/flag_es.png has changed
Binary file src/hdalab/static/hdalab/img/flag_fr.png has changed
Binary file src/hdalab/static/hdalab/img/flag_it.png has changed
Binary file src/hdalab/static/hdalab/img/flag_ja.png has changed
Binary file src/hdalab/static/hdalab/img/flag_zh-tw.png has changed
Binary file src/hdalab/static/hdalab/img/loader.gif has changed
Binary file src/hdalab/static/hdalab/img/logo_iri.png has changed
Binary file src/hdalab/static/hdalab/img/logo_iri_blanc.png has changed
Binary file src/hdalab/static/hdalab/img/logo_mcc.png has changed
Binary file src/hdalab/static/hdalab/img/logo_mcc_blanc.png has changed
Binary file src/hdalab/static/hdalab/img/small-loader.gif has changed
Binary file src/hdalab/static/hdalab/img/thesaurus-thumb.jpg has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/js/cattree.js	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,60 @@
+function showData(_label, _data) {
+    $(".disciplist li").each(function() {
+        if ($(this).text().trim().toLowerCase() === _label.toLowerCase()) {
+            $(this).addClass("selected");
+        }
+    })
+    $(".label-name").html(_label);
+    if (_data) {
+        renderData($("#tree"), _data, 1);
+        $(".results").show();
+        $(".content-count").html($(".cattree a.content").length);
+        $(".category-count").html(Math.max(0, $("p.category").length - 1));
+        $(".tag-count").html($("p.tag").length);
+    } else {
+        $("#tree").html("");
+        $(".results").hide();
+    }
+}
+
+function gettree(_label) {
+    $(".disciplist li").removeClass("selected");
+    $("#tree").html('<div class="loading"></div>');
+    $.getJSON(
+        endpoints.cat_tree,
+        { label: _label },
+        function(_data) {
+            showData(_label, _data);
+        }
+    );
+}
+
+$(function() {
+    $("#catsearch").autocomplete({
+        source: endpoints.cat_search,
+        minLength: 2,
+        select: function( event, ui ) {
+            gettree(ui.item.value);
+        }
+    })
+    .data("autocomplete")._renderItem = function(ul, item) {
+        return $( "<li></li>" )
+            .data( "item.autocomplete", item )
+            .append(
+                "<a>"
+                + item.label.replace(
+                    new RegExp('('
+                        + $("#catsearch").val().replace(/(\W)/g, '\\$1')
+                        + ')','gi') ,
+                    '<strong>$1</strong>')
+                + "</a>" )
+            .appendTo( ul )
+    };
+    $("#catform").submit(function() {
+        gettree($("#catsearch").val());
+    });
+    gettree("cinéma");
+    $(".disciplist li").click(function() {
+        gettree($(this).text().trim());
+    });
+});
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/js/gomina.js	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,905 @@
+/**
+ * @author raph
+ */
+
+str_format = function() {
+	var s = arguments[0];
+	for (var i = 0; i < arguments.length - 1; i++) {       
+		var reg = new RegExp("\\{" + i + "\\}", "gm");             
+		s = s.replace(reg, arguments[i + 1]);
+	}
+	
+	return s;
+}
+
+var gomNs = {
+    minYear: -5000,
+    maxYear: 2010,
+    tlPixels: 960,
+    tlGamma: 6,
+    heatGamma: 2,
+    displayedDates: [ -5000, 0, 500, 1000, 1200, 1400, 1600, 1700, 1750, 1800, 1850, 1900, 1950, 2010 ],
+    mappingLibrary: 'leaflet',
+    gradientStart: [ 255, 255, 240 ],
+    gradientEnd: [ 255, 160, 30 ],
+    zeroColor: [ 230, 230, 235 ],
+    languageCode: 'fr'
+}
+
+function yearToPx(year) {
+    return gomNs.tlPixels * Math.pow( ( year - gomNs.minYear ) / ( gomNs.maxYear - gomNs.minYear ), gomNs.tlGamma );
+}
+
+function pxToYear(px) {
+    return gomNs.minYear + ( gomNs.maxYear - gomNs.minYear ) * Math.pow( px / gomNs.tlPixels, 1 / gomNs.tlGamma );
+}
+
+function getGradient(_pos) {
+    if (_pos == 0) {
+        var _rgb = gomNs.zeroColor;
+    } else {
+        var _rgb = [],
+            _exp = Math.pow(_pos, 1/gomNs.heatGamma);
+        for (var i=0; i<3; i++) {
+            _rgb.push(Math.floor(_exp*gomNs.gradientEnd[i] + (1-_exp)*gomNs.gradientStart[i]));
+        }
+    }
+    return "rgb(" + _rgb.join(",") + ")"
+}
+
+function polygon_to_gmap(polycoords, dbpedia_uri) {
+    var _opts =  {
+        strokeColor: "#000000",
+        strokeWeight: .5,
+        fillColor: "rgb(" + gomNs.zeroColor.join(",") + ")",
+        fillOpacity: 1
+    }
+    _opts.paths = polycoords.map(function(path) {
+        return path.map(function(coord) {
+            return new google.maps.LatLng(coord[1], coord[0]);
+        });
+    });
+    var _polygon = new google.maps.Polygon(_opts);
+    _polygon.setMap(gomNs.map);
+    google.maps.event.addListener(_polygon, 'click', function(a,b) {
+        addFilter('country', dbpedia_uri);
+    })
+    return _polygon;
+}
+
+function showCountriesGmap(geoJson) {
+    gomNs.countries = {};
+    _(geoJson.features).each(function(feature) {
+        var _el = { "properties" : feature.properties };
+        if (feature.id == 'ATA') {
+            _el.gPolygons = [];
+        } else {
+            switch(feature.geometry.type) {
+                case('Polygon'):
+                    _el.gPolygons = [ polygon_to_gmap(feature.geometry.coordinates, feature.properties.dbpedia_uri) ];
+                break;
+                case('MultiPolygon'):
+                    _el.gPolygons = feature.geometry.coordinates.map(function(polygon) {
+                        return polygon_to_gmap(polygon, feature.properties.dbpedia_uri);
+                    })
+                break;
+            }
+        }
+        gomNs.countries[feature.properties.dbpedia_uri] = _el;
+    });
+}
+
+function showCountriesLeaflet(geoJson) {
+    gomNs.countries = {};
+    var gJ = new L.GeoJSON();
+    gJ.on('featureparse', function(_f) {
+        var isocode = _f.id;
+        _f.layer.setStyle({
+            color: "#000000",
+            weight: .5,
+            fillOpacity: 1,
+            fillColor: "rgb(" + gomNs.zeroColor.join(",") + ")"
+        });
+        _f.layer.on('click', function() {
+            addFilter('country', _f.properties.dbpedia_uri);
+        });
+        gomNs.countries[_f.properties.dbpedia_uri] = {
+            "properties" : _f.properties,
+            "layer" : _f.layer
+        }
+    });
+    gJ.addGeoJSON(geoJson);
+    gomNs.map.addLayer(gJ);
+}
+
+function addFilter(_type, _label) {
+    var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
+    if (_curView.type == 'filter') {
+    	if (_curView[_type].indexOf(_label) < 0) {
+        	_curView[_type].push(_label);
+    	}
+        updateFilters();
+        debouncedSaveChanges();
+    }
+}
+
+function removeFilter(_type, _index) {
+    var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
+    if (_curView.type == 'filter') {
+        _curView[_type].splice(_index,1);
+        updateFilters();
+        debouncedSaveChanges();
+    }
+}
+
+function getUpdates() {
+    var _params = {},
+        _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
+    if (_curView.type == 'filter') {
+        if (!(_curView.period[0] == gomNs.minYear && _curView.period[1] == gomNs.maxYear)) {
+            _params.period = _curView.period.join(',');
+        }
+        if (_curView.tag.length) {
+            _params.label = _curView.tag.join(',');
+        }
+        if (_curView.country.length) {
+            _params.country = _curView.country.join(',');
+        }
+        $.getJSON(gomNs.urls['filter'], _params, updateDisplay);
+        animLoad();
+    }
+}
+
+var debouncedGetUpdates = _.debounce(getUpdates, 300);
+
+function updatePeriod(_n, _val) {
+    var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
+    if (_curView.type == 'filter') {
+        var _int = parseInt(_val);
+        if (_int != NaN) {
+            if ((_n == 1 && _val >= _curView.period[0]) || (_n == 0 && _val <= _curView.period[1])) {
+                _curView.period[_n] = _int;
+            }
+            updateFilters();
+            debouncedSaveChanges();
+        }
+    }
+}
+
+function removePeriod() {
+    var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
+    if (_curView.type == 'filter') {
+        _curView.period[0] = gomNs.minYear;
+        _curView.period[1] = gomNs.maxYear;
+        updateFilters();
+        debouncedSaveChanges();
+    }
+}
+
+function changeSpan(_this) {
+    var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
+    if (_curView.type == 'filter') {
+        if (!$(_this).children().length) {
+            var _el = document.createElement('input'),
+                _n = _this.id.split('_')[1];
+            _el.value = _curView.period[_n];
+            _el.style.width = $(_this).width() + 'px';
+            $(_el).focusout(function() {
+                updatePeriod(_n, this.value);
+            }).keypress(function(e) {
+                if (e.keyCode == 13) {
+                    updatePeriod(_n, this.value);
+                }
+            });
+            $(_this).html(_el);
+            _el.focus();
+            _el.select();
+        }
+    }
+}
+
+function updateFilters() {
+    var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
+    if (_curView.type != 'filter') {
+        return;
+    }
+    var _htmFilters = '',
+        _fl = _curView.tag.length,
+        _cl = _curView.country.length;
+    if (_curView.period[0] == gomNs.minYear && _curView.period[1] == gomNs.maxYear) {
+        _htmFilters += '<li class="filperiod">'+gettext("Toutes periodes")+'</li>';
+    } else {
+        _htmFilters += '<li class="filperiod">'+gettext("Periode&nbsp;:")+' <span class="spyr" id="sp_0" onclick="changeSpan(this);">'
+            + _curView.period[0]
+            + '</span> ' + gettext('a')+' <span class="spyr" id="sp_1" onclick="changeSpan(this);">'
+            + _curView.period[1]
+            + '</span><a href="#" class="remfil" onclick="removePeriod(); return false;">[x]</a></li>';
+    }
+    $("#handle_0").css({
+        "left" : yearToPx(_curView.period[0])+"px",
+    }).attr("year", _curView.period[0])
+    .find(".handleinner")
+    .css({
+        "margin-left" : "-20px"
+    });
+    $("#handle_1").css({
+        "left" : yearToPx(_curView.period[1])+"px",
+    }).attr("year", _curView.period[1])
+    .find(".handleinner")
+    .css({
+        "margin-left" : "0"
+    });
+    if (_cl) {
+        _htmFilters += _(_curView.country).map(function(_t, _i) {
+            return '<li class="filcountry">'+gettext('Pays&nbsp;:')+' '
+                + ( (typeof gomNs.countries == "object" && typeof gomNs.countries[_t] == "object") ? gomNs.countries[_t].properties.labels[gomNs.languageCode] : decodeURIComponent(_t.match('[^/]+$')[0]).replace('_',' '))
+                + '<a href="#" class="remfil" onclick="removeFilter(\'country\','
+                + _i
+                + '); return false;">[x]</a></li>'; 
+        }).join("");
+    }
+    if (_fl) {
+        _htmFilters += _(_curView.tag).map(function(_t, _i) {
+            return '<li class="filtag">'+gettext('Tag&nbsp;:')+' '
+                + '<span class="filtag_label">'+_t+'</span>'
+                + '<a href="#" class="remfil" onclick="removeFilter(\'tag\','
+                + _i
+                + '); return false;">[x]</a></li>'; 
+        }).join("");
+    }
+    $("#filters").html(_htmFilters).hide();
+    debouncedGetUpdates();
+}
+
+function displayContents(contentdata) {
+    if (contentdata && contentdata.length) {
+        var _htmlCl = '<ul id="contentlist">'
+            + contentdata.map(function(_d) {
+                var _dsurl = gomNs.urls.datasheet.replace(/ID$/,_d.hda_id);
+                var _html = '<li class="content-item"><h3><a href="'
+                    + _dsurl
+                    + '">'
+                    + _d.title
+                    + '</a></h3>'
+                    + ( typeof _d.coords == "object" ?
+                        '<div class="maplet"><img src="http://maps.googleapis.com/maps/api/staticmap?center=47,1.5&zoom=4&size=160x160&maptype=roadmap&markers=color:red%7C'
+                        + _d.coords.latitude
+                        + ','
+                        + _d.coords.longitude
+                        + '&sensor=false" /><h4>'
+                        + gettext('Localisation&nbsp;:')
+                        + ' '
+                        + _d.coords.city_name
+                        + '</h4></div>'
+                        : '')
+                    + '<h4><a href="'
+                    + _d.url
+                    + '" target="_blank">'
+                    + _d.url.replace(/(^.{40}).+(.{30}$)/m,'$1 &hellip; $2')
+                    + '</a></h4><p><a href="'
+                    + _dsurl
+                    + '">'
+                    + _d.description.replace(/(^.{0,160})([\s]|$)(.*)/,'$1&hellip;')
+                    + '</a></p><ul class="content-tags">'
+                    + _d.tags.map(function(_t) {
+                        return '<li class="content-tag-item"><a href="#" onclick="addFilter(\'tag\', this.getAttribute(\'original-label\')); return false;" original-label="'
+                            + _t.label
+                            + '"'
+                            + (_t.match ? ' class="tagmatch"' : '')
+                            + '>'
+                            + _t.translated_label
+                            + '</a></li>';
+                    }).join('')
+                    + '</ul><h4>'+gettext("Annotations")+'</h4><div class="content-annotation" contentid="'
+                    + _d.id
+                    + '">'
+                    + ( gomNs.sessiondata.annotations[_d.id] && gomNs.sessiondata.annotations[_d.id].texte
+                        ? '<ul><li>'
+                            + _.escape(gomNs.sessiondata.annotations[_d.id].texte).replace(/\n/gm,"</li><li>")
+                            + '</li>'
+                        : ( gomNs.write_allowed ? '<ul><li>'+gettext("Annoter ce contenu")+'...</li></ul>' : '' ) )
+                    + '</div>';
+                if (gomNs.write_allowed) {
+                    _(gomNs.sessiondata.views).each(function(_view, _k) {
+                        if (_view.type == 'list') {
+                            _html += '<p><a href="#" class="addremlist" contentid="'
+                                + _d.id
+                                + '" viewid="'
+                                + _k
+                                + '">'
+                                + str_format(( _view.list.indexOf(_d.id) == -1 ? gettext('Ajouter a {0}') : gettext('Retirer de {0}') ),'"'+ _.escape(_view.name)+ '"')
+                                + '</a></p>'
+                        }
+                    });
+                }
+                _html += '</li>';
+                return _html;
+            }).join('')
+            + '</ul>';
+        $("#contents").html(_htmlCl).scrollTop(0);
+        $("a.addremlist").click(function() {
+            var _id = $(this).attr("contentid"),
+                _vid = 
+                _view = gomNs.sessiondata.views[$(this).attr("viewid")],
+                _io = _view.list.indexOf(_id);
+            if ( _io == -1) {
+                _view.list.push(_id);
+                $(this).html(str_format(gettext('Retirer de {0}'),'"' + _.escape(_view.name) + '"' ));
+            } else {
+                _view.list.splice(_io, 1);
+                $(this).html(str_format(gettext('Ajouter a {0}'),'"' + _.escape(_view.name) + '"'));
+            }
+            if (gomNs.sessiondata.view == 1) {
+                showView();
+            }
+            debouncedSaveChanges();
+            return false;
+        })
+        if (gomNs.write_allowed) {
+            $("div.content-annotation").click(function() {
+                if (this.children[0].tagName == 'UL') {
+                    var _el = document.createElement('textarea'),
+                        _id = $(this).attr("contentid");
+                    _el.innerHTML = (gomNs.sessiondata.annotations[_id] && gomNs.sessiondata.annotations[_id].texte) ? gomNs.sessiondata.annotations[_id].texte : '';
+                    $(_el).focusout(function() {
+                        var _id = this.parentNode.attributes.contentid.nodeValue;
+                        if (!gomNs.sessiondata.annotations[_id]) {
+                            gomNs.sessiondata.annotations[_id] = {};
+                        }
+                        gomNs.sessiondata.annotations[_id].texte = this.value;
+                        this.parentNode.innerHTML = '<ul><li>' + (this.value.length ? _.escape(gomNs.sessiondata.annotations[_id].texte).replace(/\n/gm,"</li><li>") : gettext('Annoter ce contenu')+'...' ) + '</ul>';
+                        debouncedSaveChanges();
+                    });
+                    $(this).html(_el);
+                    _el.focus();
+                    _el.select();
+                }
+            });
+        }
+    }
+    else {
+        $("#contents").html("");
+    }
+}
+
+function updateDisplay(data) {
+    animStop();
+    
+    // translate filters
+    $('.filtag_label').each(function(index, elt) {
+    	txt = $(this).text();
+    	if(txt in data.tagtranslations) {
+    		$(this).text(data.tagtranslations[txt]);
+    	}
+    });
+    $("#filters").show();
+    
+    
+    if (gomNs.dhmPaper) {
+        gomNs.dhmPaper.clear();
+    } else {
+        gomNs.dhmPaper = new Raphael("dateheat");
+    }
+    $("#contentcount").html('<b>'+data.count+'</b> ' + ngettext('notice', 'notices', data.count));
+    if (!data.sparkline.length || data.sparkline[0].year != gomNs.minYear) {
+        data.sparkline.splice(0,0,{"year": gomNs.minYear, "score": 0});
+    }
+    var _maxheat = _(data.sparkline).max(function(_d) { return parseInt(_d.score); }).score;
+    _(data.sparkline).each(function(_d, _i) {
+        var _nxt = (_i == data.sparkline.length - 1) ? (gomNs.maxYear + 1) : data.sparkline[_i + 1].year,
+            _x1 = yearToPx(_d.year),
+            _x2 = yearToPx(_nxt),
+            _heat = _d.score / _maxheat;
+        gomNs.dhmPaper.rect(_x1, 0, _x2 - _x1, 20).attr({
+            "fill" : getGradient(_heat),
+            "stroke" : "none"
+        })
+    });
+    if (gomNs.sessiondata.view == 0) {
+        var _h0 = $("#handle_0").position().left,
+            _h1 = $("#handle_1").position().left;
+        gomNs.dhmPaper.rect(Math.min(_h0, _h1) - 1, 0, Math.abs(_h0 - _h1) + 2, 20).attr({
+            "stroke" : "#cc0066",
+            "stroke-width" : "3"
+        });
+    }
+    if (data.tags.length) {
+        var _scores = _(data.tags).map(function(_d) { return parseInt(_d.score)}),
+            _maxTag = _(_scores).max(),
+            _minTag = Math.min(_(_scores).min(), _maxTag - 1),
+            _scale = 10 / Math.sqrt(_maxTag - _minTag),
+            _htmlTc = '<ul id="tclist">'
+            + _(data.tags).map(function(_d) {
+                return '<li style="font-size:'
+                    + parseInt(10 + _scale * Math.sqrt(_d.score - _minTag))
+                    + 'px;"><a href="#" onclick="addFilter(\'tag\', this.getAttribute(\'original-label\')); return false;" original-label="'
+                    + _d.label
+                    +'"'
+                    + (_d.match ? ' class="tagmatch"' : '')
+                    + '>'
+                    + _d.translated_label
+                    + '</a></li>';
+            }).join('')
+            + '</ul>';
+        $("#tagcloud").html(_htmlTc);
+    }
+    else {
+        $("#tagcloud").html("<h4>Pas de mots-clés trouvés</h4>");
+    }
+    displayContents(data.contents);
+    if (gomNs.countries && data.countries) {
+        var _max = Math.max(1, _(data.countries).max());
+        _(gomNs.countries).each(function(_country, _k) {
+            var _val = data.countries[_k] || 0,
+                _fill = getGradient(_val/_max);
+            switch(gomNs.mappingLibrary) {
+                case 'gmaps':
+                    _(_country.gPolygons).each(function(_p) {
+                        _p.setOptions({
+                            "fillColor" : _fill,
+                            "fillOpacity" : 1
+                        });
+                    });
+                break;
+                case 'leaflet':
+                    _country.layer.setStyle({
+                        "fillColor" : _fill,
+                        "fillOpacity" : 1
+                    })
+                break;
+            }
+        });
+    }
+    if (data.disciplines) {
+        var _disc = data.disciplines.filter(function(_d) {
+                return +_d.score > 0;
+            }),
+            _max = _disc.reduce(function(_a, _b) {
+                return Math.max(_a,_b.score)
+            }, 1);
+        $("#disciplines").html(
+            '<ul class="disc-ul">'
+            + _disc.map(function(_d) {
+                var _col = getGradient(_d.score / _max);
+                return '<li class="disc-li" onclick="addFilter(\'tag\', this.getAttribute(\'original-label\')); return false;" original-label="'
+                    + _d.label
+                    + '"><div class="disc-label"><a href="#">'
+                    + _d.translated_label
+                    + '</a></div><div class="disc-bar" style="background:'
+                    + _col
+                    + '; width:'
+                    + Math.floor(120 * (_d.score / _max))
+                    + 'px">'
+            }).join("")
+            + '</ul>'
+        )
+        
+    }
+}
+
+function saveChanges() {
+    if (gomNs.sessionid && gomNs.sessionkey) {
+        $.getJSON(gomNs.urls['session_info'], {
+            "sessionid" : gomNs.sessionid,
+            "sessionkey" : gomNs.sessionkey,
+            "data" : JSON.stringify(gomNs.sessiondata),
+        });
+    }
+}
+
+var debouncedSaveChanges = _.debounce(saveChanges, 3000);
+
+function changeView(nview) {
+    var _curView = gomNs.sessiondata.views[nview];
+    if (_curView.type == 'list' && (!_curView.list || !_curView.list.length)) {
+        alert(gettext("La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"));
+    } else {
+        gomNs.sessiondata.view = nview;
+        debouncedSaveChanges();
+        showView();
+    }
+}
+
+function showView() {
+    $(".lienvue").removeClass("actif");
+    $("#view_" + gomNs.sessiondata.view).addClass("actif");
+    var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
+    $("#titrevue").val(_curView.name);
+    $("#bloc_gestvue h2").html(gettext('Gerer la vue')+' "' + _.escape(_curView.name) + '"');
+    $("div.bloc").show();
+    $("#widgetlist input").prop("checked",true);
+    _(_curView.hiddenWidgets).each(function(_w) {
+        $("#chbx_" + _w).prop("checked",false);
+        $("#" + _w).hide();
+    });
+    $("#notes").html( _curView.notes
+        ? '<ul><li>' + _.escape(_curView.notes).replace(/\n/gm,"</li><li>") + '</li></ul>'
+        : ( gomNs.write_allowed ? '<ul><li>'+gettext('Annoter cette vue')+'...</li></ul>' : '' ) );
+    switch(_curView.type) {
+        case 'list':
+            $("#bandefiltre, .handle").hide();
+            $.getJSON(gomNs.urls['filter'], {
+                contentlist: _curView.list.join(',')
+            }, updateDisplay);
+            animLoad();
+            break;
+        case 'filter':
+            $("#bandefiltre, .handle").show();
+            updateFilters();
+            break;
+    }
+}
+
+function displayViewList() {
+    $("#ongletsvues").html(gomNs.sessiondata.views.map(function(_v, _k) {
+            return '<li class="lienvue" id="view_'
+                + _k
+                + '" onclick="changeView('
+                + _k
+                + '); return false;"><a href="#">'
+                + _.escape(_v.name)
+                + '</a></li>';
+        }).join(""))
+}
+
+function getInitialView() {
+    var _urlParam = {};
+    if (document.location.hash) {
+        var _tab = document.location.hash.replace("#","").split(":");
+        _urlParam.sessionid = _tab[0];
+        if (_tab.length > 1) {
+            _urlParam.sessionkey = _tab[1];
+        }
+    }
+    $.getJSON(gomNs.urls['session_info'], _urlParam, function(data) {
+        gomNs.sessionid = data.sessionid;
+        if (data.sessionkey) {
+            gomNs.sessionkey = data.sessionkey;
+        }
+        gomNs.write_allowed = data.write_allowed;
+        if (data.write_allowed) {
+            $("#partagerw").show();
+        } else {
+            $("#partagerw").hide();
+        }
+        var _baseUrl = document.location.href.split("#")[0];
+        gomNs.hash = "#" + data.sessionid + (data.sessionkey ? (':' + data.sessionkey) : '');
+        document.location.hash = gomNs.hash;
+        gomNs.sessiondata = typeof data.data == "string" ? JSON.parse(data.data) : (typeof data.data == "object" ? data.data : {});
+        if (!gomNs.sessiondata.title) {
+            gomNs.sessiondata.title = gettext('Nouvelle session');
+        }
+        if (!gomNs.sessiondata.views) {
+            gomNs.sessiondata.views = [];
+        }
+        if (!gomNs.sessiondata.views.length) {
+            addView( 'filter', gettext('Mes resultats de recherche') );
+            addView( 'list', gettext('Ma liste') );
+        }
+        if (!gomNs.sessiondata.annotations) {
+            gomNs.sessiondata.annotations = {};
+        }
+        if (data.write_allowed) {
+            $("#bloc_gestvue").show();
+        } else {
+            $("#bloc_gestvue").hide();
+        }
+        $("#sessionname").html(_.escape(gomNs.sessiondata.title)
+            + ( data.write_allowed ? '' : '<span class="lectseul"> ('+gettext("lecture seule")+')</span>' ) );
+        gomNs.hrefinterval = setInterval(function() {
+            if (document.location.hash != gomNs.hash) {
+                clearInterval(gomNs.hrefinterval);
+                getInitialView();
+            }
+        }, 500);
+        displayViewList();
+        showView();
+    });
+}
+
+function changeSessionTitle(title) {
+    gomNs.sessiondata.title = title;
+    $("#sessionname").html(_.escape(gomNs.sessiondata.title));
+    debouncedSaveChanges();
+}
+
+function addView(viewtype, viewname) {
+    var _content = {
+        type: viewtype,
+        name: viewname,
+        hiddenWidgets: [],
+    };
+    switch(viewtype) {
+        case 'filter':
+            _content.period = [ gomNs.minYear, gomNs.maxYear ];
+            _content.tag = [];
+            _content.country = [];
+            gomNs.sessiondata.view = gomNs.sessiondata.views.length;
+            break;
+        case 'list':
+            _content.list = [];
+            break;
+    }
+    gomNs.sessiondata.views.push(_content);
+    debouncedSaveChanges();
+}
+
+function animLoad() {
+    //console.log("animLoad");
+    var _d = $("#waiting"),
+        _w = _d.width(),
+        _h = _d.height(),
+        _r = .33*Math.min(_w,_h),
+        _count = 24,
+        _html = '',
+        _f = 2* Math.PI / _count;
+    _d.empty().show();
+    for (var _i = 0; _i < _count; _i++) {
+        var _x = Math.floor(Math.sin(_i * _f)*_r + _w/2),
+            _y = Math.floor(-Math.cos(_i * _f)*_r + _h/2),
+            _el = document.createElement('div');
+        _el.className = 'waittick';
+        _d.append(_el);
+        $(_el).css({
+            "left": _x + "px",
+            "top": _y + "px"
+        }).delay(200*_i).fadeIn(400).delay(600 + 200* _i).fadeOut();
+    }
+}
+
+function animStop() {
+    $("#waiting").empty().fadeOut();
+}
+function ellipse(_text, _length) {
+    var _rgxp = new RegExp('(^.{0,' + _length + '})([\s]|$)(.*)')
+    return _text.replace(/(\n|\r|\r\n)/mg,' ').trim().replace(_rgxp,'$1…')
+}
+
+function highlightText(_text, _search) {
+    var _rgxp = new RegExp('(' + _search.replace(/(\W)/g, '\\$1') + ')','gi');
+    return _text.replace(_rgxp, '<strong>$1</strong>');
+}
+
+function wikipediaUrl(_text) {
+    return "http://" + gomNs.languageCode + ".wikipedia.org/wiki/" + encodeURI(_text.replace(/ /g,'_'))
+}
+
+wpTemplate = _.template(
+    '<h4 class="wptitle"><% print(highlightText(item.label, inputvalue)); %></h4><% if (item.thumbnail) { %><img class="wpimg" src="<%-item.thumbnail%>" /><% };'
+    + ' if (item.abstract) { %><p class="wpabstract"><% print(ellipse(item.abstract,250))%></p><p class="wpsource"><a href="<% print(wikipediaUrl(item.label)) %>" target="_blank"><% print(gettext("Source&nbsp;: Wikipédia")) %></a></p><% }; %><div class="clear"></div>'
+);
+
+acTemplate = _.template(
+    '<a><span class="acnb"><%- item.nb %></span><h4 class="actitle"><% print(highlightText(item.label, inputvalue)); %></h4></a>'
+);
+
+$(document).ready(function() {
+    switch(gomNs.mappingLibrary) {
+        case 'gmaps':
+            gomNs.map = new google.maps.Map(document.getElementById("map"),
+                {
+                    center: new google.maps.LatLng(30, 0),
+                    zoom: 1,
+                    mapTypeId: google.maps.MapTypeId.SATELLITE
+                });
+            $.getJSON(gomNs.urls['countries'], showCountriesGmap);
+            break;
+        case 'leaflet':
+            gomNs.map = new L.Map('map', {
+                center: new L.LatLng(30, 0),
+                zoom: 1
+            });
+            //gomNs.map.addLayer(new L.TileLayer("http://s3.amazonaws.com/com.modestmaps.bluemarble/{z}-r{y}-c{x}.jpg", {maxZoom: 9}));
+            $.getJSON(gomNs.urls['countries'], showCountriesLeaflet);
+            break;
+    }
+    var _html = gomNs.displayedDates.map(function(_v) {
+        return '<li style="left: '
+            + parseInt(yearToPx(_v))
+            + 'px"><div class="datelabel">'
+            + _v
+            + '</div></li>'
+    }).join('');
+    $("#dates").html(_html);
+    $("#apartager").click(function() {
+        var _pu = $("#partageurls");
+        if (_pu.is(":visible")) {
+            $(this).removeClass("actif");
+        } else {
+            $(this).addClass("actif");
+            $("#partagero").addClass("actif");
+            $("#partagerw").removeClass("actif");
+            var _url = document.location.href.split("#")[0] + "#" + gomNs.sessionid;
+            $("#zc-partageinput").val( _url.replace(/^(.{30}).{3,1000}(.{20})$/,'$1 … $2') );
+        }
+        $(this).attr("class",_pu.is(":visible") ? "" : "actif");
+        _pu.slideToggle(function() {
+            if ($(this).is(":visible")) {
+                if (typeof gomNs.clip == "undefined") {
+                    gomNs.clip = new ZeroClipboard.Client();
+                    gomNs.clip.setHandCursor( true );
+                    gomNs.clip.glue('zc-partageinput');
+                }
+                gomNs.clip.show();
+                gomNs.clip.setText( _url );
+            } else {
+                gomNs.clip.hide();
+            }
+        });
+        return false;
+    })
+    $("#partagero").click(function() {
+        $("#partagero").addClass("actif");
+        $("#partagerw").removeClass("actif");
+        var _url = document.location.href.split("#")[0] + "#" + gomNs.sessionid;
+        $("#zc-partageinput").val( _url.replace(/^(.{30}).{3,1000}(.{20})$/,'$1 … $2') );
+        gomNs.clip.setText( _url );
+        return false;
+    });
+    $("#partagerw").click(function() {
+        $("#partagerw").addClass("actif");
+        $("#partagero").removeClass("actif");
+        var _url = document.location.href.split("#")[0] + gomNs.hash;
+        $("#zc-partageinput").val( _url.replace(/^(.{30}).{3,1000}(.{20})$/,'$1 … $2') );
+        gomNs.clip.setText( _url );
+        return false;
+    });
+    $(".handle").draggable({
+        "axis" : "x",
+        "containment" : "parent",
+        "drag": function() {
+            $(this).attr("year",parseInt(pxToYear($(this).position().left)));
+            var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
+            if (_curView.type == 'filter') {
+                var _h0 = $("#handle_0"),
+                    _h1 = $("#handle_1"),
+                    _h0v = parseInt(_h0.attr("year")),
+                    _h1v = parseInt(_h1.attr("year"));
+                _curView.period = [ Math.min(_h0v, _h1v), Math.max(_h0v, _h1v)];
+                _h0.find(".handleinner").css({
+                    "margin-left" : (_h0v>_h1v ? "0" : "-20px")
+                })
+                _h1.find(".handleinner").css({
+                    "margin-left" : (_h1v>_h0v ? "0" : "-20px")
+                })
+                updateFilters();
+                debouncedSaveChanges();
+            }
+        }
+    });
+    $("#sessionname").click(function() {
+        if (gomNs.write_allowed && !$(this).children().length) {
+            var _el = document.createElement('input');
+            _el.value = gomNs.sessiondata.title;
+            $(_el).focusout(function() {
+                changeSessionTitle(this.value);
+            }).keypress(function(e) {
+                if (e.keyCode == 13) {
+                    changeSessionTitle(this.value);
+                }
+            });
+            $(this).html(_el);
+            _el.focus();
+            _el.select();
+        }
+    });
+    $("#titrevue").keyup(function() {
+        var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
+        _curView.name = $(this).val();
+        $("#view_" + gomNs.sessiondata.view + " a").html(_.escape(_curView.name))
+        $("#bloc_gestvue h2").html(gettext('Gerer la vue')+' "' + _.escape(_curView.name) + '"');
+        debouncedSaveChanges();
+    });
+    $("#notes").click(function() {
+        if (gomNs.write_allowed) {
+            if (this.children[0].tagName == 'UL') {
+                var _el = document.createElement('textarea'),
+                    _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
+                _el.innerHTML = _curView.notes ? _curView.notes : '';
+                $(_el).focusout(function() {
+                    _curView.notes = this.value;
+                    this.parentNode.innerHTML = '<ul><li>' + (this.value.length ? _.escape(_curView.notes).replace(/\n/gm,"</li><li>") : gettext('Annoter cette vue')+'...' ) + '</ul>';
+                    debouncedSaveChanges();
+                });
+                $(this).html(_el);
+                _el.focus();
+                _el.select();
+            }
+        }
+    });
+/*    gomNs.disChart = d3.select("#disciplines")
+        .append("svg:svg")
+        .attr("width", 475)
+        .attr("height", 120); */
+    getInitialView();
+    $(".barrebloc").click(function() {
+        $(this).next().slideToggle(); 
+    });
+    gomNs.widgetList = [];
+    var _html = '<ul id="widgetlist">';
+    $("div.bloc").each(function() {
+       gomNs.widgetList.push(this.id);
+       _html += '<li><input type="checkbox" id="chbx_'
+        + this.id
+        + '" /><label>' + $(this).find("h2").html() + '</label></li>'
+    });
+    _html + '</ul>';
+    $("#gestvue").append(_html);
+    $("#nouvellevue").click(function() {
+        $("#plusdevues").slideToggle();
+        return false;
+    })
+    $("#widgetlist input").change(function() {
+        var _newWL = [];
+        $("#widgetlist input").each(function(_k, _e) {
+            var _id = _e.id.substr(5);
+            if (!$(_e).prop("checked")) {
+                $("#" + _id).hide();
+                _newWL.push(_id);
+            } else {
+                $("#" + _id).show();
+            }
+        });
+        gomNs.sessiondata.views[gomNs.sessiondata.view].hiddenWidgets = _newWL;
+        debouncedSaveChanges();
+    });
+    $("#nouv_resrech").click(function() {
+       var _txt = prompt(gettext("Comment souhaitez-vous nommer votre nouvelle vue ?"),gettext("Nouveaux resultats de recherche"));
+       if (_txt !== null) {
+           addView('filter', _txt); 
+           displayViewList();
+       }
+       return false;
+    });
+    $("#nouv_liste").click(function() {
+       var _txt = prompt(gettext("Comment souhaitez-vous nommer votre nouvelle vue ?"),gettext("Nouvelle liste"));
+       if (_txt !== null) {
+           addView('list', _txt);
+           displayViewList();
+       }
+       return false;
+    });
+        $(" #tagform ").submit(function() {
+        return false;
+    });
+    var cache = {}, /*CACHE => http://jqueryui.com/demos/autocomplete/#remote-with-cache */
+        lastXhr;
+    $( "#tagsearch" ).autocomplete({
+        source: function( request, response ) {
+            var term = request.term;
+            if ( term in cache ) {
+                $("#tagsearch").removeClass("waiting");
+                response( cache[ term ] );
+                return;
+            }
+            $("#tagsearch").addClass("waiting");
+            lastXhr = $.getJSON( gomNs.urls['tag_search'], request, function( data, status, xhr ) {
+                cache[ term ] = data;
+                if ( xhr === lastXhr ) {
+                    response( data );
+                    $("#tagsearch").removeClass("waiting");
+                }
+            });
+        },
+        minLength: ( gomNs.languageCode == 'ja' ? 1 : 2 ),
+        focus: function( event, ui ) {
+            $(".wpinfo").html(wpTemplate({
+                item: ui.item,
+                inputvalue: $("#tagsearch").val()
+            }));
+        },
+        select: function( event, ui ) {
+            addFilter('tag', ui.item.original_label);
+        }
+    })
+    .data("autocomplete")._renderItem = function(ul, item) {
+        var _contents = acTemplate({
+            item: item,
+            inputvalue: $("#tagsearch").val()
+        });
+        return $( "<li>" )
+            .data( "item.autocomplete", item )
+            .html( _contents )
+            .appendTo( ul );
+    };
+});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/js/notice.js	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,99 @@
+var selectedelement = null;
+
+function drawlinks() {
+    var w$ = $(window)
+        scroll = w$.scrollTop(),
+        windowheight = w$.height();
+    $(".tags-main, .main-datasheet").css({
+        "margin-top": Math.max(0, scroll - 60) + "px"
+    });
+    var cvheight = Math.max($(".tags-main").outerHeight(), $(".related-datasheets").outerHeight()),
+        cvwidth = $(".tag-container").width(),
+        cv$ = $(".tag-canvas"),
+        cvo = cv$.offset(),
+        colors = ["#1f77b4","#aec7e8","#ff7f0e","#ffbb78","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5","#8c564b","#c49c94","#e377c2","#f7b6d2","#7f7f7f","#c7c7c7","#bcbd22","#dbdb8d","#17becf","#9edae5"];
+    cv$.attr({
+        width: cvwidth,
+        height: cvheight
+    }).css({
+        width: cvwidth,
+        height: cvheight
+    });
+    
+    $(".main-datasheet-tag, .datasheet").css("opacity", selectedelement ? .7 : 1);
+    $(selectedelement).css("opacity",1);
+    
+    var ctx = cv$[0].getContext('2d'),
+        mds$ = $(".main-datasheet"),
+        ymain = Math.floor(mds$.height() / 2 + mds$.offset().top - cvo.top);
+    
+    $(".main-datasheet-tag").each(function() {
+        var tag$ = $(this),
+            ytag = Math.floor(tag$.offset().top + tag$.outerHeight() / 2 - cvo.top);
+        ctx.strokeStyle = "#999999";
+        ctx.lineWidth = (this === selectedelement ? 4 : 1);
+        ctx.beginPath();
+        ctx.moveTo(0, ymain);
+        ctx.bezierCurveTo(80,ymain, 40,ytag, 120, ytag);
+        ctx.lineTo(160, ytag);
+        ctx.stroke();
+        
+        var tagid = tag$.attr("data-tag-id"),
+            relds = $(".related-datasheet-tag[data-tag-id=" + tagid + "]").parent().parent();
+        
+        if (this === selectedelement) {
+            relds.css("opacity", 1);
+        }
+        
+        relds.each(function(i) {
+            var ds$ = $(this),
+                dst = ds$.offset().top,
+                dsh = ds$.outerHeight(),
+                visible = ds$.is(":visible") && (dst - scroll < windowheight) && (dst + dsh - scroll > 0);
+            if (visible) {
+                var yds = Math.floor(dst + dsh / 2 - cvo.top);
+                ctx.lineWidth = (this === selectedelement || tag$[0] === selectedelement ? 4 : 1);
+                ctx.strokeStyle = colors[ds$.index() % colors.length];
+                ctx.beginPath();
+                ctx.moveTo(160, ytag);
+                ctx.lineTo(200, ytag);
+                ctx.bezierCurveTo(280,ytag, 280,yds, 320, yds);
+                ctx.stroke();
+                if (this === selectedelement) {
+                    tag$.css("opacity",1);
+                }
+            }
+        })
+    });
+}
+
+$(function() {
+    $(window).scroll(drawlinks);
+    $(window).resize(drawlinks);
+    $(".main-datasheet-tag").click(function() {
+        var tag$ = $(this);
+        if (tag$.hasClass("selected")) {
+            $(".datasheet").show();
+            tag$.removeClass("selected");
+        } else {
+            $(".datasheet").hide();
+            var tagid = tag$.attr("data-tag-id");
+            $(".related-datasheet-tag[data-tag-id=" + tagid + "]").parent().parent().show();
+            $(".main-datasheet-tag").removeClass("selected");
+            tag$.addClass("selected");
+        }
+        drawlinks();
+    });
+    $(".main-datasheet-tag, .datasheet").mouseover(function() {
+        if (selectedelement !== this) {
+            selectedelement = this;
+            drawlinks();
+        }
+    }).mouseout(function() {
+        if (selectedelement) {
+            selectedelement = null;
+            drawlinks();
+        }
+    });
+    drawlinks();
+});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/js/thesaurus.js	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,178 @@
+var trees = [
+    {
+        title: "Thésaurus de l'Architecture et de l'Urbanisme : Secteur urbain",
+        tree: {
+            label: "secteur urbain",
+            contents: [
+                {
+                    label: "banlieue",
+                    contents: [
+                        {
+                            label: "faubourg"
+                        }
+                    ]
+                },
+                {
+                    label: "îlot"
+                },
+                {
+                    label: "quartier",
+                    contents: [
+                        {
+                            label: "centre-ville"
+                        }
+                    ]
+                },
+                {
+                    label: "secteur urbain concerté",
+                    contents: [
+                        {
+                            label: "grand ensemble"
+                        },
+                        {
+                            label: "lotissement",
+                            contents: [
+                                {
+                                    label: "lotissement concerté",
+                                    contents: [
+                                        {
+                                            label: "cité-jardin"
+                                        },
+                                        {
+                                            label: "cité ouvrière"
+                                        },
+                                        {
+                                            label: "courée"
+                                        },
+                                    ]
+                                }
+                            ]
+                        }
+                    ]
+                },
+            ]
+        }
+    },
+    {
+        title: "Thésaurus Garnier : Architecture d'habitation",
+        tree: {
+            label: "architecture d'habitation",
+            contents: [
+                {
+                    label: "cité-jardin"
+                },
+                {
+                    label: "édifice d'habitation",
+                    contents: [
+                        {
+                            label: "demeure",
+                            contents: [
+                                {
+                                    label: "chalet"
+                                },
+                                {
+                                    label: "château"
+                                },
+                                {
+                                    label: "château-fort",
+                                    contents: [
+                                        {
+                                            label: "chemin de ronde"
+                                        },
+                                        {
+                                            label: "donjon"
+                                        }
+                                    ]
+                                },
+                                {
+                                    label: "hôtel particulier"
+                                },
+                                {
+                                    label: "maison"
+                                },
+                                {
+                                    label: "manoir"
+                                },
+                                {
+                                    label: "palais"
+                                }
+                            ]
+                        },
+                        {
+                            label: "abri",
+                            contents: [
+                                {
+                                    label: "buron"
+                                },
+                                {
+                                    label: "cabane"
+                                },
+                                {
+                                    label: "campement",
+                                    contents: [
+                                        {
+                                            label: "tente"
+                                        },
+                                        {
+                                            label: "tipi"
+                                        },
+                                        {
+                                            label: "igloo"
+                                        }
+                                    ]
+                                }
+                            ]
+                        }
+                    ]
+                }
+            ]
+        }
+    },
+    {
+        title: "Thésaurus Garnier : Sciences occultes",
+        tree: {
+            label: "sciences occultes",
+            contents: [
+                {
+                    label: "alchimie"
+                },
+                {
+                    label: "astrologie"
+                },
+                {
+                    label: "divination"
+                },
+                {
+                    label: "magie",
+                    contents: [
+                        {
+                            label: "sorcellerie"
+                        },
+                        {
+                            label: "sorcière"
+                        }
+                    ]
+                }
+            ]
+        }
+    }
+];
+$(function() {
+    $(".column").each(function(_key) {
+        var _tree = trees[_key],
+            _el = $(this);
+        _el.find("h3").text(_tree.title);
+        $.getJSON(
+            endpoints.fill_tree,
+            { tree: JSON.stringify(_tree.tree) },
+            function(_data) {
+                renderData(_el.find(".cattree"), _data, 2);
+                _el.find("p.theme:contains('cité-jardin')")
+                    .css("background-color","#ffff80")
+                    .parent()
+                    .parentsUntil(".cattree")
+                        .removeClass("folded");
+            }
+        );
+    });
+});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/js/trees.js	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,81 @@
+
+function countContentsAndThemes(_data) {
+    _data.counts = {
+        contents: (typeof _data.contents == "object" && typeof _data.contents.slice == "function" ? _data.contents.length : 0),
+        themes: (typeof _data.themes == "object" && typeof _data.themes.slice == "function" ? _data.themes.length : 0)
+    }
+    if (typeof _data.themes == "object" && typeof _data.themes.slice == "function") {
+        for (var _i = 0; _i < _data.themes.length; _i++) {
+            countContentsAndThemes(_data.themes[_i]);
+            var _subres = _data.themes[_i].counts;
+            _data.counts.contents += _subres.contents;
+            _data.counts.themes += _subres.themes;
+        }
+    }
+}
+
+function renderTemplate(_data, _level, _scale, _maxlevel) {
+    _data.isfolded = _level >= _maxlevel;
+    _(_data.tags).each(function(_tag) {
+        _(_tag.contents).each(function(_content, _key) {
+            _content.trimmed_description = _content.description.trim().replace(/(\n|\r|\r\n)/mg,' ').replace(/(^.{150,200})[\s].+$/m,'$1&hellip;');
+            _content.hidden = (_key >= 5);
+        });
+        _tag.show_more = _tag.contents && _tag.contents.length > 5 ? _tag.contents.length - 5 : 0;
+    });
+    _(_data.contents).each(function(_content, _key) {
+        _content.trimmed_description = _content.description.trim().replace(/(\n|\r|\r\n)/mg,' ').replace(/(^.{150,200})[\s].+$/m,'$1&hellip;');
+        _content.hidden = (_key >= 5);
+    });
+    _data.show_more = _data.contents && _data.contents.length > 5 ? _data.contents.length - 5 : 0;
+    _data.font_size = (10+Math.log(_data.counts.contents)*_scale);
+    var _dsurl = endpoints.datasheet.replace(/ID$/,'');
+    var _prefix = '<li class="themeli{{#isfolded}} folded{{/isfolded}}"><p class="theme"><span style="font-size: {{font_size}}px">{{label}}</span> &mdash; {{#counts.themes}}{{counts.themes}} thème(s){{#counts.contents}}, {{/counts.contents}}{{/counts.themes}}{{#counts.contents}}{{counts.contents}} notice(s){{/counts.contents}}</p><ul>',
+        _suffix = '{{#contents}}<li class="content{{#hidden}} hidden{{/hidden}}" id="content_{{id}}"><p class="title score_{{score}}"><a href="'
+            + _dsurl
+            + '{{hda_id}}">{{title}}</a></p><div class="foldedcontent"><div class="img-container"><img src="http://www.histoiredesarts.culture.fr/images/cached/images/{{hda_id}}.jpg" />'
+            + '</div><p class="description">Source: <a href="{{organization_url}}" target="_blank">{{organization}}</a><br /><a href="'
+            + _dsurl
+            + '{{hda_id}}" class="content">{{trimmed_description}}</a></p></div></li>{{/contents}}{{#show_more}}<li class="show_more">Plus de contenus (<span class="show_more_count">{{show_more}}</span>)&hellip;</li>{{/show_more}}</ul></li>',
+        _html = Mustache.to_html(_prefix, _data);
+    if (typeof _data.themes == "object" && typeof _data.themes.slice == "function") {
+        for (var _i = 0; _i < _data.themes.length; _i++) {
+            _html += renderTemplate(_data.themes[_i], _level + 1, _scale, _maxlevel);
+        }
+    }
+    _html += Mustache.to_html(_suffix, _data);
+    return _html;
+}
+
+function renderData(_selector, _data, _maxlevel) {
+    countContentsAndThemes(_data);
+    var _scale = 8 / Math.max(1,Math.log(_data.counts.contents));
+    _selector.html(renderTemplate(_data, 0, _scale, _maxlevel));
+    _selector.find("p.theme").click(function() {
+        $(this).parent().toggleClass("folded")
+        return false;
+    });
+    _selector.find("li.content").mouseenter(function() {
+        $(this).find(".foldedcontent")
+        .dequeue()
+        .animate({
+            height: 5 + $(this).find("p.description").outerHeight()
+        },
+        500);
+    }).mouseleave(function() {
+        $(this).find(".foldedcontent")
+        .dequeue()
+        .animate({
+            height: "0"
+        },
+        500);
+    });
+    _selector.find(".show_more").click(function() {
+        $(this).siblings(".hidden:lt(5)").removeClass("hidden");
+        var _l = $(this).siblings(".hidden").length;
+        $(this).find(".show_more_count").html(_l);
+        if (!_l) {
+            $(this).detach();
+        } 
+    });
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/lib/ZeroClipboard.js	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,311 @@
+// Simple Set Clipboard System
+// Author: Joseph Huckaby
+
+var ZeroClipboard = {
+	
+	version: "1.0.7",
+	clients: {}, // registered upload clients on page, indexed by id
+	moviePath: 'ZeroClipboard.swf', // URL to movie
+	nextId: 1, // ID of next movie
+	
+	$: function(thingy) {
+		// simple DOM lookup utility function
+		if (typeof(thingy) == 'string') thingy = document.getElementById(thingy);
+		if (!thingy.addClass) {
+			// extend element with a few useful methods
+			thingy.hide = function() { this.style.display = 'none'; };
+			thingy.show = function() { this.style.display = ''; };
+			thingy.addClass = function(name) { this.removeClass(name); this.className += ' ' + name; };
+			thingy.removeClass = function(name) {
+				var classes = this.className.split(/\s+/);
+				var idx = -1;
+				for (var k = 0; k < classes.length; k++) {
+					if (classes[k] == name) { idx = k; k = classes.length; }
+				}
+				if (idx > -1) {
+					classes.splice( idx, 1 );
+					this.className = classes.join(' ');
+				}
+				return this;
+			};
+			thingy.hasClass = function(name) {
+				return !!this.className.match( new RegExp("\\s*" + name + "\\s*") );
+			};
+		}
+		return thingy;
+	},
+	
+	setMoviePath: function(path) {
+		// set path to ZeroClipboard.swf
+		this.moviePath = path;
+	},
+	
+	dispatch: function(id, eventName, args) {
+		// receive event from flash movie, send to client		
+		var client = this.clients[id];
+		if (client) {
+			client.receiveEvent(eventName, args);
+		}
+	},
+	
+	register: function(id, client) {
+		// register new client to receive events
+		this.clients[id] = client;
+	},
+	
+	getDOMObjectPosition: function(obj, stopObj) {
+		// get absolute coordinates for dom element
+		var info = {
+			left: 0, 
+			top: 0, 
+			width: obj.width ? obj.width : obj.offsetWidth, 
+			height: obj.height ? obj.height : obj.offsetHeight
+		};
+
+		while (obj && (obj != stopObj)) {
+			info.left += obj.offsetLeft;
+			info.top += obj.offsetTop;
+			obj = obj.offsetParent;
+		}
+
+		return info;
+	},
+	
+	Client: function(elem) {
+		// constructor for new simple upload client
+		this.handlers = {};
+		
+		// unique ID
+		this.id = ZeroClipboard.nextId++;
+		this.movieId = 'ZeroClipboardMovie_' + this.id;
+		
+		// register client with singleton to receive flash events
+		ZeroClipboard.register(this.id, this);
+		
+		// create movie
+		if (elem) this.glue(elem);
+	}
+};
+
+ZeroClipboard.Client.prototype = {
+	
+	id: 0, // unique ID for us
+	ready: false, // whether movie is ready to receive events or not
+	movie: null, // reference to movie object
+	clipText: '', // text to copy to clipboard
+	handCursorEnabled: true, // whether to show hand cursor, or default pointer cursor
+	cssEffects: true, // enable CSS mouse effects on dom container
+	handlers: null, // user event handlers
+	
+	glue: function(elem, appendElem, stylesToAdd) {
+		// glue to DOM element
+		// elem can be ID or actual DOM element object
+		this.domElement = ZeroClipboard.$(elem);
+		
+		// float just above object, or zIndex 99 if dom element isn't set
+		var zIndex = 99;
+		if (this.domElement.style.zIndex) {
+			zIndex = parseInt(this.domElement.style.zIndex, 10) + 1;
+		}
+		
+		if (typeof(appendElem) == 'string') {
+			appendElem = ZeroClipboard.$(appendElem);
+		}
+		else if (typeof(appendElem) == 'undefined') {
+			appendElem = document.getElementsByTagName('body')[0];
+		}
+		
+		// find X/Y position of domElement
+		var box = ZeroClipboard.getDOMObjectPosition(this.domElement, appendElem);
+		
+		// create floating DIV above element
+		this.div = document.createElement('div');
+		var style = this.div.style;
+		style.position = 'absolute';
+		style.left = '' + box.left + 'px';
+		style.top = '' + box.top + 'px';
+		style.width = '' + box.width + 'px';
+		style.height = '' + box.height + 'px';
+		style.zIndex = zIndex;
+		
+		if (typeof(stylesToAdd) == 'object') {
+			for (addedStyle in stylesToAdd) {
+				style[addedStyle] = stylesToAdd[addedStyle];
+			}
+		}
+		
+		// style.backgroundColor = '#f00'; // debug
+		
+		appendElem.appendChild(this.div);
+		
+		this.div.innerHTML = this.getHTML( box.width, box.height );
+	},
+	
+	getHTML: function(width, height) {
+		// return HTML for movie
+		var html = '';
+		var flashvars = 'id=' + this.id + 
+			'&width=' + width + 
+			'&height=' + height;
+			
+		if (navigator.userAgent.match(/MSIE/)) {
+			// IE gets an OBJECT tag
+			var protocol = location.href.match(/^https/i) ? 'https://' : 'http://';
+			html += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="'+protocol+'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="'+width+'" height="'+height+'" id="'+this.movieId+'" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="'+ZeroClipboard.moviePath+'" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="'+flashvars+'"/><param name="wmode" value="transparent"/></object>';
+		}
+		else {
+			// all other browsers get an EMBED tag
+			html += '<embed id="'+this.movieId+'" src="'+ZeroClipboard.moviePath+'" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="'+width+'" height="'+height+'" name="'+this.movieId+'" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="'+flashvars+'" wmode="transparent" />';
+		}
+		return html;
+	},
+	
+	hide: function() {
+		// temporarily hide floater offscreen
+		if (this.div) {
+			this.div.style.left = '-2000px';
+		}
+	},
+	
+	show: function() {
+		// show ourselves after a call to hide()
+		this.reposition();
+	},
+	
+	destroy: function() {
+		// destroy control and floater
+		if (this.domElement && this.div) {
+			this.hide();
+			this.div.innerHTML = '';
+			
+			var body = document.getElementsByTagName('body')[0];
+			try { body.removeChild( this.div ); } catch(e) {;}
+			
+			this.domElement = null;
+			this.div = null;
+		}
+	},
+	
+	reposition: function(elem) {
+		// reposition our floating div, optionally to new container
+		// warning: container CANNOT change size, only position
+		if (elem) {
+			this.domElement = ZeroClipboard.$(elem);
+			if (!this.domElement) this.hide();
+		}
+		
+		if (this.domElement && this.div) {
+			var box = ZeroClipboard.getDOMObjectPosition(this.domElement);
+			var style = this.div.style;
+			style.left = '' + box.left + 'px';
+			style.top = '' + box.top + 'px';
+		}
+	},
+	
+	setText: function(newText) {
+		// set text to be copied to clipboard
+		this.clipText = newText;
+		if (this.ready) this.movie.setText(newText);
+	},
+	
+	addEventListener: function(eventName, func) {
+		// add user event listener for event
+		// event types: load, queueStart, fileStart, fileComplete, queueComplete, progress, error, cancel
+		eventName = eventName.toString().toLowerCase().replace(/^on/, '');
+		if (!this.handlers[eventName]) this.handlers[eventName] = [];
+		this.handlers[eventName].push(func);
+	},
+	
+	setHandCursor: function(enabled) {
+		// enable hand cursor (true), or default arrow cursor (false)
+		this.handCursorEnabled = enabled;
+		if (this.ready) this.movie.setHandCursor(enabled);
+	},
+	
+	setCSSEffects: function(enabled) {
+		// enable or disable CSS effects on DOM container
+		this.cssEffects = !!enabled;
+	},
+	
+	receiveEvent: function(eventName, args) {
+		// receive event from flash
+		eventName = eventName.toString().toLowerCase().replace(/^on/, '');
+				
+		// special behavior for certain events
+		switch (eventName) {
+			case 'load':
+				// movie claims it is ready, but in IE this isn't always the case...
+				// bug fix: Cannot extend EMBED DOM elements in Firefox, must use traditional function
+				this.movie = document.getElementById(this.movieId);
+				if (!this.movie) {
+					var self = this;
+					setTimeout( function() { self.receiveEvent('load', null); }, 1 );
+					return;
+				}
+				
+				// firefox on pc needs a "kick" in order to set these in certain cases
+				if (!this.ready && navigator.userAgent.match(/Firefox/) && navigator.userAgent.match(/Windows/)) {
+					var self = this;
+					setTimeout( function() { self.receiveEvent('load', null); }, 100 );
+					this.ready = true;
+					return;
+				}
+				
+				this.ready = true;
+				this.movie.setText( this.clipText );
+				this.movie.setHandCursor( this.handCursorEnabled );
+				break;
+			
+			case 'mouseover':
+				if (this.domElement && this.cssEffects) {
+					this.domElement.addClass('hover');
+					if (this.recoverActive) this.domElement.addClass('active');
+				}
+				break;
+			
+			case 'mouseout':
+				if (this.domElement && this.cssEffects) {
+					this.recoverActive = false;
+					if (this.domElement.hasClass('active')) {
+						this.domElement.removeClass('active');
+						this.recoverActive = true;
+					}
+					this.domElement.removeClass('hover');
+				}
+				break;
+			
+			case 'mousedown':
+				if (this.domElement && this.cssEffects) {
+					this.domElement.addClass('active');
+				}
+				break;
+			
+			case 'mouseup':
+				if (this.domElement && this.cssEffects) {
+					this.domElement.removeClass('active');
+					this.recoverActive = false;
+				}
+				break;
+		} // switch eventName
+		
+		if (this.handlers[eventName]) {
+			for (var idx = 0, len = this.handlers[eventName].length; idx < len; idx++) {
+				var func = this.handlers[eventName][idx];
+			
+				if (typeof(func) == 'function') {
+					// actual function reference
+					func(this, args);
+				}
+				else if ((typeof(func) == 'object') && (func.length == 2)) {
+					// PHP style object + method, i.e. [myObject, 'myMethod']
+					func[0][ func[1] ](this, args);
+				}
+				else if (typeof(func) == 'string') {
+					// name of function
+					window[func](this, args);
+				}
+			} // foreach event handler defined
+		} // user defined handler for event
+	}
+	
+};
Binary file src/hdalab/static/hdalab/lib/ZeroClipboard.swf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/lib/countries.geo.json	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,1 @@
+{"type": "FeatureCollection", "features": [{"geometry": {"type": "Polygon", "coordinates": [[[61.210816999999999, 35.650072000000002], [62.230651000000002, 35.270663999999996], [62.984662, 35.404040999999999], [63.193537999999997, 35.857165999999999], [63.982895999999997, 36.007956999999998], [64.546479000000005, 36.312072999999998], [64.746105, 37.111818], [65.588948000000002, 37.305216999999999], [65.745631000000003, 37.661163999999999], [66.217384999999993, 37.393790000000003], [66.518607000000003, 37.362783999999998], [67.075782000000004, 37.356144], [67.829999999999998, 37.144993999999997], [68.135561999999993, 37.023114999999997], [68.859446000000005, 37.344335999999998], [69.196273000000005, 37.151144000000002], [69.518784999999994, 37.608997000000002], [70.116578000000004, 37.588222999999999], [70.270573999999996, 37.735165000000002], [70.376304000000005, 38.138396], [70.806820999999999, 38.486282000000003], [71.348130999999995, 38.258904999999999], [71.239403999999993, 37.953265000000002], [71.541917999999995, 37.905774000000001], [71.448693000000006, 37.065645000000004], [71.844638000000003, 36.738171000000001], [72.193040999999994, 36.948287999999998], [72.636889999999994, 37.047558000000002], [73.260056000000006, 37.495257000000002], [73.948695999999998, 37.421565999999999], [74.980001999999999, 37.419989999999999], [75.158028000000002, 37.133031000000003], [74.575892999999994, 37.020840999999997], [74.067552000000006, 36.836176000000002], [72.920024999999995, 36.720007000000003], [71.846292000000005, 36.509942000000002], [71.262348000000003, 36.074387999999999], [71.498767999999998, 35.650562999999998], [71.613076000000007, 35.153202999999998], [71.115019000000004, 34.733125999999999], [71.156773000000001, 34.348911000000001], [70.881803000000005, 33.988855999999998], [69.930543, 34.020119999999999], [70.323594, 33.358533000000001], [69.687146999999996, 33.105499000000002], [69.262522000000004, 32.501944000000002], [69.317763999999997, 31.901412000000001], [68.926676999999998, 31.620189], [68.556932000000003, 31.71331], [67.792688999999996, 31.582930000000001], [67.683394000000007, 31.303153999999999], [66.938890999999998, 31.304911000000001], [66.381457999999995, 30.738899], [66.346473000000003, 29.887943], [65.046862000000004, 29.472180999999999], [64.350419000000002, 29.560030999999999], [64.148002000000005, 29.340819], [63.550260999999999, 29.468330999999999], [62.549857000000003, 29.318572], [60.874248000000001, 29.829239000000001], [61.781222, 30.735849999999999], [61.699314000000001, 31.379505999999999], [60.941944999999997, 31.548075000000001], [60.863655000000001, 32.182920000000003], [60.536078000000003, 32.981268999999998], [60.963700000000003, 33.528832000000001], [60.52843, 33.676445999999999], [60.803193, 34.404102000000002], [61.210816999999999, 35.650072000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u0444\u0433\u0430\u043d\u0438\u0441\u0442\u0430\u043d", "fr": "Afghanistan", "en": "Afghanistan", "nl": "Afghanistan", "pt": "Afeganist\u00e3o", "no": "Afghanistan", "de": "Afghanistan", "it": "Afghanistan", "sv": "Afghanistan", "pl": "Afganistan", "fi": "Afganistan", "zh": "\u963f\u5bcc\u6c57", "ja": "\u30a2\u30d5\u30ac\u30cb\u30b9\u30bf\u30f3", "es": "Afganist\u00e1n"}, "label_fr": "Afghanistan", "name": "Afghanistan", "dbpedia_uri": "http://dbpedia.org/resource/Afghanistan"}, "id": "AFG"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[16.326528, -5.8774699999999998], [16.573180000000001, -6.6226450000000003], [16.860191, -7.2222980000000003], [17.089995999999999, -7.5456890000000003], [17.47297, -8.0685509999999994], [18.134222000000001, -7.9876779999999998], [18.464175999999998, -7.8470139999999997], [19.016752, -7.9882460000000002], [19.166613000000002, -7.7381840000000004], [19.417501999999999, -7.1554289999999998], [20.037723, -7.1163610000000004], [20.091622000000001, -6.9430899999999998], [20.601823, -6.9393180000000001], [20.514748000000001, -7.2996059999999998], [21.728110999999998, -7.2908720000000002], [21.746455999999998, -7.9200850000000003], [21.949131000000001, -8.3059010000000004], [21.801801000000001, -8.9087069999999997], [21.875181999999999, -9.5237079999999992], [22.208753000000002, -9.8947959999999995], [22.155268, -11.084801000000001], [22.402798000000001, -10.993074999999999], [22.837344999999999, -11.017621999999999], [23.456790999999999, -10.867863], [23.912215, -10.926826], [24.017893999999998, -11.237297999999999], [23.904153999999998, -11.722282], [24.079905, -12.191297], [23.930921999999999, -12.565848000000001], [24.016137000000001, -12.911046000000001], [21.933886000000001, -12.898436999999999], [21.887843, -16.080310000000001], [22.562477999999999, -16.898451000000001], [23.215047999999999, -17.523116000000002], [21.377175999999999, -17.930636], [18.956187, -17.789095], [18.263309, -17.309951000000002], [14.209707, -17.353100999999999], [14.058501, -17.423380999999999], [13.462362000000001, -16.971212000000001], [12.814081, -16.941343], [12.215460999999999, -17.111668000000002], [11.734199, -17.301888999999999], [11.640096, -16.673141999999999], [11.778537, -15.793816], [12.123581, -14.878316], [12.175618999999999, -14.449144], [12.500095, -13.547700000000001], [12.738479, -13.137905999999999], [13.312913999999999, -12.48363], [13.633721, -12.038645000000001], [13.738728, -11.297863], [13.686379000000001, -10.731076], [13.387328, -10.373578], [13.120988000000001, -9.7668970000000002], [12.87537, -9.1669339999999995], [12.929061000000001, -8.9590910000000008], [13.236433, -8.5626289999999994], [12.93304, -7.5965389999999999], [12.728298000000001, -6.9271219999999998], [12.227347, -6.294448], [12.322431999999999, -6.1000920000000001], [12.735170999999999, -5.9656820000000002], [13.024869000000001, -5.9843890000000002], [13.375597000000001, -5.8642409999999998], [16.326528, -5.8774699999999998]]], [[[12.436688, -5.684304], [12.182337, -5.7899310000000002], [11.914963, -5.0379870000000002], [12.318607999999999, -4.60623], [12.620760000000001, -4.4380230000000003], [12.995517, -4.7811029999999999], [12.631612000000001, -4.9912710000000002], [12.468004000000001, -5.2483620000000002], [12.436688, -5.684304]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u043d\u0433\u043e\u043b\u0430", "fr": "Angola", "en": "Angola", "nl": "Angola", "pt": "Angola", "no": "Angola", "de": "Angola", "it": "Angola", "sv": "Angola", "pl": "Angola", "fi": "Angola", "zh": "\u5b89\u54e5\u62c9", "ja": "\u30a2\u30f3\u30b4\u30e9", "es": "Angola"}, "label_fr": "Angola", "name": "Angola", "dbpedia_uri": "http://dbpedia.org/resource/Angola"}, "id": "AGO"}, {"geometry": {"type": "Polygon", "coordinates": [[[20.590247000000002, 41.855404], [20.463175, 41.515089000000003], [20.605181999999999, 41.086226000000003], [21.020040000000002, 40.842726999999996], [20.99999, 40.580004000000002], [20.674997000000001, 40.435000000000002], [20.614999999999998, 40.110007000000003], [20.150016000000001, 39.624997999999998], [19.98, 39.694992999999997], [19.960001999999999, 39.915005999999998], [19.406082000000001, 40.250773000000002], [19.319058999999999, 40.727229999999999], [19.403549999999999, 41.409565999999998], [19.540026999999998, 41.719985999999999], [19.371769, 41.877547999999997], [19.304486000000001, 42.195745000000002], [19.738050999999999, 42.688246999999997], [19.801613, 42.500093], [20.070699999999999, 42.588630000000002], [20.283754999999999, 42.320259999999998], [20.522950000000002, 42.217869999999998], [20.590247000000002, 41.855404]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u043b\u0431\u0430\u043d\u0438\u044f", "fr": "Albanie", "en": "Albania", "nl": "Albani\u00eb", "pt": "Alb\u00e2nia", "no": "Albania", "de": "Albanien", "it": "Albania", "sv": "Albanien", "pl": "Albania", "fi": "Albania", "zh": "\u963f\u5c14\u5df4\u5c3c\u4e9a", "ja": "\u30a2\u30eb\u30d0\u30cb\u30a2", "es": "Albania"}, "label_fr": "Albanie", "name": "Albania", "dbpedia_uri": "http://dbpedia.org/resource/Albania"}, "id": "ALB"}, {"geometry": {"type": "Polygon", "coordinates": [[[51.579518999999998, 24.245497], [51.757441, 24.294073000000001], [51.794389000000002, 24.019825999999998], [52.577081, 24.177439], [53.404007, 24.151316999999999], [54.008001, 24.121758], [54.693024000000001, 24.797892000000001], [55.439025000000001, 25.439145], [56.070821000000002, 26.055464000000001], [56.261042000000003, 25.714606], [56.396847000000001, 24.924731999999999], [55.886232999999997, 24.920831], [55.804119, 24.269604000000001], [55.981214000000001, 24.130542999999999], [55.528632000000002, 23.933603999999999], [55.525841, 23.524868999999999], [55.234489000000004, 23.110993000000001], [55.208340999999997, 22.70833], [55.006802999999998, 22.496948], [52.000732999999997, 23.001154], [51.617708, 24.014219000000001], [51.579518999999998, 24.245497]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0435 \u0410\u0440\u0430\u0431\u0441\u043a\u0438\u0435 \u042d\u043c\u0438\u0440\u0430\u0442\u044b", "fr": "\u00c9mirats arabes unis", "en": "United Arab Emirates", "nl": "Verenigde Arabische Emiraten", "pt": "Emirados \u00c1rabes Unidos", "no": "De forente arabiske emirater", "de": "Vereinigte Arabische Emirate", "it": "Emirati Arabi Uniti", "sv": "F\u00f6renade Arabemiraten", "pl": "Zjednoczone Emiraty Arabskie", "fi": "Yhdistyneet arabiemiirikunnat", "zh": "\u963f\u62c9\u4f2f\u8054\u5408\u914b\u957f\u56fd", "ja": "\u30a2\u30e9\u30d6\u9996\u9577\u56fd\u9023\u90a6", "es": "Emiratos \u00c1rabes Unidos"}, "label_fr": "\u00c9mirats arabes unis", "name": "United Arab Emirates", "dbpedia_uri": "http://dbpedia.org/resource/United_Arab_Emirates"}, "id": "ARE"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-65.5, -55.200000000000003], [-66.450000000000003, -55.25], [-66.959919999999997, -54.896810000000002], [-67.562439999999995, -54.870010000000001], [-68.633349999999993, -54.869500000000002], [-68.634010000000004, -52.636369999999999], [-68.25, -53.100000000000001], [-67.75, -53.850000000000001], [-66.450000000000003, -54.450000000000003], [-65.049999999999997, -54.700000000000003], [-65.5, -55.200000000000003]]], [[[-64.964892000000006, -22.075862000000001], [-64.377020999999999, -22.798090999999999], [-63.986837999999999, -21.993644], [-62.846468000000002, -22.034984999999999], [-62.685057, -22.249029], [-60.846564999999998, -23.880713], [-60.028965999999997, -24.032796000000001], [-58.807127999999999, -24.771459], [-57.777217, -25.16234], [-57.633659999999999, -25.603656999999998], [-58.618174000000003, -27.123719000000001], [-57.609760000000001, -27.395899], [-56.486702000000001, -27.548499], [-55.695846000000003, -27.387837000000001], [-54.788795, -26.621786], [-54.625290999999997, -25.739255], [-54.130049999999997, -25.547639], [-53.628349, -26.124865], [-53.648735000000002, -26.923473000000001], [-54.490724999999998, -27.474757], [-55.162286000000002, -27.881914999999999], [-56.290900000000001, -28.852761000000001], [-57.625132999999998, -30.216294999999999], [-57.874937000000003, -31.016556000000001], [-58.142440000000001, -32.044504000000003], [-58.132648000000003, -33.040567000000003], [-58.349611000000003, -33.263188999999997], [-58.427073999999998, -33.909453999999997], [-58.495441999999997, -34.431489999999997], [-57.225830000000002, -35.288027], [-57.362358999999998, -35.97739], [-56.737487000000002, -36.413125999999998], [-56.788285000000002, -36.901572000000002], [-57.749156999999997, -38.183871000000003], [-59.231856999999998, -38.720219999999998], [-61.237445000000001, -38.928424999999997], [-62.335957000000001, -38.827706999999997], [-62.125762999999999, -39.424104999999997], [-62.330531000000001, -40.172586000000003], [-62.145994000000002, -40.676896999999997], [-62.745803000000002, -41.028761000000003], [-63.770494999999997, -41.166789000000001], [-64.732089999999999, -40.802677000000003], [-65.118035000000006, -41.064315000000001], [-64.978560999999999, -42.058000999999997], [-64.303408000000005, -42.359015999999997], [-63.755947999999997, -42.043686999999998], [-63.458058999999999, -42.563138000000002], [-64.378804000000002, -42.873558000000003], [-65.181804, -43.495381000000002], [-65.328823, -44.501365999999997], [-65.565269000000001, -45.036785999999999], [-66.509966000000006, -45.039628], [-67.293794000000005, -45.551895999999999], [-67.580545999999998, -46.301772999999997], [-66.597065999999998, -47.033925000000004], [-65.641026999999994, -47.236134999999997], [-65.985088000000005, -48.133288999999998], [-67.166179, -48.697336999999997], [-67.816087999999993, -49.869669000000002], [-68.728745000000004, -50.264218], [-69.138538999999994, -50.732509999999998], [-68.815561000000002, -51.771104000000001], [-68.149995000000004, -52.349983000000002], [-68.571545, -52.299444000000001], [-69.498362, -52.142761], [-71.914804000000004, -52.009022000000002], [-72.329403999999997, -51.425955999999999], [-72.309973999999997, -50.677010000000003], [-72.975746999999998, -50.74145], [-73.328051000000002, -50.378785000000001], [-73.415436, -49.318435999999998], [-72.648246999999998, -48.878618000000003], [-72.331160999999994, -48.244238000000003], [-72.447355000000002, -47.738532999999997], [-71.917258000000004, -46.884838000000002], [-71.552008999999998, -45.560732999999999], [-71.659316000000004, -44.973689], [-71.222779000000003, -44.784242999999996], [-71.329801000000003, -44.407522], [-71.793622999999997, -44.207172], [-71.464055999999999, -43.787610999999998], [-71.915424000000002, -43.408565000000003], [-72.148898000000003, -42.254888000000001], [-71.746803999999997, -42.051386000000001], [-71.915734, -40.832338999999997], [-71.680761000000004, -39.808163999999998], [-71.413516999999999, -38.916021999999998], [-70.814663999999993, -38.552995000000003], [-71.118624999999994, -37.576827000000002], [-71.121881000000002, -36.658124000000001], [-70.364768999999995, -36.005088999999998], [-70.388048999999995, -35.169688000000001], [-69.817308999999995, -34.193570999999999], [-69.814777000000007, -33.273885999999997], [-70.074399, -33.091209999999997], [-70.535068999999993, -31.365010000000002], [-69.919008000000005, -30.336338999999999], [-70.013549999999995, -29.367923000000001], [-69.656130000000005, -28.459140999999999], [-69.001234999999994, -27.521214000000001], [-68.295541999999998, -26.899339999999999], [-68.594800000000006, -26.506909], [-68.386000999999993, -26.185016000000001], [-68.417653000000001, -24.518554999999999], [-67.328442999999993, -24.025303000000001], [-66.985234000000005, -22.986349000000001], [-67.106673999999998, -22.735925000000002], [-66.273339000000007, -21.83231], [-64.964892000000006, -22.075862000000001]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u0440\u0433\u0435\u043d\u0442\u0438\u043d\u0430", "fr": "Argentine", "en": "Argentina", "nl": "Argentini\u00eb", "pt": "Argentina", "no": "Argentina", "de": "Argentinien", "it": "Argentina", "sv": "Argentina", "pl": "Argentyna", "fi": "Argentiina", "zh": "\u963f\u6839\u5ef7", "ja": "\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3", "es": "Argentina"}, "label_fr": "Argentine", "name": "Argentina", "dbpedia_uri": "http://dbpedia.org/resource/Argentina"}, "id": "ARG"}, {"geometry": {"type": "Polygon", "coordinates": [[[43.582746, 41.092143], [44.972479999999997, 41.248128999999999], [45.179496, 40.985354000000001], [45.560350999999997, 40.812289999999997], [45.359175, 40.561503999999999], [45.891907000000003, 40.218476000000003], [45.610011999999998, 39.899994], [46.034534000000001, 39.628020999999997], [46.483499000000002, 39.464154999999998], [46.505719999999997, 38.770605000000003], [46.143622999999998, 38.741200999999997], [45.735379000000002, 39.319718999999999], [45.739978000000001, 39.473998999999999], [45.298144999999998, 39.471750999999998], [45.001987, 39.740003999999999], [44.793990000000001, 39.713003], [44.400008999999997, 40.005000000000003], [43.656435999999999, 40.253563999999997], [43.752657999999997, 40.740200999999999], [43.582746, 41.092143]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u0440\u043c\u0435\u043d\u0438\u044f", "fr": "Arm\u00e9nie", "en": "Armenia", "nl": "Armeni\u00eb", "pt": "Arm\u00e9nia", "no": "Armenia", "de": "Armenien", "it": "Armenia", "sv": "Armenien", "pl": "Armenia", "fi": "Armenia", "zh": "\u4e9e\u7f8e\u5c3c\u4e9e", "ja": "\u30a2\u30eb\u30e1\u30cb\u30a2", "es": "Armenia"}, "label_fr": "Arm\u00e9nie", "name": "Armenia", "dbpedia_uri": "http://dbpedia.org/resource/Armenia"}, "id": "ARM"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-59.572094999999997, -80.040178999999995], [-59.865848999999997, -80.549656999999996], [-60.159655999999998, -81.000326999999999], [-62.255392999999998, -80.863178000000005], [-64.488124999999997, -80.921933999999993], [-65.741665999999995, -80.588826999999995], [-65.741665999999995, -80.549656999999996], [-66.290030999999999, -80.255773000000005], [-64.037688000000003, -80.294944000000001], [-61.883246, -80.392870000000002], [-61.138976, -79.981370999999996], [-60.610118999999997, -79.628679000000005], [-59.572094999999997, -80.040178999999995]]], [[[-159.20818399999999, -79.497058999999993], [-161.127601, -79.634208999999998], [-162.43984699999999, -79.281464999999997], [-163.02740800000001, -78.928774000000004], [-163.06660400000001, -78.869966000000005], [-163.712896, -78.595667000000006], [-163.712896, -78.595667000000006], [-163.10580100000001, -78.223337999999998], [-161.245113, -78.380176000000006], [-160.246208, -78.693645000000004], [-159.482405, -79.046338000000006], [-159.20818399999999, -79.497058999999993]]], [[[-45.154758000000001, -78.047070000000005], [-43.920828, -78.478103000000004], [-43.48995, -79.085560000000001], [-43.372438000000002, -79.516644999999997], [-43.333266999999999, -80.026122999999998], [-44.880536999999997, -80.339644000000007], [-46.506174000000001, -80.594357000000002], [-48.386420999999999, -80.829485000000005], [-50.482106999999999, -81.025441999999998], [-52.851987999999999, -80.966684999999998], [-54.164259000000001, -80.633527999999998], [-53.987991000000001, -80.222027999999995], [-51.853133999999997, -79.947730000000007], [-50.991326000000001, -79.614622999999995], [-50.364595000000001, -79.183487], [-49.914130999999998, -78.811209000000005], [-49.306958999999999, -78.458568999999997], [-48.660615999999997, -78.047017999999994], [-48.660615999999997, -78.047019000000006], [-48.151395999999998, -78.047070000000005], [-46.662857000000002, -77.831475999999995], [-45.154758000000001, -78.047070000000005]]], [[[-121.211511, -73.500990000000002], [-119.918851, -73.657724999999999], [-118.724143, -73.481352999999999], [-119.292119, -73.834097], [-120.23221700000001, -74.088809999999995], [-121.62282999999999, -74.010468000000003], [-122.621735, -73.657777999999993], [-122.621735, -73.657776999999996], [-122.406245, -73.324618999999998], [-121.211511, -73.500990000000002]]], [[[-125.559566, -73.481352999999999], [-124.031882, -73.873267999999996], [-124.619469, -73.834097], [-125.912181, -73.736118000000005], [-127.28313, -73.461769000000004], [-127.28313, -73.461768000000006], [-126.55847199999999, -73.246225999999993], [-125.559566, -73.481352999999999]]], [[[-98.981549999999999, -71.933334000000002], [-97.884743, -72.070535000000007], [-96.787936999999999, -71.952971000000005], [-96.20035, -72.521204999999995], [-96.983765000000005, -72.442864], [-98.198082999999997, -72.482034999999996], [-99.432012999999998, -72.442864], [-100.783455, -72.501620000000003], [-101.801868, -72.305662999999996], [-102.330725, -71.894164000000004], [-102.330725, -71.894164000000004], [-101.70396700000001, -71.717792000000003], [-100.430919, -71.854992999999993], [-98.981549999999999, -71.933334000000002]]], [[[-68.451346000000001, -70.955822999999995], [-68.333833999999996, -71.406492999999998], [-68.510127999999995, -71.798406999999997], [-68.784296999999995, -72.170736000000005], [-69.959470999999994, -72.307884999999999], [-71.075889000000004, -72.503842000000006], [-72.388133999999994, -72.484256999999999], [-71.898499999999999, -72.092343], [-73.073622, -72.229491999999993], [-74.190039999999996, -72.366692999999998], [-74.953895000000003, -72.072756999999996], [-75.012625, -71.661258000000004], [-73.915818999999999, -71.269345000000001], [-73.915818999999999, -71.269344000000004], [-73.230331000000007, -71.151780000000002], [-72.074717000000007, -71.190950999999998], [-71.780962000000002, -70.681472999999997], [-71.722179999999994, -70.309196], [-71.741791000000006, -69.505781999999996], [-71.173815000000005, -69.035475000000005], [-70.253252000000003, -68.878739999999993], [-69.724446999999998, -69.251017000000004], [-69.489422000000005, -69.623345999999998], [-69.058518000000007, -70.074016], [-68.725541000000007, -70.505153000000007], [-68.451346000000001, -70.955822999999995]]], [[[-58.614142999999999, -64.152467000000001], [-59.045073000000002, -64.368009999999998], [-59.789341999999998, -64.211223000000004], [-60.611927999999999, -64.309201999999999], [-61.297415999999998, -64.544330000000002], [-62.022100000000002, -64.799093999999997], [-62.511760000000002, -65.093029999999999], [-62.648857999999997, -65.484942000000004], [-62.590128, -65.857219000000001], [-62.120078999999997, -66.190325999999999], [-62.805567000000003, -66.425505000000001], [-63.745690000000003, -66.503846999999993], [-64.294105999999999, -66.837003999999993], [-64.881692999999999, -67.150474000000003], [-65.508425000000003, -67.581609999999998], [-65.665081999999998, -67.953886999999995], [-65.312545, -68.365335000000002], [-64.783715000000001, -68.678908000000007], [-63.961103000000001, -68.913983999999999], [-63.197299999999998, -69.227556000000007], [-62.785955000000001, -69.619418999999994], [-62.570515999999998, -69.991747000000004], [-62.276736, -70.383661000000004], [-61.806660999999998, -70.716768000000002], [-61.512906000000001, -71.089044999999999], [-61.375808999999997, -72.010074000000003], [-61.081977000000002, -72.382351], [-61.003661000000001, -72.774265], [-60.690269000000001, -73.166179], [-60.827367000000002, -73.695241999999993], [-61.375808999999997, -74.106741999999997], [-61.963369999999998, -74.439847999999998], [-63.295200999999999, -74.576997000000006], [-63.745690000000003, -74.929739999999995], [-64.352835999999996, -75.262846999999994], [-65.860986999999994, -75.635124000000005], [-67.192818000000003, -75.791910000000001], [-68.446281999999997, -76.007452000000001], [-69.797724000000002, -76.222994999999997], [-70.600724, -76.634494000000004], [-72.206776000000005, -76.673665], [-73.969536000000005, -76.634494000000004], [-75.555976999999999, -76.712886999999995], [-77.240369999999999, -76.712886999999995], [-76.926979000000003, -77.104802000000007], [-75.399293999999998, -77.28107], [-74.282876000000002, -77.555419999999998], [-73.656119000000004, -77.908112000000003], [-74.772536000000002, -78.221632999999997], [-76.496099999999998, -78.123654000000002], [-77.925858000000005, -78.378418999999994], [-77.984666000000004, -78.789918], [-78.023785000000004, -79.181832999999997], [-76.848636999999997, -79.514938999999998], [-76.633223999999998, -79.887215999999995], [-75.360096999999996, -80.259545000000003], [-73.244851999999995, -80.416331], [-71.442946000000006, -80.690629999999999], [-70.013163000000006, -81.004150999999993], [-68.191646000000006, -81.317672000000002], [-65.704279, -81.474457999999998], [-63.256030000000003, -81.748756999999998], [-61.552025999999998, -82.042692000000002], [-59.691415999999997, -82.37585], [-58.712121000000003, -82.846106000000006], [-58.222487000000001, -83.218434000000002], [-57.008116999999999, -82.865690999999998], [-55.362893999999997, -82.571754999999996], [-53.619771, -82.258234999999999], [-51.543644, -82.003521000000006], [-49.76135, -81.729170999999994], [-47.273930999999997, -81.709586000000002], [-44.825707999999999, -81.846734999999995], [-42.808363, -82.081914999999995], [-42.162019999999998, -81.650829999999999], [-40.771433000000002, -81.356893999999997], [-38.244818000000002, -81.337309000000005], [-36.266669999999998, -81.121714999999995], [-34.386397000000002, -80.906171999999998], [-32.310296000000001, -80.769023000000004], [-30.097097999999999, -80.592651000000004], [-28.549802, -80.337937999999994], [-29.254901, -79.985195000000004], [-29.685804999999998, -79.632503], [-29.685804999999998, -79.260226000000003], [-31.624808000000002, -79.299396999999999], [-33.681323999999996, -79.456131999999997], [-35.639912000000002, -79.456131999999997], [-35.914107000000001, -79.083855], [-35.777009999999997, -78.339247999999998], [-35.326546, -78.123654000000002], [-33.896763, -77.888525999999999], [-32.212369000000002, -77.653450000000007], [-30.998051, -77.359515000000002], [-29.783732000000001, -77.065579], [-28.882778999999999, -76.673665], [-27.511752000000001, -76.497344999999996], [-26.160336000000001, -76.360144000000005], [-25.474822, -76.281802999999996], [-23.927551999999999, -76.242580000000004], [-22.458597999999999, -76.105430999999996], [-21.224694, -75.909474000000003], [-20.010375, -75.674346], [-18.913543000000001, -75.439217999999997], [-17.522981999999999, -75.125698], [-16.641589, -74.792540000000002], [-15.701491000000001, -74.498604], [-15.40771, -74.106741999999997], [-16.465319999999998, -73.871613999999994], [-16.112784000000001, -73.460114000000004], [-15.446854999999999, -73.146541999999997], [-14.408804999999999, -72.950585000000004], [-13.311973, -72.715457000000001], [-12.293507999999999, -72.401936000000006], [-11.510066999999999, -72.010074000000003], [-11.020433000000001, -71.539766999999998], [-10.295774, -71.265416000000002], [-9.1010150000000003, -71.324224000000001], [-8.6113809999999997, -71.657330000000002], [-7.4166220000000003, -71.696500999999998], [-7.3774509999999998, -71.324224000000001], [-6.8682319999999999, -70.932310000000001], [-5.790985, -71.030288999999996], [-5.5363749999999996, -71.402617000000006], [-4.3416670000000002, -71.461372999999995], [-3.0489809999999999, -71.285053000000005], [-1.7954920000000001, -71.167438000000004], [-0.65948899999999999, -71.226246000000003], [-0.22863700000000001, -71.637744999999995], [0.86819500000000005, -71.304638999999995], [1.8866860000000001, -71.128266999999994], [3.0226380000000002, -70.991118], [4.1390549999999999, -70.853916999999996], [5.157546, -70.618789000000007], [6.2739120000000002, -70.462055000000007], [7.1357200000000001, -70.246511999999996], [7.7428660000000002, -69.893769000000006], [8.4871099999999995, -70.148533999999998], [9.5251350000000006, -70.011332999999993], [10.249845000000001, -70.481639999999999], [10.817821, -70.834332000000003], [11.953823999999999, -70.638374999999996], [12.404287, -70.246511999999996], [13.422777999999999, -69.972161999999997], [14.734997999999999, -70.030918], [15.126757, -70.403246999999993], [15.949342, -70.030918], [17.026589000000001, -69.913353999999998], [18.201711, -69.874183000000002], [19.259373, -69.893769000000006], [20.375738999999999, -70.011332999999993], [21.452985000000002, -70.070139999999995], [21.923034000000001, -70.403246999999993], [22.569403000000001, -70.697181999999998], [23.666184000000001, -70.520810999999995], [24.841356999999999, -70.481639999999999], [25.977309000000002, -70.481639999999999], [27.093726, -70.462055000000007], [28.092580000000002, -70.324854000000002], [29.150241999999999, -70.20729], [30.031583000000001, -69.932940000000002], [30.971733, -69.756619999999998], [31.990172000000001, -69.658641000000003], [32.754052999999999, -69.384291000000005], [33.302442999999997, -68.835642000000007], [33.870418999999998, -68.502588000000003], [34.908495000000002, -68.659271000000004], [35.300201999999999, -69.012013999999994], [36.162010000000002, -69.247141999999997], [37.200035, -69.168747999999994], [37.905107999999998, -69.521439999999998], [38.649403999999997, -69.776205000000004], [39.667893999999997, -69.541077000000001], [40.020431000000002, -69.109941000000006], [40.921357999999998, -68.933621000000002], [41.959434000000002, -68.600514000000004], [42.938701999999999, -68.463312999999999], [44.113875999999998, -68.267408000000003], [44.897291000000003, -68.051866000000004], [45.719928000000003, -67.816738000000001], [46.503343000000001, -67.601196000000002], [47.443440000000002, -67.718759000000006], [48.344419000000002, -67.366067999999999], [48.990735999999998, -67.091718], [49.930885000000004, -67.111303000000007], [50.753470999999998, -66.876175000000003], [50.949325000000002, -66.523483999999996], [51.791547000000001, -66.249133], [52.614133000000002, -66.053175999999993], [53.613038000000003, -65.896389999999997], [54.533549999999998, -65.818049000000002], [55.414943000000001, -65.876805000000004], [56.355041, -65.974783000000002], [57.158093000000001, -66.249133], [57.255968000000003, -66.680217999999996], [58.137360999999999, -67.013323999999997], [58.744508000000003, -67.287674999999993], [59.939318, -67.405238999999995], [60.605221, -67.679589000000007], [61.427805999999997, -67.953886999999995], [62.387489000000002, -68.012694999999994], [63.190489999999997, -67.816738000000001], [64.052349000000007, -67.405238999999995], [64.992446999999999, -67.620728999999997], [65.971715000000003, -67.738344999999995], [66.911863999999994, -67.855908999999997], [67.891132999999996, -67.934302000000002], [68.890038000000004, -67.934302000000002], [69.712624000000005, -68.972791000000001], [69.673452999999995, -69.227556000000007], [69.555941000000004, -69.678225999999995], [68.596258000000006, -69.932940000000002], [67.812740000000005, -70.305267999999998], [67.949888999999999, -70.697181999999998], [69.066306999999995, -70.677544999999995], [68.929157000000004, -71.069458999999995], [68.419989000000001, -71.441788000000003], [67.949888999999999, -71.853286999999995], [68.713769999999997, -72.166808000000003], [69.869307000000006, -72.264786999999998], [71.024895000000001, -72.088414999999998], [71.573284999999998, -71.696500999999998], [71.906288000000004, -71.324224000000001], [72.454627000000002, -71.010703000000007], [73.081410000000005, -70.716768000000002], [73.336020000000005, -70.364024000000001], [73.864877000000007, -69.874183000000002], [74.491557, -69.776205000000004], [75.627560000000003, -69.737033999999994], [76.626464999999996, -69.619418999999994], [77.644903999999997, -69.462683999999996], [78.134539000000004, -69.070769999999996], [78.428370999999999, -68.698441000000003], [79.113859000000005, -68.326216000000002], [80.093126999999996, -68.071503000000007], [80.93535, -67.875546], [81.483791999999994, -67.542388000000003], [82.051766999999998, -67.366067999999999], [82.776426000000001, -67.209282000000002], [83.775330999999994, -67.307259999999999], [84.676205999999993, -67.209282000000002], [85.655527000000006, -67.091718], [86.752358999999998, -67.150474000000003], [87.477017000000004, -66.876175000000003], [87.986288999999999, -66.209911000000005], [88.358411000000004, -66.484261000000004], [88.828407999999996, -66.954567999999995], [89.670630000000003, -67.150474000000003], [90.630364999999998, -67.228866999999994], [91.590100000000007, -67.111303000000007], [92.608538999999993, -67.189695999999998], [93.548636999999999, -67.209282000000002], [94.175420000000003, -67.111303000000007], [95.017590999999996, -67.170111000000006], [95.781471999999994, -67.385653000000005], [96.682399000000004, -67.248503999999997], [97.759646000000004, -67.248503999999997], [98.680210000000002, -67.111303000000007], [99.718181999999999, -67.248503999999997], [100.38418799999999, -66.915346], [100.893356, -66.582239999999999], [101.578896, -66.30789], [102.83241099999999, -65.563283999999996], [103.47867599999999, -65.700485], [104.24255700000001, -65.974783000000002], [104.90846000000001, -66.327527000000003], [106.181561, -66.934931000000006], [107.160881, -66.954567999999995], [108.08139300000001, -66.954567999999995], [109.15864000000001, -66.837003999999993], [110.23583499999999, -66.699804], [111.05847199999999, -66.425505000000001], [111.74396, -66.131569999999996], [112.860378, -66.092347000000004], [113.60467300000001, -65.876805000000004], [114.388088, -66.072761999999997], [114.897308, -66.386283000000006], [115.60238099999999, -66.699804], [116.699161, -66.660633000000004], [117.38470100000001, -66.915346], [118.57946, -67.170111000000006], [119.83292400000001, -67.268089000000003], [120.871, -67.189695999999998], [121.654415, -66.876175000000003], [122.320369, -66.562653999999995], [123.221296, -66.484261000000004], [124.122274, -66.621461999999994], [125.160247, -66.719389000000007], [126.100396, -66.562653999999995], [127.00142700000001, -66.562653999999995], [127.882768, -66.660633000000004], [128.80328, -66.758611000000002], [129.70425900000001, -66.582239999999999], [130.781454, -66.425505000000001], [131.79994500000001, -66.386283000000006], [132.93589600000001, -66.386283000000006], [133.85646, -66.288303999999997], [134.75738699999999, -66.209963000000002], [135.03158199999999, -65.720070000000007], [135.070753, -65.308571000000001], [135.697485, -65.582869000000002], [135.873805, -66.033591000000001], [136.206705, -66.445089999999993], [136.61804900000001, -66.778197000000006], [137.46027100000001, -66.954567999999995], [138.59622300000001, -66.895760999999993], [139.90844200000001, -66.876175000000003], [140.80942099999999, -66.817367000000004], [142.121692, -66.817367000000004], [143.06184200000001, -66.797781999999998], [144.37406100000001, -66.837003999999993], [145.49042700000001, -66.915346], [146.19555199999999, -67.228866999999994], [145.99969899999999, -67.601196000000002], [146.64606699999999, -67.895131000000006], [147.723263, -68.130258999999995], [148.839629, -68.385024000000001], [150.13231400000001, -68.561291999999995], [151.48370499999999, -68.718130000000002], [152.50224700000001, -68.874813000000003], [153.63819899999999, -68.894502000000003], [154.28456700000001, -68.561291999999995], [155.16585699999999, -68.835642000000007], [155.92979, -69.149214999999998], [156.81113199999999, -69.384291000000005], [158.02552800000001, -69.482269000000002], [159.18101300000001, -69.599833000000004], [159.67069900000001, -69.991747000000004], [160.80664999999999, -70.226875000000007], [161.57047900000001, -70.579617999999996], [162.68689699999999, -70.736352999999994], [163.842434, -70.716768000000002], [164.919681, -70.775524000000004], [166.11444, -70.755938], [167.30909500000001, -70.834332000000003], [168.42561599999999, -70.971480999999997], [169.46358900000001, -71.206659999999999], [170.501665, -71.402617000000006], [171.20679000000001, -71.696500999999998], [171.08922699999999, -72.088414999999998], [170.56042199999999, -72.441158999999999], [170.10995800000001, -72.891829000000001], [169.75737000000001, -73.244519999999994], [169.28732099999999, -73.656019999999998], [167.975101, -73.812805999999995], [167.38748899999999, -74.165497999999999], [166.09480300000001, -74.381039999999999], [165.64439100000001, -74.772953999999999], [164.95885100000001, -75.145283000000006], [164.234193, -75.458804000000001], [163.82279700000001, -75.870303000000007], [163.56823900000001, -76.242580000000004], [163.47026, -76.693302000000003], [163.48989700000001, -77.065579], [164.057873, -77.457442], [164.27336299999999, -77.829769999999996], [164.74346399999999, -78.182513999999998], [166.60412600000001, -78.319610999999995], [166.99578099999999, -78.750748000000002], [165.19387599999999, -78.907482999999999], [163.66621699999999, -79.123024999999998], [161.76638500000001, -79.162248000000005], [160.924162, -79.730481999999995], [160.747894, -80.200737000000004], [160.31696400000001, -80.573065999999997], [159.78821099999999, -80.945395000000005], [161.12001599999999, -81.278501000000006], [161.62928700000001, -81.690000999999995], [162.49099200000001, -82.062278000000006], [163.70533599999999, -82.395435000000006], [165.09594899999999, -82.708956000000001], [166.60412600000001, -83.022476999999995], [168.89566500000001, -83.335998000000004], [169.40478200000001, -83.825890999999999], [172.28393399999999, -84.041432999999998], [172.47704899999999, -84.117913999999999], [173.22408300000001, -84.413709999999995], [175.98567199999999, -84.158996999999999], [178.27721199999999, -84.472517999999994], [180, -84.713380000000001], [-179.942499, -84.721442999999994], [-179.05867699999999, -84.139411999999993], [-177.25677200000001, -84.452933000000002], [-177.140807, -84.417940999999999], [-176.08467300000001, -84.099259000000004], [-175.94723500000001, -84.110449000000003], [-175.829882, -84.117913999999999], [-174.38250300000001, -84.534323000000001], [-173.116559, -84.117913999999999], [-172.889106, -84.061019000000002], [-169.951223, -83.884647000000001], [-168.999989, -84.117913999999999], [-168.53019900000001, -84.237390000000005], [-167.022099, -84.570497000000003], [-164.18214399999999, -84.825209999999998], [-161.92977500000001, -85.138731000000007], [-158.07138, -85.373909999999995], [-155.19225299999999, -85.099559999999997], [-150.94209900000001, -85.295517000000004], [-148.533073, -85.609037999999998], [-145.88891799999999, -85.315101999999996], [-143.10771800000001, -85.040751999999998], [-142.892279, -84.570497000000003], [-146.82906800000001, -84.531273999999996], [-150.060732, -84.296145999999993], [-150.902928, -83.904231999999993], [-153.58620099999999, -83.688689999999994], [-153.409907, -83.238020000000006], [-153.03775899999999, -82.826520000000002], [-152.665637, -82.454192000000006], [-152.86151699999999, -82.042692000000002], [-154.52629899999999, -81.768394000000001], [-155.29017999999999, -81.415649999999999], [-156.83744999999999, -81.102129000000005], [-154.40878699999999, -81.160937000000004], [-152.09766200000001, -81.004150999999993], [-150.648293, -81.337309000000005], [-148.86599799999999, -81.043373000000003], [-147.22075000000001, -80.671045000000007], [-146.41774899999999, -80.337937999999994], [-146.770286, -79.926439000000002], [-148.06294700000001, -79.652089000000004], [-149.531901, -79.358204999999998], [-151.588416, -79.299396999999999], [-153.390322, -79.162248000000005], [-155.329376, -79.064268999999996], [-155.97566800000001, -78.691940000000002], [-157.26830200000001, -78.378418999999994], [-158.05176800000001, -78.025676000000004], [-158.36513400000001, -76.889206999999999], [-157.875474, -76.987238000000005], [-156.97457299999999, -77.300758999999999], [-155.329376, -77.202727999999993], [-153.74283199999999, -77.065579], [-152.92024699999999, -77.496663999999996], [-151.33377999999999, -77.398736999999997], [-150.00194999999999, -77.183143000000001], [-148.74848600000001, -76.908844999999999], [-147.612483, -76.575738000000001], [-146.104409, -76.477760000000004], [-146.143528, -76.105430999999996], [-146.49609100000001, -75.733153999999999], [-146.20231000000001, -75.380410999999995], [-144.90962400000001, -75.204038999999995], [-144.32203699999999, -75.537197000000006], [-142.794353, -75.341239999999999], [-141.63876400000001, -75.086474999999993], [-140.20900700000001, -75.066890000000001], [-138.85758999999999, -74.968911000000006], [-137.50620000000001, -74.733783000000003], [-136.428901, -74.518241000000003], [-135.214583, -74.302699000000004], [-134.431194, -74.361455000000007], [-133.745654, -74.439847999999998], [-132.25716800000001, -74.302699000000004], [-130.92531099999999, -74.479018999999994], [-129.554284, -74.459433000000004], [-128.24203800000001, -74.322283999999996], [-126.89062199999999, -74.420263000000006], [-125.40208199999999, -74.518241000000003], [-124.01149599999999, -74.479018999999994], [-122.562152, -74.498604], [-121.07361299999999, -74.518241000000003], [-119.70256000000001, -74.479018999999994], [-118.684145, -74.185083000000006], [-117.469801, -74.028347999999994], [-116.216312, -74.243891000000005], [-115.021552, -74.067519000000004], [-113.94433100000001, -73.714827999999997], [-113.297988, -74.028347999999994], [-112.945452, -74.381039999999999], [-112.299083, -74.714197999999996], [-111.261059, -74.420263000000006], [-110.06632500000001, -74.792540000000002], [-108.71490900000001, -74.910103000000007], [-107.55934600000001, -75.184454000000002], [-106.149148, -75.125698], [-104.876074, -74.949325999999999], [-103.367949, -74.988496999999995], [-102.016507, -75.125698], [-100.64553100000001, -75.302018000000004], [-100.11669999999999, -74.870932999999994], [-100.763043, -74.537825999999995], [-101.252703, -74.185083000000006], [-102.545337, -74.106741999999997], [-103.11331300000001, -73.734413000000004], [-103.32875199999999, -73.362083999999996], [-103.68128900000001, -72.617530000000002], [-102.917485, -72.754678999999996], [-101.60523999999999, -72.813435999999996], [-100.312528, -72.754678999999996], [-99.137379999999993, -72.911413999999994], [-98.118888999999996, -73.205349999999996], [-97.688036999999994, -73.558041000000003], [-96.336595000000003, -73.616849000000002], [-95.043960999999996, -73.479699999999994], [-93.672906999999995, -73.283743000000001], [-92.439003, -73.166179], [-91.420563999999999, -73.401307000000003], [-90.088733000000005, -73.322913999999997], [-89.226951, -72.558722000000003], [-88.423951000000002, -73.009393000000003], [-87.268337000000002, -73.185764000000006], [-86.014821999999995, -73.087785999999994], [-85.192235999999994, -73.479699999999994], [-83.879991000000004, -73.518871000000004], [-82.665645999999995, -73.636433999999994], [-81.470912999999996, -73.851977000000005], [-80.687447000000006, -73.479699999999994], [-80.295790999999994, -73.126956000000007], [-79.296886000000001, -73.518871000000004], [-77.925858000000005, -73.420891999999995], [-76.907366999999994, -73.636433999999994], [-76.221879000000001, -73.969541000000007], [-74.890049000000005, -73.871613999999994], [-73.852024, -73.656019999999998], [-72.833533000000003, -73.401307000000003], [-71.619214999999997, -73.264156999999997], [-70.209041999999997, -73.146541999999997], [-68.935916000000006, -73.009393000000003], [-67.956621999999996, -72.793850000000006], [-67.369061000000002, -72.480328999999998], [-67.134035999999995, -72.049244000000002], [-67.251548, -71.637744999999995], [-67.564940000000007, -71.245830999999995], [-67.917477000000005, -70.853916999999996], [-68.230842999999993, -70.462055000000007], [-68.485451999999995, -70.109311000000005], [-68.544208999999995, -69.717397000000005], [-68.446281999999997, -69.325535000000002], [-67.976232999999993, -68.953205999999994], [-67.584500000000006, -68.541707000000002], [-67.427842999999996, -68.149844000000002], [-67.623670000000004, -67.718759000000006], [-67.741183000000007, -67.326845000000006], [-67.251548, -66.876175000000003], [-66.703183999999993, -66.582239999999999], [-66.056815, -66.209963000000002], [-65.371326999999994, -65.896389999999997], [-64.568275999999997, -65.602506000000005], [-64.176541999999998, -65.171423000000004], [-63.628152, -64.897073000000006], [-63.001393999999998, -64.642308], [-62.041685999999999, -64.583551999999997], [-61.414928000000003, -64.270031000000003], [-60.709854999999997, -64.074073999999996], [-59.887269000000003, -63.956510000000002], [-59.162585, -63.701745000000003], [-58.594557000000002, -63.388224000000001], [-57.811143000000001, -63.270659999999999], [-57.223582, -63.525424999999998], [-57.595730000000003, -63.858531999999997], [-58.614142999999999, -64.152467000000001]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u043d\u0442\u0430\u0440\u043a\u0442\u0438\u0434\u0430", "fr": "Antarctique", "en": "Antarctica", "nl": "Antarctica", "pt": "Ant\u00e1rtica", "no": "Antarktika", "de": "Antarktika", "it": "Antartide", "sv": "Antarktis", "pl": "Antarktyda", "fi": "Etel\u00e4manner", "zh": "\u5357\u6781\u6d32", "ja": "\u5357\u6975\u5927\u9678", "es": "Ant\u00e1rtida"}, "label_fr": "Antarctique", "name": "Antarctica", "dbpedia_uri": "http://dbpedia.org/resource/Antarctica"}, "id": "ATA"}, {"geometry": {"type": "Polygon", "coordinates": [[[68.935000000000002, -48.625], [69.579999999999998, -48.939999999999998], [70.525000000000006, -49.064999999999998], [70.560000000000002, -49.255000000000003], [70.280000000000001, -49.710000000000001], [68.745000000000005, -49.774999999999999], [68.719999999999999, -49.2425], [68.867500000000007, -48.829999999999998], [68.935000000000002, -48.625]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u0441\u043a\u0438\u0435 \u042e\u0436\u043d\u044b\u0435 \u0438 \u0410\u043d\u0442\u0430\u0440\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0438", "fr": "Terres australes et antarctiques fran\u00e7aises", "en": "French Southern and Antarctic Lands", "nl": "Franse Zuidelijke en Antarctische Gebieden", "pt": "Terras Austrais e Ant\u00e1rticas Francesas", "no": "De franske s\u00f8rterritorier", "de": "Franz\u00f6sische S\u00fcd- und Antarktisgebiete", "it": "Terre australi e antartiche francesi", "sv": "Franska sydterritorierna", "pl": "Francuskie Terytoria Po\u0142udniowe i Antarktyczne", "fi": "Ranskan etel\u00e4iset ja antarktiset alueet", "zh": "\u6cd5\u5c5e\u5357\u90e8\u9886\u5730", "ja": "\u30d5\u30e9\u30f3\u30b9\u9818\u5357\u65b9\u30fb\u5357\u6975\u5730\u57df", "es": "Tierras Australes y Ant\u00e1rticas Francesas"}, "label_fr": "Terres australes et antarctiques fran\u00e7aises", "name": "French Southern and Antarctic Lands", "dbpedia_uri": "http://dbpedia.org/resource/French_Southern_and_Antarctic_Lands"}, "id": "ATF"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[145.39797799999999, -40.792549000000001], [146.36412100000001, -41.137695000000001], [146.90858399999999, -41.000546], [147.68925899999999, -40.808258000000002], [148.28906799999999, -40.875438000000003], [148.35986500000001, -42.062444999999997], [148.017301, -42.407024], [147.914052, -43.211522000000002], [147.56456399999999, -42.937688999999999], [146.87034299999999, -43.634596999999999], [146.66332700000001, -43.580854000000002], [146.04837800000001, -43.549745000000001], [145.43192999999999, -42.693776], [145.29508999999999, -42.033610000000003], [144.71807100000001, -41.162551999999998], [144.74375499999999, -40.703975], [145.39797799999999, -40.792549000000001]]], [[[143.56181100000001, -13.763655999999999], [143.922099, -14.548311], [144.563714, -14.171176000000001], [144.89490799999999, -14.594457999999999], [145.37472399999999, -14.984976], [145.27199100000001, -15.428205], [145.48526000000001, -16.285672000000002], [145.637033, -16.784918000000001], [145.888904, -16.906925999999999], [146.16030900000001, -17.761655000000001], [146.06367399999999, -18.280073000000002], [146.38747799999999, -18.958273999999999], [147.471082, -19.480723000000001], [148.17760200000001, -19.955939000000001], [148.84841399999999, -20.391210000000001], [148.717465, -20.633469000000002], [149.28942000000001, -21.260511000000001], [149.678337, -22.342511999999999], [150.077382, -22.122783999999999], [150.48293899999999, -22.556142000000001], [150.72726499999999, -22.402405000000002], [150.89955399999999, -23.462236999999998], [151.60917499999999, -24.076256000000001], [152.07354000000001, -24.457886999999999], [152.855197, -25.267500999999999], [153.13616200000001, -26.071173000000002], [153.16194899999999, -26.641318999999999], [153.09290899999999, -27.260300000000001], [153.569469, -28.110067000000001], [153.51210800000001, -28.995076999999998], [153.33909499999999, -29.458202], [153.06924100000001, -30.350239999999999], [153.08960200000001, -30.923642000000001], [152.89157800000001, -31.640446000000001], [152.45000200000001, -32.550002999999997], [151.70911699999999, -33.041342], [151.34397200000001, -33.816023000000001], [151.01055500000001, -34.310360000000003], [150.71413899999999, -35.173459999999999], [150.32821999999999, -35.671878999999997], [150.07521199999999, -36.420206], [149.946124, -37.109051999999998], [149.99728400000001, -37.425260999999999], [149.42388199999999, -37.772680999999999], [148.30462199999999, -37.809061], [147.381733, -38.219217], [146.922123, -38.606532000000001], [146.31792200000001, -39.035756999999997], [145.48965200000001, -38.593767999999997], [144.87697600000001, -38.417448], [145.03221199999999, -37.896188000000002], [144.485682, -38.085324], [143.60997399999999, -38.809465000000003], [142.74542700000001, -38.538268000000002], [142.17832999999999, -38.380034000000002], [141.606582, -38.308514000000002], [140.63857899999999, -38.019333000000003], [139.99215799999999, -37.402935999999997], [139.806588, -36.643602999999999], [139.57414800000001, -36.138362000000001], [139.082808, -35.732754], [138.12074799999999, -35.612296000000001], [138.44946200000001, -35.127260999999997], [138.20756399999999, -34.384723000000001], [137.71916999999999, -35.076824999999999], [136.82940600000001, -35.260534999999997], [137.35237100000001, -34.707338999999997], [137.50388599999999, -34.130268000000001], [137.89011600000001, -33.640478999999999], [137.810328, -32.900007000000002], [136.996837, -33.752771000000003], [136.37206900000001, -34.094766], [135.98904300000001, -34.890118000000001], [135.208213, -34.478670000000001], [135.23921799999999, -33.947952999999998], [134.613417, -33.222777999999998], [134.085904, -32.848072000000002], [134.27390299999999, -32.617234000000003], [132.99077700000001, -32.011223999999999], [132.28808100000001, -31.982647], [131.32633100000001, -31.495802999999999], [129.53579400000001, -31.590423000000001], [128.240938, -31.948488999999999], [127.102867, -32.282266999999997], [126.148714, -32.215966000000002], [125.088623, -32.728751000000003], [124.221648, -32.959487000000003], [124.028947, -33.483846999999997], [123.659667, -33.890179000000003], [122.811036, -33.914467000000002], [122.183064, -34.003402000000001], [121.29919099999999, -33.821035999999999], [120.580268, -33.930177], [119.89369499999999, -33.976064999999998], [119.29889900000001, -34.509366], [119.007341, -34.464148999999999], [118.505718, -34.746819000000002], [118.02497200000001, -35.064732999999997], [117.295507, -35.025458999999998], [116.62510899999999, -35.025097000000002], [115.564347, -34.386428000000002], [115.026809, -34.196517], [115.048616, -33.623424999999997], [115.545123, -33.487257999999997], [115.714674, -33.259571999999999], [115.679379, -32.900368999999998], [115.80164499999999, -32.205061999999998], [115.689611, -31.612437], [115.160909, -30.601593999999999], [114.99704300000001, -30.030725], [115.040038, -29.461095], [114.641974, -28.810231000000002], [114.61649800000001, -28.516399], [114.173579, -28.118077], [114.048884, -27.334765000000001], [113.477498, -26.543133999999998], [113.338953, -26.116544999999999], [113.778358, -26.549025], [113.440962, -25.621278], [113.93690100000001, -25.911235000000001], [114.23285199999999, -26.298445999999998], [114.216161, -25.786280999999999], [113.721255, -24.998939], [113.625344, -24.683971], [113.393523, -24.384764000000001], [113.502044, -23.806349999999998], [113.706993, -23.560214999999999], [113.843418, -23.059987], [113.736552, -22.475474999999999], [114.149756, -21.755880999999999], [114.225307, -22.517488], [114.647762, -21.829519999999999], [115.460167, -21.495173000000001], [115.947373, -21.068688000000002], [116.71161499999999, -20.701682000000002], [117.16631599999999, -20.623598999999999], [117.441545, -20.746898999999999], [118.22955899999999, -20.374207999999999], [118.836085, -20.263311000000002], [118.987807, -20.044203], [119.252494, -19.952942], [119.80522499999999, -19.976506000000001], [120.85621999999999, -19.683707999999999], [121.399856, -19.239756], [121.65513799999999, -18.705317999999998], [122.241665, -18.197648999999998], [122.286624, -17.798603], [122.312772, -17.254967000000001], [123.012574, -16.405200000000001], [123.433789, -17.268557999999999], [123.859345, -17.069035], [123.503242, -16.596506000000002], [123.81707299999999, -16.111315999999999], [124.258287, -16.327943999999999], [124.37972600000001, -15.56706], [124.926153, -15.075100000000001], [125.167275, -14.680396], [125.670087, -14.510070000000001], [125.685796, -14.230656], [126.12514899999999, -14.347341], [126.14282300000001, -14.095986999999999], [126.582589, -13.952790999999999], [127.065867, -13.817968], [127.804633, -14.276906], [128.35969, -14.86917], [128.98554300000001, -14.875991000000001], [129.62147300000001, -14.969784000000001], [129.40960000000001, -14.420669999999999], [129.88864100000001, -13.618703], [130.33946599999999, -13.357376], [130.18350599999999, -13.107519999999999], [130.617795, -12.536391999999999], [131.22349500000001, -12.183649000000001], [131.73509100000001, -12.302453], [132.575298, -12.114041], [132.55721199999999, -11.603012], [131.82469800000001, -11.273782000000001], [132.357224, -11.128519000000001], [133.01956100000001, -11.376410999999999], [133.55084600000001, -11.786515], [134.393068, -12.042365], [134.67863199999999, -11.941183000000001], [135.29849100000001, -12.248606000000001], [135.88269299999999, -11.962267000000001], [136.25838100000001, -12.049341999999999], [136.49247500000001, -11.857208999999999], [136.95161999999999, -12.351959000000001], [136.685125, -12.887223000000001], [136.305407, -13.291230000000001], [135.961758, -13.324509000000001], [136.077617, -13.724278], [135.78383600000001, -14.223989], [135.428664, -14.715432], [135.50018399999999, -14.997741], [136.295175, -15.550265], [137.06536, -15.870761999999999], [137.58047099999999, -16.215081999999999], [138.30321699999999, -16.807604000000001], [138.58516399999999, -16.806622000000001], [139.108543, -17.062678999999999], [139.26057499999999, -17.371600999999998], [140.21524500000001, -17.710805000000001], [140.875463, -17.369069], [141.07111, -16.832046999999999], [141.27409499999999, -16.388870000000001], [141.398222, -15.840532], [141.70218299999999, -15.044921], [141.56338, -14.561332999999999], [141.63552000000001, -14.270395000000001], [141.519869, -13.698078000000001], [141.65092000000001, -12.944687999999999], [141.842691, -12.741548], [141.68699000000001, -12.407614000000001], [141.928629, -11.877466], [142.11848800000001, -11.328042], [142.14370600000001, -11.042737000000001], [142.51526000000001, -10.668186], [142.79731000000001, -11.157355000000001], [142.86676299999999, -11.784706999999999], [143.11594700000001, -11.90563], [143.15863200000001, -12.325656], [143.52212399999999, -12.834358], [143.59715800000001, -13.400422000000001], [143.56181100000001, -13.763655999999999]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0438\u044f", "fr": "Australie", "en": "Australia", "nl": "Australi\u00eb (land)", "pt": "Austr\u00e1lia", "no": "Australia", "de": "Australien", "it": "Australia", "sv": "Australien", "pl": "Australia", "fi": "Australia", "zh": "\u6fb3\u5927\u5229\u4e9a", "ja": "\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2", "es": "Australia"}, "label_fr": "Australie", "name": "Australia", "dbpedia_uri": "http://dbpedia.org/resource/Australia"}, "id": "AUS"}, {"geometry": {"type": "Polygon", "coordinates": [[[16.979666999999999, 48.123497], [16.903753999999999, 47.714866000000001], [16.340584, 47.712902], [16.534268000000001, 47.496170999999997], [16.202297999999999, 46.852386000000003], [16.011664, 46.683610999999999], [15.137092000000001, 46.658703000000003], [14.632472, 46.431817000000002], [13.806475000000001, 46.509306000000002], [12.376485000000001, 46.767558999999999], [12.153088, 47.115392999999997], [11.164828, 46.941578999999997], [11.048556, 46.751359000000001], [10.442701, 46.893546000000001], [9.9324480000000008, 46.920727999999997], [9.4799699999999998, 47.102809999999998], [9.6329320000000003, 47.347600999999997], [9.5942260000000008, 47.525058000000001], [9.8960679999999996, 47.580196999999998], [10.402084, 47.302487999999997], [10.544504, 47.566398999999997], [11.426413999999999, 47.523766000000002], [12.141356999999999, 47.703082999999999], [12.620760000000001, 47.672387999999998], [12.932627, 47.467646000000002], [13.025850999999999, 47.637583999999997], [12.884103, 48.289146000000002], [13.243357, 48.416114999999998], [13.595946, 48.877172000000002], [14.338898, 48.555304999999997], [14.901446999999999, 48.964402], [15.253416, 49.039073999999999], [16.029647000000001, 48.733899000000001], [16.499282999999998, 48.785808000000003], [16.960287999999998, 48.596981999999997], [16.879982999999999, 48.470013000000002], [16.979666999999999, 48.123497]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u0432\u0441\u0442\u0440\u0438\u044f", "fr": "Autriche", "en": "Austria", "nl": "Oostenrijk", "pt": "\u00c1ustria", "no": "\u00d8sterrike", "de": "\u00d6sterreich", "it": "Austria", "sv": "\u00d6sterrike", "pl": "Austria", "fi": "It\u00e4valta", "zh": "\u5965\u5730\u5229", "ja": "\u30aa\u30fc\u30b9\u30c8\u30ea\u30a2", "es": "Austria"}, "label_fr": "Autriche", "name": "Austria", "dbpedia_uri": "http://dbpedia.org/resource/Austria"}, "id": "AUT"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[45.001987, 39.740003999999999], [45.298144999999998, 39.471750999999998], [45.739978000000001, 39.473998999999999], [45.735379000000002, 39.319718999999999], [46.143622999999998, 38.741200999999997], [45.457721999999997, 38.874139], [44.952688000000002, 39.335765000000002], [44.793990000000001, 39.713003], [45.001987, 39.740003999999999]]], [[[47.373314999999998, 41.219732], [47.815666, 41.151415999999998], [47.987282999999998, 41.405819000000001], [48.584353, 41.808869999999999], [49.110264000000001, 41.282286999999997], [49.618915000000001, 40.572924], [50.084829999999997, 40.526156999999998], [50.392820999999998, 40.256560999999998], [49.569201999999997, 40.176101000000003], [49.395259000000003, 39.399481999999999], [49.223227999999999, 39.049219000000001], [48.856532000000001, 38.815486], [48.883248999999999, 38.320245], [48.634374999999999, 38.270378000000001], [48.010744000000003, 38.794015000000002], [48.355528999999997, 39.288764999999998], [48.060094999999997, 39.582234999999997], [47.685079000000002, 39.508364], [46.505719999999997, 38.770605000000003], [46.483499000000002, 39.464154999999998], [46.034534000000001, 39.628020999999997], [45.610011999999998, 39.899994], [45.891907000000003, 40.218476000000003], [45.359175, 40.561503999999999], [45.560350999999997, 40.812289999999997], [45.179496, 40.985354000000001], [44.972479999999997, 41.248128999999999], [45.217426000000003, 41.411451999999997], [45.962600999999999, 41.123873000000003], [46.501637000000002, 41.064444999999999], [46.637908000000003, 41.181673000000004], [46.145432, 41.722802000000001], [46.404950999999997, 41.860675000000001], [46.686070999999998, 41.827137], [47.373314999999998, 41.219732]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d", "fr": "Azerba\u00efdjan", "en": "Azerbaijan", "nl": "Azerbeidzjan", "pt": "Azerbaij\u00e3o", "no": "Aserbajdsjan", "de": "Aserbaidschan", "it": "Azerbaigian", "sv": "Azerbajdzjan", "pl": "Azerbejd\u017can", "fi": "Azerbaid\u017ean", "zh": "\u963f\u585e\u62dc\u7586", "ja": "\u30a2\u30bc\u30eb\u30d0\u30a4\u30b8\u30e3\u30f3", "es": "Azerbaiy\u00e1n"}, "label_fr": "Azerba\u00efdjan", "name": "Azerbaijan", "dbpedia_uri": "http://dbpedia.org/resource/Azerbaijan"}, "id": "AZE"}, {"geometry": {"type": "Polygon", "coordinates": [[[29.339998000000001, -4.4999830000000003], [29.276384, -3.2939069999999999], [29.024926000000001, -2.8392580000000001], [29.632176000000001, -2.9178579999999998], [29.938358999999998, -2.348487], [30.469695999999999, -2.4138579999999998], [30.527677000000001, -2.8076319999999999], [30.743013000000001, -3.0342850000000001], [30.752262999999999, -3.3593299999999999], [30.505559999999999, -3.5685669999999998], [30.116333000000001, -4.0901379999999996], [29.753512000000001, -4.4523890000000002], [29.339998000000001, -4.4999830000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0443\u0440\u0443\u043d\u0434\u0438", "fr": "Burundi", "en": "Burundi", "nl": "Burundi", "pt": "Burundi", "no": "Burundi", "de": "Burundi", "it": "Burundi", "sv": "Burundi", "pl": "Burundi", "fi": "Burundi", "zh": "\u84b2\u9686\u5730", "ja": "\u30d6\u30eb\u30f3\u30b8", "es": "Burundi"}, "label_fr": "Burundi", "name": "Burundi", "dbpedia_uri": "http://dbpedia.org/resource/Burundi"}, "id": "BDI"}, {"geometry": {"type": "Polygon", "coordinates": [[[3.3149709999999999, 51.345781000000002], [4.0470709999999999, 51.267259000000003], [4.9739909999999998, 51.475023999999998], [5.6069760000000004, 51.037298], [6.1566580000000002, 50.803721000000003], [6.0430729999999997, 50.128051999999997], [5.7824169999999997, 50.090328], [5.6740519999999997, 49.529483999999997], [4.7992220000000003, 49.985373000000003], [4.2860230000000001, 49.907496999999999], [3.588184, 50.378991999999997], [3.1232519999999999, 50.780363000000001], [2.6584219999999998, 50.796847999999997], [2.5135730000000001, 51.148505999999998], [3.3149709999999999, 51.345781000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0435\u043b\u044c\u0433\u0438\u044f", "fr": "Belgique", "en": "Belgium", "nl": "Belgi\u00eb", "pt": "B\u00e9lgica", "no": "Belgia", "de": "Belgien", "it": "Belgio", "sv": "Belgien", "pl": "Belgia", "fi": "Belgia", "zh": "\u6bd4\u5229\u65f6", "ja": "\u30d9\u30eb\u30ae\u30fc", "es": "B\u00e9lgica"}, "label_fr": "Belgique", "name": "Belgium", "dbpedia_uri": "http://dbpedia.org/resource/Belgium"}, "id": "BEL"}, {"geometry": {"type": "Polygon", "coordinates": [[[2.6917019999999998, 6.2588169999999996], [1.8652409999999999, 6.1421580000000002], [1.618951, 6.8320379999999998], [1.6644779999999999, 9.1285900000000009], [1.4630430000000001, 9.3346239999999998], [1.4250609999999999, 9.8253950000000003], [1.0777950000000001, 10.175606999999999], [0.77233600000000002, 10.470808], [0.899563, 10.997339], [1.2434700000000001, 11.110511000000001], [1.4471780000000001, 11.547719000000001], [1.935986, 11.64115], [2.154474, 11.940149999999999], [2.490164, 12.233052000000001], [2.848643, 12.235636], [3.6111800000000001, 11.660167], [3.5722160000000001, 11.327939000000001], [3.7971119999999998, 10.734745999999999], [3.6000700000000001, 10.332186], [3.705438, 10.06321], [3.2203520000000001, 9.444153], [2.9123079999999999, 9.1376080000000002], [2.7237930000000001, 8.5068450000000002], [2.749063, 7.8707339999999997], [2.6917019999999998, 6.2588169999999996]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0435\u043d\u0438\u043d", "fr": "B\u00e9nin", "en": "Benin", "nl": "Benin", "pt": "Cultura do Benim", "no": "Benin", "de": "Benin", "it": "Benin", "sv": "Benin", "pl": "Benin", "fi": "Benin", "zh": "\u8d1d\u5b81", "ja": "\u30d9\u30ca\u30f3", "es": "Ben\u00edn"}, "label_fr": "B\u00e9nin", "name": "Benin", "dbpedia_uri": "http://dbpedia.org/resource/Benin"}, "id": "BEN"}, {"geometry": {"type": "Polygon", "coordinates": [[[-2.827496, 9.6424610000000008], [-3.5118990000000001, 9.9003259999999997], [-3.9804490000000001, 9.8623440000000002], [-4.330247, 9.6108349999999998], [-4.779884, 9.8219849999999997], [-4.9546530000000004, 10.152714], [-5.4043419999999998, 10.370737], [-5.4705649999999997, 10.951269999999999], [-5.1978429999999998, 11.375146000000001], [-5.220942, 11.713858999999999], [-4.4271659999999997, 12.542646], [-4.280405, 13.228444], [-4.0063909999999998, 13.472485000000001], [-3.5228030000000001, 13.337662], [-3.103707, 13.541266999999999], [-2.9676939999999998, 13.79815], [-2.1918250000000001, 14.246418], [-2.0010349999999999, 14.559008], [-1.0663629999999999, 14.973815], [-0.51585400000000003, 15.116158], [-0.26625700000000002, 14.924308999999999], [0.374892, 14.928908], [0.29564600000000002, 14.444235000000001], [0.42992799999999998, 13.988733], [0.99304599999999998, 13.335750000000001], [1.024103, 12.851826000000001], [2.177108, 12.625018000000001], [2.154474, 11.940149999999999], [1.935986, 11.64115], [1.4471780000000001, 11.547719000000001], [1.2434700000000001, 11.110511000000001], [0.899563, 10.997339], [0.023803000000000001, 11.018682], [-0.43870199999999998, 11.098341], [-0.76157600000000003, 10.93693], [-1.2033579999999999, 11.009819], [-2.9404089999999998, 10.96269], [-2.9638960000000001, 10.395334999999999], [-2.827496, 9.6424610000000008]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0443\u0440\u043a\u0438\u043d\u0430 \u0424\u0430\u0441\u043e", "fr": "Burkina Faso", "en": "Burkina Faso", "nl": "Burkina Faso", "pt": "Burkina Faso", "no": "Burkina Faso", "de": "Burkina Faso", "it": "Burkina Faso", "sv": "Burkina Faso", "pl": "Burkina Faso", "fi": "Burkina Faso", "zh": "\u5e03\u5409\u7d0d\u6cd5\u7d22", "ja": "\u30d6\u30eb\u30ad\u30ca\u30d5\u30a1\u30bd", "es": "Burkina Faso"}, "label_fr": "Burkina Faso", "name": "Burkina Faso", "dbpedia_uri": "http://dbpedia.org/resource/Burkina_Faso"}, "id": "BFA"}, {"geometry": {"type": "Polygon", "coordinates": [[[92.672720999999996, 22.041239000000001], [92.652257000000006, 21.324048000000001], [92.303234000000003, 21.475484999999999], [92.368554000000003, 20.670883], [92.082886000000002, 21.192195000000002], [92.025215000000003, 21.70157], [91.834890999999999, 22.182936000000002], [91.417086999999995, 22.765018999999999], [90.496005999999994, 22.805016999999999], [90.586956999999998, 22.392793999999999], [90.272970999999998, 21.836368], [89.847466999999995, 22.039145999999999], [89.70205, 21.857116000000001], [89.418863000000002, 21.966179], [89.031960999999995, 22.055707999999999], [88.876311999999999, 22.879145999999999], [88.529769999999999, 23.631142000000001], [88.699939999999998, 24.233715], [88.084422000000004, 24.501657000000002], [88.306372999999994, 24.866078999999999], [88.931554000000006, 25.238692], [88.209789000000001, 25.768066000000001], [88.563049000000007, 26.446525999999999], [89.355093999999994, 26.014406999999999], [89.832481000000001, 25.965081999999999], [89.920693, 25.269749999999998], [90.872210999999993, 25.132601000000001], [91.799595999999994, 25.147431999999998], [92.376202000000006, 24.976693000000001], [91.915092999999999, 24.130413999999998], [91.467730000000003, 24.072638999999999], [91.158963, 23.503526999999998], [91.706474999999998, 22.985264000000001], [91.869928000000002, 23.624345999999999], [92.146034999999998, 23.627499], [92.672720999999996, 22.041239000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0430\u043d\u0433\u043b\u0430\u0434\u0435\u0448", "fr": "Bangladesh", "en": "Bangladesh", "nl": "Bangladesh", "pt": "Bangladesh", "no": "Bangladesh", "de": "Bangladesch", "it": "Bangladesh", "sv": "Bangladesh", "pl": "Bangladesz", "fi": "Bangladesh", "zh": "\u5b5f\u52a0\u62c9\u56fd", "ja": "\u30d0\u30f3\u30b0\u30e9\u30c7\u30b7\u30e5", "es": "Banglad\u00e9s"}, "label_fr": "Bangladesh", "name": "Bangladesh", "dbpedia_uri": "http://dbpedia.org/resource/Bangladesh"}, "id": "BGD"}, {"geometry": {"type": "Polygon", "coordinates": [[[22.657150000000001, 44.234923000000002], [22.944832000000002, 43.823785000000001], [23.332301999999999, 43.897010999999999], [24.100679, 43.741050999999999], [25.569272000000002, 43.688445000000002], [26.065159000000001, 43.943494000000001], [27.2424, 44.175986000000002], [27.970106999999999, 43.812468000000003], [28.558081000000001, 43.707462], [28.039095, 43.293171999999998], [27.673898000000001, 42.577891999999999], [27.99672, 42.007359000000001], [27.135739000000001, 42.141485000000003], [26.117042000000001, 41.826904999999996], [26.106138000000001, 41.328899], [25.197201, 41.234485999999997], [24.492645, 41.583896000000003], [23.692074000000002, 41.309080999999999], [22.952376999999998, 41.337994000000002], [22.881374000000001, 41.999296999999999], [22.380526, 42.320259999999998], [22.545012, 42.461362000000001], [22.436595000000001, 42.580320999999998], [22.604800999999998, 42.898519], [22.986018999999999, 43.211160999999997], [22.500157000000002, 43.642814000000001], [22.410446, 44.008063], [22.657150000000001, 44.234923000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u043e\u043b\u0433\u0430\u0440\u0438\u044f", "fr": "Bulgarie", "en": "Bulgaria", "nl": "Bulgarije", "pt": "Bulg\u00e1ria", "no": "Bulgaria", "de": "Bulgarien", "it": "Bulgaria", "sv": "Bulgarien", "pl": "Bu\u0142garia", "fi": "Bulgaria", "zh": "\u4fdd\u52a0\u5229\u4e9a", "ja": "\u30d6\u30eb\u30ac\u30ea\u30a2", "es": "Bulgaria"}, "label_fr": "Bulgarie", "name": "Bulgaria", "dbpedia_uri": "http://dbpedia.org/resource/Bulgaria"}, "id": "BGR"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-77.534660000000002, 23.75975], [-77.780000000000001, 23.710000000000001], [-78.034049999999993, 24.286149999999999], [-78.408479999999997, 24.57564], [-78.190870000000004, 25.2103], [-77.890000000000001, 25.170000000000002], [-77.540000000000006, 24.34], [-77.534660000000002, 23.75975]]], [[[-77.819999999999993, 26.579999999999998], [-78.909999999999997, 26.420000000000002], [-78.980000000000004, 26.789999999999999], [-78.510000000000005, 26.870000000000001], [-77.849999999999994, 26.84], [-77.819999999999993, 26.579999999999998]]], [[[-77, 26.59], [-77.172550000000001, 25.879180000000002], [-77.356409999999997, 26.007349999999999], [-77.340000000000003, 26.530000000000001], [-77.788020000000003, 26.925160000000002], [-77.790000000000006, 27.039999999999999], [-77, 26.59]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0430\u0433\u0430\u043c\u0441\u043a\u0438\u0435 \u041e\u0441\u0442\u0440\u043e\u0432\u0430", "fr": "Bahamas", "en": "The Bahamas", "nl": "Bahama's", "pt": "Bahamas", "no": "Bahamas", "de": "Bahamas", "it": "Bahamas", "sv": "Bahamas", "pl": "Bahamy", "fi": "Bahama", "zh": "\u5df4\u54c8\u9a6c", "ja": "\u30d0\u30cf\u30de", "es": "Bahamas"}, "label_fr": "Bahamas", "name": "The Bahamas", "dbpedia_uri": "http://dbpedia.org/resource/The_Bahamas"}, "id": "BHS"}, {"geometry": {"type": "Polygon", "coordinates": [[[19.005486000000001, 44.860233999999998], [19.368030000000001, 44.863], [19.117609999999999, 44.423070000000003], [19.59976, 44.038469999999997], [19.454000000000001, 43.568100000000001], [19.218520000000002, 43.52384], [19.031649999999999, 43.43253], [18.706479999999999, 43.200110000000002], [18.559999999999999, 42.649999999999999], [17.674921999999999, 43.028562999999998], [17.297373, 43.446340999999997], [16.916156000000001, 43.667721999999998], [16.456443, 44.041240000000002], [16.239660000000001, 44.351143], [15.750026, 44.818711999999998], [15.959367, 45.233777000000003], [16.318156999999999, 45.004126999999997], [16.534939000000001, 45.211607999999998], [17.002146, 45.233777000000003], [17.861782999999999, 45.067740000000001], [18.553214000000001, 45.081589999999998], [19.005486000000001, 44.860233999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u043e\u0441\u043d\u0438\u044f \u0438 \u0413\u0435\u0440\u0446\u0435\u0433\u043e\u0432\u0438\u043d\u0430", "fr": "Bosnie-Herz\u00e9govine", "en": "Bosnia and Herzegovina", "nl": "Bosni\u00eb en Herzegovina", "pt": "B\u00f3snia e Herzegovina", "no": "Bosnia-Hercegovina", "de": "Bosnien und Herzegowina", "it": "Bosnia-Erzegovina", "sv": "Bosnien och Hercegovina", "pl": "Bo\u015bnia i Hercegowina", "fi": "Bosnia ja Hertsegovina", "zh": "\u6ce2\u65af\u5c3c\u4e9a\u548c\u9ed1\u585e\u54e5\u7ef4\u90a3", "ja": "\u30dc\u30b9\u30cb\u30a2\u30fb\u30d8\u30eb\u30c4\u30a7\u30b4\u30d3\u30ca", "es": "Bosnia y Herzegovina"}, "label_fr": "Bosnie-Herz\u00e9govine", "name": "Bosnia and Herzegovina", "dbpedia_uri": "http://dbpedia.org/resource/Bosnia_and_Herzegovina"}, "id": "BIH"}, {"geometry": {"type": "Polygon", "coordinates": [[[23.484127999999998, 53.912497999999999], [24.450683999999999, 53.905701999999998], [25.536353999999999, 54.282423000000001], [25.768433000000002, 54.846963000000002], [26.588279, 55.167175999999998], [26.494330999999999, 55.615107000000002], [27.102460000000001, 55.783313999999997], [28.176708999999999, 56.169130000000003], [29.229513000000001, 55.918343999999998], [29.371572, 55.670090999999999], [29.896294000000001, 55.789462999999998], [30.873909000000001, 55.550975999999999], [30.971836, 55.081547999999998], [30.757534, 54.811771], [31.384471999999999, 54.157055999999997], [31.791423999999999, 53.974639000000003], [31.731273000000002, 53.794029000000002], [32.405599000000002, 53.618045000000002], [32.693643000000002, 53.351421000000002], [32.304518999999999, 53.132725999999998], [31.497644000000001, 53.167427000000004], [31.305201, 53.073996000000001], [31.540018, 52.742052000000001], [31.785997999999999, 52.101678], [30.927548999999999, 52.042352999999999], [30.619454000000001, 51.822806], [30.555116999999999, 51.319502999999997], [30.157364000000001, 51.416137999999997], [29.254937999999999, 51.368234000000001], [28.992834999999999, 51.602043999999999], [28.617612999999999, 51.427714000000002], [28.241614999999999, 51.572226999999998], [27.454066000000001, 51.592303000000001], [26.337959000000001, 51.832289000000003], [25.327788000000002, 51.910656000000003], [24.553106, 51.888461], [24.005078000000001, 51.617443999999999], [23.527070999999999, 51.578454000000001], [23.508002000000001, 52.023646999999997], [23.199494000000001, 52.486977000000003], [23.799199000000002, 52.691099000000001], [23.804935, 53.089731], [23.527536000000001, 53.470122000000003], [23.484127999999998, 53.912497999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0435\u043b\u043e\u0440\u0443\u0441\u0441\u0438\u044f", "fr": "Bi\u00e9lorussie", "en": "Belarus", "nl": "Wit-Rusland", "pt": "Bielorr\u00fassia", "no": "Hviterussland", "de": "Wei\u00dfrussland", "it": "Bielorussia", "sv": "Vitryssland", "pl": "Bia\u0142oru\u015b", "fi": "Valko-Ven\u00e4j\u00e4", "zh": "\u767d\u4fc4\u7f57\u65af", "ja": "\u30d9\u30e9\u30eb\u30fc\u30b7", "es": "Bielorrusia"}, "label_fr": "Bi\u00e9lorussie", "name": "Belarus", "dbpedia_uri": "http://dbpedia.org/resource/Belarus"}, "id": "BLR"}, {"geometry": {"type": "Polygon", "coordinates": [[[-89.143079999999998, 17.808319000000001], [-89.150908999999999, 17.955468], [-89.029857000000007, 18.001511000000001], [-88.848343999999997, 17.883198], [-88.490122999999997, 18.486830999999999], [-88.300031000000004, 18.499981999999999], [-88.296335999999997, 18.353273000000002], [-88.106813000000002, 18.348673999999999], [-88.123479000000003, 18.076675000000002], [-88.285354999999996, 17.644143], [-88.197867000000002, 17.489474999999999], [-88.302640999999994, 17.131694], [-88.239518000000004, 17.036066000000002], [-88.355428000000003, 16.530774000000001], [-88.551824999999994, 16.265467000000001], [-88.732433999999998, 16.233635], [-88.930612999999994, 15.887273], [-89.229122000000004, 15.886938000000001], [-89.150806000000003, 17.015577], [-89.143079999999998, 17.808319000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0435\u043b\u0438\u0437", "fr": "Belize", "en": "Belize", "nl": "Belize (land)", "pt": "Belize", "no": "Belize", "de": "Belize", "it": "Belize", "sv": "Belize", "pl": "Belize", "fi": "Belize", "zh": "\u4f2f\u5229\u5179", "ja": "\u30d9\u30ea\u30fc\u30ba", "es": "Belice"}, "label_fr": "Belize", "name": "Belize", "dbpedia_uri": "http://dbpedia.org/resource/Belize"}, "id": "BLZ"}, {"geometry": {"type": "Polygon", "coordinates": [[[-62.846468000000002, -22.034984999999999], [-63.986837999999999, -21.993644], [-64.377020999999999, -22.798090999999999], [-64.964892000000006, -22.075862000000001], [-66.273339000000007, -21.83231], [-67.106673999999998, -22.735925000000002], [-67.828180000000003, -22.872919], [-68.219913000000005, -21.494347000000001], [-68.757166999999995, -20.372658000000001], [-68.442224999999993, -19.405068], [-68.966818000000004, -18.981683], [-69.100246999999996, -18.260124999999999], [-69.590423999999999, -17.580012], [-68.959635000000006, -16.500698], [-69.389764, -15.660129], [-69.160347000000002, -15.323974], [-69.339534999999998, -14.953194999999999], [-68.948886999999999, -14.453639000000001], [-68.929224000000005, -13.602684], [-68.880080000000007, -12.899729000000001], [-68.665080000000003, -12.561299999999999], [-69.529678000000004, -10.951734], [-68.786158, -11.036379999999999], [-68.271253999999999, -11.014521], [-68.048192, -10.712059], [-67.173800999999997, -10.306812000000001], [-66.646907999999996, -9.9313310000000001], [-65.338435000000004, -9.7619880000000006], [-65.444837000000007, -10.511450999999999], [-65.321899000000002, -10.895872000000001], [-65.402281000000002, -11.566269999999999], [-64.316353000000007, -12.461978], [-63.196499000000003, -12.627033000000001], [-62.803060000000002, -13.000653], [-62.127080999999997, -13.198781], [-61.713203999999998, -13.489202000000001], [-61.084121000000003, -13.479384], [-60.503304, -13.775955], [-60.459198000000001, -14.354006999999999], [-60.264325999999997, -14.645979000000001], [-60.251148999999998, -15.077218999999999], [-60.542966, -15.093909999999999], [-60.158389999999997, -16.258284], [-58.241219999999998, -16.299572999999999], [-58.388058000000001, -16.877109000000001], [-58.280804000000003, -17.271709999999999], [-57.734558, -17.552468000000001], [-57.498370999999999, -18.174188000000001], [-57.676009000000001, -18.961839999999999], [-57.949997000000003, -19.400003999999999], [-57.853802000000002, -19.969995000000001], [-58.166392000000002, -20.176701000000001], [-58.183470999999997, -19.868399], [-59.115042000000003, -19.356905999999999], [-60.043565000000001, -19.342746999999999], [-61.786326000000003, -19.633737], [-62.265960999999997, -20.513735], [-62.291179, -21.051635000000001], [-62.685057, -22.249029], [-62.846468000000002, -22.034984999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u043e\u043b\u0438\u0432\u0438\u044f", "fr": "Bolivie", "en": "Bolivia", "nl": "Bolivia", "pt": "Bol\u00edvia", "no": "Bolivia", "de": "Bolivien", "it": "Bolivia", "sv": "Bolivia", "pl": "Boliwia", "fi": "Bolivia", "zh": "\u73bb\u5229\u7dad\u4e9e", "ja": "\u30dc\u30ea\u30d3\u30a2", "es": "Bolivia"}, "label_fr": "Bolivie", "name": "Bolivia", "dbpedia_uri": "http://dbpedia.org/resource/Bolivia"}, "id": "BOL"}, {"geometry": {"type": "Polygon", "coordinates": [[[-57.625132999999998, -30.216294999999999], [-56.290900000000001, -28.852761000000001], [-55.162286000000002, -27.881914999999999], [-54.490724999999998, -27.474757], [-53.648735000000002, -26.923473000000001], [-53.628349, -26.124865], [-54.130049999999997, -25.547639], [-54.625290999999997, -25.739255], [-54.428946000000003, -25.162185000000001], [-54.293475999999998, -24.570799999999998], [-54.292960000000001, -24.021014000000001], [-54.652833999999999, -23.839577999999999], [-55.027901999999997, -24.001273999999999], [-55.400747000000003, -23.956935000000001], [-55.517639000000003, -23.571998000000001], [-55.610683000000002, -22.655619000000002], [-55.797958000000001, -22.356929999999998], [-56.473317000000002, -22.086300000000001], [-56.881509999999999, -22.282153999999998], [-57.937156000000002, -22.090176], [-57.870674000000001, -20.732688], [-58.166392000000002, -20.176701000000001], [-57.853802000000002, -19.969995000000001], [-57.949997000000003, -19.400003999999999], [-57.676009000000001, -18.961839999999999], [-57.498370999999999, -18.174188000000001], [-57.734558, -17.552468000000001], [-58.280804000000003, -17.271709999999999], [-58.388058000000001, -16.877109000000001], [-58.241219999999998, -16.299572999999999], [-60.158389999999997, -16.258284], [-60.542966, -15.093909999999999], [-60.251148999999998, -15.077218999999999], [-60.264325999999997, -14.645979000000001], [-60.459198000000001, -14.354006999999999], [-60.503304, -13.775955], [-61.084121000000003, -13.479384], [-61.713203999999998, -13.489202000000001], [-62.127080999999997, -13.198781], [-62.803060000000002, -13.000653], [-63.196499000000003, -12.627033000000001], [-64.316353000000007, -12.461978], [-65.402281000000002, -11.566269999999999], [-65.321899000000002, -10.895872000000001], [-65.444837000000007, -10.511450999999999], [-65.338435000000004, -9.7619880000000006], [-66.646907999999996, -9.9313310000000001], [-67.173800999999997, -10.306812000000001], [-68.048192, -10.712059], [-68.271253999999999, -11.014521], [-68.786158, -11.036379999999999], [-69.529678000000004, -10.951734], [-70.093751999999995, -11.123972], [-70.548686000000004, -11.009147], [-70.481893999999997, -9.4901180000000007], [-71.302412000000004, -10.079435999999999], [-72.184890999999993, -10.053597999999999], [-72.563033000000004, -9.520194], [-73.226713000000004, -9.4622130000000002], [-73.015383, -9.0328330000000001], [-73.571059000000005, -8.4244470000000007], [-73.987234999999998, -7.5238300000000002], [-73.723400999999996, -7.3409990000000001], [-73.724486999999996, -6.9185949999999998], [-73.120026999999993, -6.629931], [-73.219711000000004, -6.0891890000000002], [-72.964506999999998, -5.7412510000000001], [-72.891927999999993, -5.2745610000000003], [-71.748406000000003, -4.5939829999999997], [-70.928843000000001, -4.4015909999999998], [-70.794769000000002, -4.2512650000000001], [-69.893635000000003, -4.2981870000000004], [-69.444102000000001, -1.556287], [-69.420485999999997, -1.122619], [-69.577065000000005, -0.54999200000000004], [-70.020656000000002, -0.18515599999999999], [-70.015566000000007, 0.54141399999999995], [-69.452395999999993, 0.70615899999999998], [-69.252433999999994, 0.60265100000000005], [-69.218637999999999, 0.98567700000000003], [-69.804597000000001, 1.089081], [-69.816973000000004, 1.7148049999999999], [-67.868565000000004, 1.692455], [-67.537809999999993, 2.0371630000000001], [-67.259997999999996, 1.7199990000000001], [-67.065048000000004, 1.130112], [-66.876326000000006, 1.2533609999999999], [-66.325765000000004, 0.72445199999999998], [-65.548266999999996, 0.78925400000000001], [-65.354713000000004, 1.0952820000000001], [-64.611012000000002, 1.3287310000000001], [-64.199306000000007, 1.492855], [-64.083084999999997, 1.916369], [-63.368788000000002, 2.2008999999999999], [-63.422866999999997, 2.4110680000000002], [-64.269998999999999, 2.4970059999999998], [-64.408828, 3.1267860000000001], [-64.368493999999998, 3.7972100000000002], [-64.816063999999997, 4.0564450000000001], [-64.628658999999999, 4.1484810000000003], [-63.888342999999999, 4.0205299999999999], [-63.093198000000001, 3.7705709999999999], [-62.804532999999999, 4.0069650000000001], [-62.085430000000002, 4.1621240000000004], [-60.966892999999999, 4.5364680000000002], [-60.601179000000002, 4.9180979999999996], [-60.733573999999997, 5.2002769999999998], [-60.213683000000003, 5.2444860000000002], [-59.980958999999999, 5.0140609999999999], [-60.111001999999999, 4.574967], [-59.767406000000001, 4.4235030000000002], [-59.538040000000002, 3.9588030000000001], [-59.815412999999999, 3.6064989999999999], [-59.974525, 2.755233], [-59.718546000000003, 2.2496299999999998], [-59.646044000000003, 1.786894], [-59.030861999999999, 1.317698], [-58.540013000000002, 1.2680880000000001], [-58.429476999999999, 1.4639420000000001], [-58.11345, 1.5071950000000001], [-57.660971000000004, 1.682585], [-57.335822999999998, 1.9485380000000001], [-56.782704000000003, 1.8637109999999999], [-56.539386, 1.8995230000000001], [-55.995697999999997, 1.8176669999999999], [-55.9056, 2.0219960000000001], [-56.073341999999997, 2.2207949999999999], [-55.973322000000003, 2.510364], [-55.569755000000001, 2.4215059999999999], [-55.097586999999997, 2.5237479999999999], [-54.524754000000001, 2.311849], [-54.088062999999998, 2.1055570000000001], [-53.778520999999998, 2.376703], [-53.554839000000001, 2.3348969999999998], [-53.418464999999998, 2.0533890000000001], [-52.939656999999997, 2.1248580000000001], [-52.556424999999997, 2.504705], [-52.249338000000002, 3.2410939999999999], [-51.657797000000002, 4.1562320000000001], [-51.317146000000001, 4.2034909999999996], [-51.069771000000003, 3.650398], [-50.508875000000003, 1.901564], [-49.974075999999997, 1.736483], [-49.947101000000004, 1.04619], [-50.699250999999997, 0.22298399999999999], [-50.388210999999998, -0.078445000000000001], [-48.620567000000001, -0.235489], [-48.584496999999999, -1.237805], [-47.824956, -0.58161799999999997], [-46.566583999999999, -0.94102799999999998], [-44.905703000000003, -1.5517399999999999], [-44.417619000000002, -2.13775], [-44.581589000000001, -2.6913079999999998], [-43.418790999999999, -2.3831099999999998], [-41.472656999999998, -2.9120180000000002], [-39.978664999999999, -2.8730540000000002], [-38.500382999999999, -3.7006519999999998], [-37.223252000000002, -4.8209460000000002], [-36.452936999999999, -5.1094039999999996], [-35.597796000000002, -5.1495040000000003], [-35.235388999999998, -5.4649369999999999], [-34.896030000000003, -6.7381929999999999], [-34.729993, -7.3432209999999998], [-35.128211999999998, -8.9964010000000005], [-35.636966999999999, -9.6492819999999995], [-37.046519000000004, -11.040721], [-37.683611999999997, -12.171195000000001], [-38.423876999999997, -13.038119], [-38.673887000000001, -13.057651999999999], [-38.953276000000002, -13.793369999999999], [-38.882297999999999, -15.667054], [-39.161091999999996, -17.208407000000001], [-39.267339, -17.867746], [-39.583520999999998, -18.262295999999999], [-39.760823000000002, -19.599112999999999], [-40.774740999999999, -20.904512], [-40.944755999999998, -21.937317], [-41.754164000000003, -22.370676], [-41.988284, -22.97007], [-43.074703999999997, -22.967693000000001], [-44.647812000000002, -23.351959000000001], [-45.352136000000002, -23.796842000000002], [-46.472093000000001, -24.088968999999999], [-47.648972000000001, -24.885199], [-48.495457999999999, -25.877025], [-48.641005, -26.623698000000001], [-48.474736, -27.175912], [-48.661520000000003, -28.186135], [-48.888457000000002, -28.674115], [-49.587328999999997, -29.224468999999999], [-50.696874000000001, -30.984465], [-51.576225999999998, -31.777698000000001], [-52.256081000000002, -32.245370000000001], [-52.7121, -33.196578000000002], [-53.373662000000003, -33.768377999999998], [-53.650543999999996, -33.202004000000002], [-53.209589000000001, -32.727665999999999], [-53.787951999999997, -32.047243000000002], [-54.572451999999998, -31.494510999999999], [-55.601509999999998, -30.853878999999999], [-55.973244999999999, -30.883075999999999], [-56.976025999999997, -30.109686], [-57.625132999999998, -30.216294999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0440\u0430\u0437\u0438\u043b\u0438\u044f", "fr": "Br\u00e9sil", "en": "Brazil", "nl": "Brazili\u00eb", "pt": "Brasil", "no": "Brasil", "de": "Brasilien", "it": "Brasile", "sv": "Brasilien", "pl": "Brazylia", "fi": "Brasilia", "zh": "\u5df4\u897f", "ja": "\u30d6\u30e9\u30b8\u30eb", "es": "Brasil"}, "label_fr": "Br\u00e9sil", "name": "Brazil", "dbpedia_uri": "http://dbpedia.org/resource/Brazil"}, "id": "BRA"}, {"geometry": {"type": "Polygon", "coordinates": [[[114.20401699999999, 4.525874], [114.59996099999999, 4.9000110000000001], [115.45071, 5.44773], [115.4057, 4.955228], [115.347461, 4.3166359999999999], [114.869557, 4.3483140000000002], [114.65959599999999, 4.0076369999999999], [114.20401699999999, 4.525874]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0440\u0443\u043d\u0435\u0439", "fr": "Brunei", "en": "Brunei", "nl": "Brunei", "pt": "Brunei", "no": "Brunei", "de": "Brunei", "it": "Brunei", "sv": "Brunei", "pl": "Brunei", "fi": "Brunei", "zh": "\u6587\u83b1", "ja": "\u30d6\u30eb\u30cd\u30a4", "es": "Brun\u00e9i"}, "label_fr": "Brunei", "name": "Brunei", "dbpedia_uri": "http://dbpedia.org/resource/Brunei"}, "id": "BRN"}, {"geometry": {"type": "Polygon", "coordinates": [[[91.696657000000002, 27.771742], [92.103712000000002, 27.452614000000001], [92.033484000000001, 26.83831], [91.217512999999997, 26.808648000000002], [90.373275000000007, 26.875724000000002], [89.744528000000003, 26.719403], [88.835643000000005, 27.098966000000001], [88.814248000000006, 27.299316000000001], [89.475809999999996, 28.042759], [90.015828999999997, 28.296438999999999], [90.730513999999999, 28.064954], [91.258853999999999, 28.040614000000001], [91.696657000000002, 27.771742]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0443\u0442\u0430\u043d", "fr": "Bhoutan", "en": "Bhutan", "nl": "Bhutan", "pt": "But\u00e3o", "no": "Bhutan", "de": "Bhutan", "it": "Bhutan", "sv": "Bhutan", "pl": "Bhutan", "fi": "Bhutan", "zh": "\u4e0d\u4e39", "ja": "\u30d6\u30fc\u30bf\u30f3", "es": "But\u00e1n"}, "label_fr": "Bhoutan", "name": "Bhutan", "dbpedia_uri": "http://dbpedia.org/resource/Bhutan"}, "id": "BTN"}, {"geometry": {"type": "Polygon", "coordinates": [[[25.649163000000001, -18.536026], [25.850390999999998, -18.714413], [26.164791000000001, -19.293085999999999], [27.296505, -20.39152], [27.724747000000001, -20.499058999999999], [27.727228, -20.851801999999999], [28.021370000000001, -21.485975], [28.794656, -21.639454000000001], [29.432188, -22.091313], [28.017236, -22.827753999999999], [27.119409999999998, -23.574323], [26.786407000000001, -24.240691000000002], [26.485752999999999, -24.616326999999998], [25.941652000000001, -24.696373000000001], [25.765848999999999, -25.174845000000001], [25.664666, -25.486816000000001], [25.025171, -25.719670000000001], [24.211266999999999, -25.670216], [23.73357, -25.390129000000002], [23.312097000000001, -25.268689999999999], [22.824271, -25.500458999999999], [22.579532, -25.979448000000001], [22.105969000000002, -26.280256000000001], [21.605896000000001, -26.726534000000001], [20.889609, -26.828543], [20.66647, -26.477453000000001], [20.758609, -25.868136], [20.165725999999999, -24.917961999999999], [19.895768, -24.767790000000002], [19.895458000000001, -21.849157000000002], [20.881133999999999, -21.814326999999999], [20.910640999999998, -18.252219], [21.65504, -18.219145999999999], [23.196857999999999, -17.869038], [23.579006, -18.281261000000001], [24.217365000000001, -17.889347000000001], [24.520705, -17.887125000000001], [25.084443, -17.661816000000002], [25.264226000000001, -17.736540000000002], [25.649163000000001, -18.536026]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u043e\u0442\u0441\u0432\u0430\u043d\u0430", "fr": "Botswana", "en": "Botswana", "nl": "Botswana", "pt": "Botswana", "no": "Botswana", "de": "Botsuana", "it": "Botswana", "sv": "Botswana", "pl": "Botswana", "fi": "Botswana", "zh": "\u6ce2\u672d\u90a3", "ja": "\u30dc\u30c4\u30ef\u30ca", "es": "Botsuana"}, "label_fr": "Botswana", "name": "Botswana", "dbpedia_uri": "http://dbpedia.org/resource/Botswana"}, "id": "BWA"}, {"geometry": {"type": "Polygon", "coordinates": [[[15.27946, 7.4219249999999999], [16.106231999999999, 7.4970879999999998], [16.290562000000001, 7.7543069999999998], [16.456185000000001, 7.7347739999999998], [16.705988000000001, 7.5083279999999997], [17.964929999999999, 7.8909140000000004], [18.389555000000001, 8.2813040000000004], [18.911021999999999, 8.6308950000000006], [18.812010000000001, 8.9829150000000002], [19.094007999999999, 9.0748470000000001], [20.059685000000002, 9.0127059999999997], [21.000868000000001, 9.4759849999999997], [21.723821999999998, 10.567055999999999], [22.231128999999999, 10.971888999999999], [22.864165, 11.142395], [22.977544000000002, 10.714463], [23.554303999999998, 10.089255], [23.55725, 9.6812179999999994], [23.394779, 9.2650679999999994], [23.459012999999999, 8.9542859999999997], [23.805813000000001, 8.6663189999999997], [24.567368999999999, 8.2291880000000006], [25.114932, 7.8251039999999996], [25.124130999999998, 7.5000850000000003], [25.796648000000001, 6.9793159999999999], [26.213418000000001, 6.5466030000000002], [26.465909, 5.9467169999999996], [27.213408999999999, 5.5509529999999998], [27.374226, 5.2339440000000002], [27.044065, 5.127853], [26.402761000000002, 5.1508750000000001], [25.650455000000001, 5.2560880000000001], [25.278797999999998, 5.1704080000000001], [25.128833, 4.9272450000000001], [24.805029000000001, 4.8972470000000001], [24.410530999999999, 5.108784], [23.297214, 4.609693], [22.841480000000001, 4.7101259999999998], [22.704124, 4.633051], [22.405124000000001, 4.0291600000000001], [21.659123000000001, 4.224342], [20.927591, 4.3227859999999998], [20.290679000000001, 4.6916779999999996], [19.467784000000002, 5.0315279999999998], [18.932312, 4.7095060000000002], [18.542981999999999, 4.2017850000000001], [18.453064999999999, 3.5043859999999998], [17.809899999999999, 3.5601959999999999], [17.133042, 3.7281970000000002], [16.537057999999998, 3.1982550000000001], [16.012851999999999, 2.2676400000000001], [15.907381000000001, 2.5573890000000001], [15.862731999999999, 3.0135369999999999], [15.405396, 3.3353009999999998], [15.03622, 3.8513670000000002], [14.950953, 4.2103890000000002], [14.478372, 4.7326050000000004], [14.558935999999999, 5.0305980000000003], [14.459407000000001, 5.4517610000000003], [14.53656, 6.2269589999999999], [14.776545, 6.4084979999999998], [15.27946, 7.4219249999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0430\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430\u044f \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430", "fr": "R\u00e9publique centrafricaine", "en": "Central African Republic", "nl": "Centraal-Afrikaanse Republiek", "pt": "Rep\u00fablica Centro-Africana", "no": "Den sentralafrikanske republikk", "de": "Zentralafrikanische Republik", "it": "Repubblica Centrafricana", "sv": "Centralafrikanska republiken", "pl": "Republika \u015arodkowoafryka\u0144ska", "fi": "Keski-Afrikan tasavalta", "zh": "\u4e2d\u975e\u5171\u548c\u570b", "ja": "\u4e2d\u592e\u30a2\u30d5\u30ea\u30ab\u5171\u548c\u56fd", "es": "Rep\u00fablica Centroafricana"}, "label_fr": "R\u00e9publique centrafricaine", "name": "Central African Republic", "dbpedia_uri": "http://dbpedia.org/resource/Central_African_Republic"}, "id": "CAF"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-63.664499999999997, 46.55001], [-62.939300000000003, 46.415869999999998], [-62.012079999999997, 46.44314], [-62.503909999999998, 46.033389999999997], [-62.87433, 45.968179999999997], [-64.142799999999994, 46.392650000000003], [-64.392610000000005, 46.727469999999997], [-64.014859999999999, 47.036009999999997], [-63.664499999999997, 46.55001]]], [[[-61.806305000000002, 49.105060000000002], [-62.29318, 49.08717], [-63.589260000000003, 49.400689999999997], [-64.519120000000001, 49.873040000000003], [-64.173220000000001, 49.957180000000001], [-62.858289999999997, 49.706409999999998], [-61.835585000000002, 49.288550000000001], [-61.806305000000002, 49.105060000000002]]], [[[-123.510002, 48.510010999999999], [-124.012891, 48.370846], [-125.655013, 48.825004999999997], [-125.954994, 49.179996000000003], [-126.850004, 49.530000000000001], [-127.029993, 49.814996000000001], [-128.059336, 49.994959000000001], [-128.44458399999999, 50.539138000000001], [-128.35841400000001, 50.770648000000001], [-127.308581, 50.552574], [-126.695001, 50.400903], [-125.75500700000001, 50.295017999999999], [-125.415002, 49.950001], [-124.920768, 49.475275000000003], [-123.92250900000001, 49.062483999999998], [-123.510002, 48.510010999999999]]], [[[-56.134036000000002, 50.687010000000001], [-56.795881999999999, 49.812308999999999], [-56.143104999999998, 50.150117000000002], [-55.471491999999998, 49.935814999999998], [-55.822400999999999, 49.587128999999997], [-54.935142999999997, 49.313011000000003], [-54.473775000000003, 49.556691000000001], [-53.476548999999999, 49.249139], [-53.786014000000002, 48.516781000000002], [-53.086134000000001, 48.687804], [-52.958647999999997, 48.157164000000002], [-52.648099000000002, 47.535547999999999], [-53.069158000000002, 46.655498999999999], [-53.521456000000001, 46.618291999999997], [-54.178936, 46.807065999999999], [-53.961869, 47.625207000000003], [-54.240482, 47.752279000000001], [-55.400773000000001, 46.884993999999999], [-55.997481000000001, 46.919719999999998], [-55.291218999999998, 47.389561999999998], [-56.250799000000001, 47.632545], [-57.325229, 47.572806999999997], [-59.266015000000003, 47.603347999999997], [-59.419494, 47.899453999999999], [-58.796585999999998, 48.251525000000001], [-59.231625000000001, 48.523187999999998], [-58.391804999999998, 49.125580999999997], [-57.358690000000003, 50.718274000000001], [-56.73865, 51.287438000000002], [-55.870977000000003, 51.632094000000002], [-55.406973999999998, 51.588273000000001], [-55.600217999999998, 51.317075000000003], [-56.134036000000002, 50.687010000000001]]], [[[-132.71000799999999, 54.040008999999998], [-132.71000900000001, 54.040008999999998], [-132.71000799999999, 54.040008999999998], [-132.71000799999999, 54.040008999999998], [-131.74999, 54.120004000000002], [-132.04947999999999, 52.984620999999997], [-131.17904300000001, 52.180433000000001], [-131.57783000000001, 52.182371000000003], [-132.18042800000001, 52.639707000000001], [-132.549992, 53.100014999999999], [-133.05461099999999, 53.411468999999997], [-133.239664, 53.851080000000003], [-133.180004, 54.169975000000001], [-132.71000799999999, 54.040008999999998]]], [[[-79.265820000000005, 62.158675000000002], [-79.657520000000005, 61.63308], [-80.099559999999997, 61.7181], [-80.36215, 62.016489999999997], [-80.315394999999995, 62.085565000000003], [-79.929389999999998, 62.385599999999997], [-79.520020000000002, 62.363709999999998], [-79.265820000000005, 62.158675000000002]]], [[[-81.898250000000004, 62.710799999999999], [-83.068569999999994, 62.159219999999998], [-83.774619999999999, 62.182310000000001], [-83.993669999999995, 62.452800000000003], [-83.250479999999996, 62.914090000000002], [-81.876990000000006, 62.904580000000003], [-81.898250000000004, 62.710799999999999]]], [[[-85.161308000000005, 65.657285000000002], [-84.975763999999998, 65.217517999999998], [-84.464011999999997, 65.371772000000007], [-83.882626000000002, 65.109617999999998], [-82.787576999999999, 64.766693000000004], [-81.642014000000003, 64.455135999999996], [-81.553439999999995, 63.979609000000004], [-80.817361000000005, 64.057485999999997], [-80.103451000000007, 63.725980999999997], [-80.991020000000006, 63.411245999999998], [-82.547178000000002, 63.651721999999999], [-83.108797999999993, 64.101876000000004], [-84.100416999999993, 63.569712000000003], [-85.523404999999997, 63.052379000000002], [-85.866769000000005, 63.637253000000001], [-87.221982999999994, 63.541238], [-86.352760000000004, 64.035832999999997], [-86.224885999999998, 64.822917000000004], [-85.883848, 65.738777999999996], [-85.161308000000005, 65.657285000000002]]], [[[-75.865880000000004, 67.148859999999999], [-76.986869999999996, 67.098730000000003], [-77.236400000000003, 67.588089999999994], [-76.811660000000003, 68.148560000000003], [-75.895210000000006, 68.287210000000002], [-75.114500000000007, 68.010360000000006], [-75.10333, 67.58202], [-75.215969999999999, 67.444249999999997], [-75.865880000000004, 67.148859999999999]]], [[[-95.647681000000006, 69.107690000000005], [-96.269520999999997, 68.757040000000003], [-97.617401000000001, 69.060029999999998], [-98.431800999999993, 68.950699999999998], [-99.797400999999994, 69.400030000000001], [-98.917400999999998, 69.710030000000003], [-98.218260999999998, 70.143540000000002], [-97.157400999999993, 69.860029999999995], [-96.557400999999999, 69.680030000000002], [-96.257401000000002, 69.490030000000004], [-95.647681000000006, 69.107690000000005]]], [[[-90.5471, 69.497659999999996], [-90.551509999999993, 68.474990000000005], [-89.215149999999994, 69.25873], [-88.019660000000002, 68.615080000000006], [-88.317490000000006, 67.873379999999997], [-87.350170000000006, 67.198719999999994], [-86.306070000000005, 67.921459999999996], [-85.576639999999998, 68.784559999999999], [-85.521969999999996, 69.882109999999997], [-84.100809999999996, 69.805390000000003], [-82.622579999999999, 69.658259999999999], [-81.280429999999996, 69.162019999999998], [-81.220200000000006, 68.665670000000006], [-81.964359999999999, 68.132530000000003], [-81.259280000000004, 67.597160000000002], [-81.386529999999993, 67.110780000000005], [-83.344560000000001, 66.411540000000002], [-84.735420000000005, 66.257300000000001], [-85.76943, 66.558329999999998], [-86.067599999999999, 66.056250000000006], [-87.03143, 65.212969999999999], [-87.323239999999998, 64.775630000000007], [-88.482960000000006, 64.098969999999994], [-89.914439999999999, 64.032730000000001], [-90.703980000000001, 63.610169999999997], [-90.770039999999995, 62.960209999999996], [-91.933419999999998, 62.835079999999998], [-93.156980000000004, 62.02469], [-94.241529999999997, 60.898650000000004], [-94.629310000000004, 60.110210000000002], [-94.684600000000003, 58.948819999999998], [-93.215019999999996, 58.782119999999999], [-92.764619999999994, 57.845709999999997], [-92.297030000000007, 57.087090000000003], [-90.897689999999997, 57.284680000000002], [-89.039529999999999, 56.85172], [-88.039779999999993, 56.471620000000001], [-87.324209999999994, 55.999139999999997], [-86.071209999999994, 55.72383], [-85.011809999999997, 55.302599999999998], [-83.360550000000003, 55.244889999999998], [-82.272850000000005, 55.148319999999998], [-82.436199999999999, 54.282269999999997], [-82.125020000000006, 53.277030000000003], [-81.400750000000002, 52.157879999999999], [-79.912890000000004, 51.208419999999997], [-79.143010000000004, 51.533929999999998], [-78.601910000000004, 52.562080000000002], [-79.124210000000005, 54.141449999999999], [-79.829580000000007, 54.667720000000003], [-78.228740000000002, 55.136450000000004], [-77.095600000000005, 55.837409999999998], [-76.541370000000001, 56.534230000000001], [-76.623189999999994, 57.202629999999999], [-77.302260000000004, 58.05209], [-78.51688, 58.804580000000001], [-77.336759999999998, 59.852609999999999], [-77.772720000000007, 60.75788], [-78.106870000000001, 62.31964], [-77.410669999999996, 62.550530000000002], [-75.696209999999994, 62.278399999999998], [-74.668199999999999, 62.181109999999997], [-73.839879999999994, 62.443800000000003], [-72.908529999999999, 62.105069999999998], [-71.677080000000004, 61.525350000000003], [-71.373689999999996, 61.137169999999998], [-69.590419999999995, 61.061410000000002], [-69.620329999999996, 60.221249999999998], [-69.287899999999993, 58.957360000000001], [-68.374549999999999, 58.80106], [-67.649760000000001, 58.212060000000001], [-66.201779999999999, 58.767310000000002], [-65.245170000000002, 59.870710000000003], [-64.583519999999993, 60.33558], [-63.804749999999999, 59.442599999999999], [-62.502360000000003, 58.167079999999999], [-61.396549999999998, 56.967449999999999], [-61.798659999999998, 56.339449999999999], [-60.468530000000001, 55.775480000000002], [-59.56962, 55.204070000000002], [-57.975079999999998, 54.945489999999999], [-57.333199999999998, 54.6265], [-56.936889999999998, 53.780320000000003], [-56.158110000000001, 53.647489999999998], [-55.756320000000002, 53.270359999999997], [-55.68338, 52.146639999999998], [-56.40916, 51.770699999999998], [-57.126910000000002, 51.419719999999998], [-58.774819999999998, 51.064300000000003], [-60.033090000000001, 50.24277], [-61.723660000000002, 50.080460000000002], [-63.86251, 50.290990000000001], [-65.363309999999998, 50.298200000000001], [-66.399050000000003, 50.228969999999997], [-67.236310000000003, 49.511560000000003], [-68.511139999999997, 49.068359999999998], [-69.953620000000001, 47.744880000000002], [-71.104579999999999, 46.821710000000003], [-70.255219999999994, 46.986060000000002], [-68.650000000000006, 48.299999999999997], [-66.552430000000001, 49.133099999999999], [-65.056259999999995, 49.232779999999998], [-64.170990000000003, 48.74248], [-65.115449999999996, 48.07085], [-64.798540000000003, 46.99297], [-64.472189999999998, 46.238489999999999], [-63.173290000000001, 45.739019999999996], [-61.520719999999997, 45.883769999999998], [-60.518149999999999, 47.007930000000002], [-60.448599999999999, 46.282640000000001], [-59.802869999999999, 45.920400000000001], [-61.039879999999997, 45.265250000000002], [-63.254710000000003, 44.670140000000004], [-64.246560000000002, 44.265529999999998], [-65.364059999999995, 43.545229999999997], [-66.123400000000004, 43.618670000000002], [-66.161730000000006, 44.465119999999999], [-64.425489999999996, 45.29204], [-66.026049999999998, 45.259309999999999], [-67.137410000000003, 45.137529999999998], [-67.791340000000005, 45.702809999999999], [-67.790459999999996, 47.066360000000003], [-68.234440000000006, 47.354860000000002], [-68.905000000000001, 47.185000000000002], [-69.237216000000004, 47.447780999999999], [-69.999970000000005, 46.693069999999999], [-70.305000000000007, 45.914999999999999], [-70.659999999999997, 45.460000000000001], [-71.084819999999993, 45.305239999999998], [-71.405000000000001, 45.255000000000003], [-71.50506, 45.008200000000002], [-73.347830000000002, 45.007379999999998], [-74.867000000000004, 45.000480000000003], [-75.318209999999993, 44.816450000000003], [-76.375, 44.096310000000003], [-76.5, 44.018459], [-76.820034000000007, 43.628784000000003], [-77.737885000000006, 43.629055999999999], [-78.720280000000002, 43.625089000000003], [-79.171673999999996, 43.466338999999998], [-79.010000000000005, 43.270000000000003], [-78.920000000000002, 42.965000000000003], [-78.939362000000003, 42.863610999999999], [-80.247448000000006, 42.366199999999999], [-81.277747000000005, 42.209026000000001], [-82.439278000000002, 41.675105000000002], [-82.690089, 41.675105000000002], [-83.029809999999998, 41.832796000000002], [-83.141999999999996, 41.975681000000002], [-83.120000000000005, 42.079999999999998], [-82.900000000000006, 42.43], [-82.430000000000007, 42.979999999999997], [-82.137642, 43.571088000000003], [-82.337762999999995, 44.439999999999998], [-82.550925000000007, 45.347517000000003], [-83.592850999999996, 45.816893999999998], [-83.469550999999996, 45.994686000000002], [-83.616130999999996, 46.116926999999997], [-83.890765000000002, 46.116926999999997], [-84.091851000000005, 46.275418999999999], [-84.142120000000006, 46.512225999999998], [-84.336699999999993, 46.408769999999997], [-84.604900000000001, 46.439599999999999], [-84.543749000000005, 46.538684000000003], [-84.779238000000007, 46.637101999999999], [-84.876080000000002, 46.900083000000002], [-85.652362999999994, 47.220219], [-86.461990999999998, 47.553337999999997], [-87.439792999999995, 47.939999999999998], [-88.378113999999997, 48.302917999999998], [-89.272917000000007, 48.019807999999998], [-89.599999999999994, 48.009999999999998], [-90.829999999999998, 48.270000000000003], [-91.640000000000001, 48.140000000000001], [-92.609999999999999, 48.450000000000003], [-93.630870000000002, 48.609259999999999], [-94.329139999999995, 48.670740000000002], [-94.640000000000001, 48.840000000000003], [-94.817580000000007, 49.389049999999997], [-95.156090000000006, 49.384250000000002], [-95.15907, 49], [-97.228719999999996, 49.000700000000002], [-100.65000000000001, 49], [-104.04826, 48.999859999999998], [-107.05, 49], [-110.05, 49], [-113, 49], [-116.04818, 49], [-117.03121, 49], [-120, 49], [-122.84, 49], [-122.97421, 49.002538000000001], [-124.91024, 49.984560000000002], [-125.62461, 50.416559999999997], [-127.43561, 50.83061], [-127.99276, 51.715829999999997], [-127.85032, 52.329610000000002], [-129.12979000000001, 52.755380000000002], [-129.30522999999999, 53.561590000000002], [-130.51497000000001, 54.287570000000002], [-130.53611000000001, 54.802779999999998], [-129.97999999999999, 55.284999999999997], [-130.00778, 55.91583], [-131.70780999999999, 56.552120000000002], [-132.73042000000001, 57.692889999999998], [-133.35556, 58.41028], [-134.27110999999999, 58.861109999999996], [-134.94499999999999, 59.270560000000003], [-135.47583, 59.787779999999998], [-136.47971999999999, 59.463889999999999], [-137.45249999999999, 58.905000000000001], [-138.34089, 59.562109999999997], [-139.03899999999999, 60], [-140.01300000000001, 60.276820000000001], [-140.99778000000001, 60.30639], [-140.99250000000001, 66.000029999999995], [-140.98599999999999, 69.712000000000003], [-139.12052, 69.471019999999996], [-137.54635999999999, 68.990020000000001], [-136.50358, 68.898039999999995], [-135.62576000000001, 69.315119999999993], [-134.41463999999999, 69.627430000000004], [-132.92925, 69.505340000000004], [-131.43136000000001, 69.944509999999994], [-129.79471000000001, 70.193690000000004], [-129.10773, 69.779269999999997], [-128.36156, 70.012860000000003], [-128.13817, 70.483840000000001], [-127.44712, 70.377210000000005], [-125.75632, 69.480580000000003], [-124.42483, 70.1584], [-124.28968, 69.399690000000007], [-123.06108, 69.563720000000004], [-122.6835, 69.855530000000002], [-121.47226000000001, 69.797780000000003], [-119.94288, 69.377859999999998], [-117.60268000000001, 69.011279999999999], [-116.22642999999999, 68.84151], [-115.2469, 68.905910000000006], [-113.89794000000001, 68.398899999999998], [-115.30489, 67.902609999999996], [-113.49727, 67.688149999999993], [-110.798, 67.806120000000007], [-109.94619, 67.981039999999993], [-108.8802, 67.381439999999998], [-107.79239, 67.887360000000001], [-108.81299, 68.311639999999997], [-108.16721, 68.653919999999999], [-106.95, 68.700000000000003], [-106.15000000000001, 68.799999999999997], [-105.34282, 68.561220000000006], [-104.33790999999999, 68.018000000000001], [-103.22114999999999, 68.097750000000005], [-101.45433, 67.646889999999999], [-99.901949999999999, 67.805660000000003], [-98.443200000000004, 67.781649999999999], [-98.558599999999998, 68.403940000000006], [-97.669479999999993, 68.578639999999993], [-96.119910000000004, 68.23939], [-96.125879999999995, 67.293379999999999], [-95.489429999999999, 68.090699999999998], [-94.685000000000002, 68.063829999999996], [-94.232820000000004, 69.069029999999998], [-95.304079999999999, 69.68571], [-96.471310000000003, 70.089759999999998], [-96.391149999999996, 71.194820000000007], [-95.208799999999997, 71.920529999999999], [-93.889970000000005, 71.760149999999996], [-92.87818, 71.318690000000004], [-91.519639999999995, 70.191289999999995], [-92.40692, 69.699969999999993], [-90.5471, 69.497659999999996]]], [[[-114.16717, 73.121449999999996], [-114.66634000000001, 72.652770000000004], [-112.44101999999999, 72.955399999999997], [-111.05038999999999, 72.450400000000002], [-109.92035, 72.961129999999997], [-109.00654, 72.633349999999993], [-108.18835, 71.650890000000004], [-107.68599, 72.065479999999994], [-108.39639, 73.089529999999996], [-107.51645000000001, 73.235979999999998], [-106.52258999999999, 73.076009999999997], [-105.40246, 72.67259], [-104.77484, 71.698400000000007], [-104.46476, 70.99297], [-102.78537, 70.49776], [-100.98078, 70.024320000000003], [-101.08929000000001, 69.584469999999996], [-102.73116, 69.504019999999997], [-102.09329, 69.119619999999998], [-102.43024, 68.75282], [-104.23999999999999, 68.909999999999997], [-105.95999999999999, 69.180000000000007], [-107.12254, 69.119219999999999], [-109, 68.780000000000001], [-111.534149, 68.630059000000003], [-113.31319999999999, 68.535539999999997], [-113.85496000000001, 69.007440000000003], [-115.22, 69.280000000000001], [-116.10794, 69.168210000000002], [-117.34, 69.959999999999994], [-116.67473, 70.066550000000007], [-115.13112, 70.237300000000005], [-113.72141000000001, 70.192369999999997], [-112.4161, 70.366380000000007], [-114.34999999999999, 70.599999999999994], [-116.48684, 70.520449999999997], [-117.90479999999999, 70.540559999999999], [-118.43237999999999, 70.909199999999998], [-116.11311000000001, 71.309179999999998], [-117.65568, 71.295199999999994], [-119.40199, 71.558589999999995], [-118.56267, 72.307850000000002], [-117.86642000000001, 72.705939999999998], [-115.18908999999999, 73.314589999999995], [-114.16717, 73.121449999999996]]], [[[-104.5, 73.420000000000002], [-105.38, 72.760000000000005], [-106.94, 73.459999999999994], [-106.59999999999999, 73.599999999999994], [-105.26000000000001, 73.640000000000001], [-104.5, 73.420000000000002]]], [[[-76.340000000000003, 73.102684999999994], [-76.251403999999994, 72.826385000000002], [-77.314437999999996, 72.855545000000006], [-78.391670000000005, 72.876655999999997], [-79.486251999999993, 72.742203000000003], [-79.775833000000006, 72.802902000000003], [-80.876098999999996, 73.333183000000005], [-80.833884999999995, 73.693184000000002], [-80.353058000000004, 73.759720000000002], [-78.064437999999996, 73.651932000000002], [-76.340000000000003, 73.102684999999994]]], [[[-86.562179, 73.157447000000005], [-85.774371000000002, 72.534126000000001], [-84.850111999999996, 73.340277999999998], [-82.31559, 73.750951000000001], [-80.600088, 72.716543999999999], [-80.748942, 72.061907000000005], [-78.770639000000003, 72.352172999999993], [-77.824624, 72.749617000000001], [-75.605845000000002, 72.243678000000003], [-74.228616000000002, 71.767144000000002], [-74.099141000000003, 71.330839999999995], [-72.242226000000002, 71.556925000000007], [-71.200014999999993, 70.920012999999997], [-68.786053999999993, 70.525024000000002], [-67.914969999999997, 70.121948000000003], [-66.969032999999996, 69.186087000000001], [-68.805122999999995, 68.720197999999996], [-66.449866, 68.067162999999994], [-64.862313999999998, 67.847538999999998], [-63.424934, 66.928472999999997], [-61.851981000000002, 66.862121000000002], [-62.163176999999997, 66.160251000000002], [-63.918444000000001, 64.998669000000007], [-65.148859999999999, 65.426033000000004], [-66.721219000000005, 66.388041000000001], [-68.015016000000003, 66.262726000000001], [-68.141287000000005, 65.689789000000005], [-67.089646000000002, 65.108455000000006], [-65.732079999999996, 64.648405999999994], [-65.320167999999995, 64.382737000000006], [-64.669405999999995, 63.392927], [-65.013803999999993, 62.674185000000001], [-66.275045000000006, 62.945098999999999], [-68.783186000000001, 63.745669999999997], [-67.369681, 62.883966000000001], [-66.328297000000006, 62.280074999999997], [-66.165567999999993, 61.930897000000002], [-68.877367000000007, 62.330148999999999], [-71.023437000000001, 62.910708], [-72.235378999999995, 63.397835999999998], [-71.886278000000004, 63.679988999999999], [-73.378305999999995, 64.193962999999997], [-74.834418999999997, 64.679075999999995], [-74.818503000000007, 64.389093000000003], [-77.709980000000002, 64.229541999999995], [-78.555948999999998, 64.572906000000003], [-77.897281000000007, 65.309191999999996], [-76.018274000000005, 65.326969000000005], [-73.959795, 65.454764999999995], [-74.293882999999994, 65.811770999999993], [-73.944912000000002, 66.310578000000007], [-72.651167000000001, 67.284576000000001], [-72.926060000000007, 67.726926000000006], [-73.311617999999996, 68.069436999999994], [-74.843306999999996, 68.554626999999996], [-76.869101000000001, 68.894735999999995], [-76.228649000000004, 69.147768999999997], [-77.287369999999996, 69.769540000000006], [-78.168633999999997, 69.826487999999998], [-78.957241999999994, 70.166880000000006], [-79.492455000000007, 69.871808000000001], [-81.305470999999997, 69.743184999999997], [-84.944705999999996, 69.966633999999999], [-87.060002999999995, 70.260001000000003], [-88.681713000000002, 70.410741000000002], [-89.513419999999996, 70.762038000000004], [-88.467720999999997, 71.218186000000003], [-89.888150999999993, 71.222551999999993], [-90.205160000000006, 72.235073999999997], [-89.436577, 73.129463999999999], [-88.408242000000001, 73.537889000000007], [-85.826150999999996, 73.803815999999998], [-86.562179, 73.157447000000005]]], [[[-100.35642, 73.843890000000002], [-99.163870000000003, 73.633390000000006], [-97.379999999999995, 73.760000000000005], [-97.120000000000005, 73.469999999999999], [-98.05359, 72.990520000000004], [-96.540000000000006, 72.560000000000002], [-96.719999999999999, 71.659999999999997], [-98.359660000000005, 71.272850000000005], [-99.322860000000006, 71.356390000000005], [-100.01482, 71.73827], [-102.5, 72.510000000000005], [-102.48, 72.829999999999998], [-100.43836, 72.705879999999993], [-101.54000000000001, 73.359999999999999], [-100.35642, 73.843890000000002]]], [[[-93.196296000000004, 72.771991999999997], [-94.269047, 72.024596000000003], [-95.409856000000005, 72.061881], [-96.033744999999996, 72.940276999999995], [-96.018268000000006, 73.437430000000006], [-95.495793000000006, 73.862416999999994], [-94.503658000000001, 74.134906999999998], [-92.420012, 74.100025000000002], [-90.509793000000002, 73.856731999999994], [-92.003964999999994, 72.966244000000003], [-93.196296000000004, 72.771991999999997]]], [[[-120.45999999999999, 71.383601999999996], [-123.09219, 70.90164], [-123.62, 71.340000000000003], [-125.928949, 71.868688000000006], [-125.5, 72.292260999999996], [-124.80728999999999, 73.022559999999999], [-123.94, 73.680000000000007], [-124.91775, 74.292749999999998], [-121.53788, 74.448930000000004], [-120.10978, 74.241349999999997], [-117.55564, 74.185770000000005], [-116.58441999999999, 73.896069999999995], [-115.51081000000001, 73.475189999999998], [-116.76794, 73.222920000000002], [-119.22, 72.519999999999996], [-120.45999999999999, 71.819999999999993], [-120.45999999999999, 71.383601999999996]]], [[[-93.612756000000005, 74.979996999999997], [-94.156908999999999, 74.592347000000004], [-95.608681000000004, 74.666864000000004], [-96.820931999999999, 74.927622999999997], [-96.288587000000007, 75.377827999999994], [-94.850819999999999, 75.647217999999995], [-93.977746999999994, 75.296490000000006], [-93.612756000000005, 74.979996999999997]]], [[[-98.5, 76.719999999999999], [-97.735585, 76.256559999999993], [-97.704414999999997, 75.743440000000007], [-98.159999999999997, 75], [-99.80874, 74.897440000000003], [-100.88366000000001, 75.057360000000003], [-100.86292, 75.640749999999997], [-102.50209, 75.563800000000001], [-102.56552000000001, 76.336600000000004], [-101.48972999999999, 76.305369999999996], [-99.983490000000003, 76.646339999999995], [-98.576989999999995, 76.588589999999996], [-98.5, 76.719999999999999]]], [[[-108.21141, 76.201679999999996], [-107.81943, 75.845519999999993], [-106.92892999999999, 76.012820000000005], [-105.881, 75.969399999999993], [-105.70498000000001, 75.479510000000005], [-106.31347, 75.005269999999996], [-109.7, 74.849999999999994], [-112.22307000000001, 74.416960000000003], [-113.74381, 74.394270000000006], [-113.87135000000001, 74.720290000000006], [-111.79421000000001, 75.162499999999994], [-116.31220999999999, 75.043430000000001], [-117.71040000000001, 75.222200000000001], [-116.34602, 76.199029999999993], [-115.40487, 76.478870000000001], [-112.59056, 76.14134], [-110.81422000000001, 75.549189999999996], [-109.0671, 75.473209999999995], [-110.49726, 76.429820000000007], [-109.58110000000001, 76.794169999999994], [-108.54859, 76.678319999999999], [-108.21141, 76.201679999999996]]], [[[-94.684085999999994, 77.097877999999994], [-93.573920999999999, 76.776296000000002], [-91.605023000000003, 76.778518000000005], [-90.741845999999995, 76.449596999999997], [-90.969661000000002, 76.074012999999994], [-89.822237999999999, 75.847774000000001], [-89.187083000000001, 75.610166000000007], [-87.838275999999993, 75.566188999999994], [-86.379192000000003, 75.482421000000002], [-84.789625000000001, 75.699203999999995], [-82.753444999999999, 75.784315000000007], [-81.128530999999995, 75.713982999999999], [-80.057511000000005, 75.336849000000001], [-79.833933000000002, 74.923126999999994], [-80.457770999999994, 74.657303999999996], [-81.948842999999997, 74.442458999999999], [-83.228893999999997, 74.564027999999993], [-86.097452000000004, 74.410032000000001], [-88.150350000000003, 74.392307000000002], [-89.764722000000006, 74.515555000000006], [-92.422441000000006, 74.837757999999994], [-92.768285000000006, 75.38682], [-92.889905999999996, 75.882655], [-93.893823999999995, 76.319243999999998], [-95.962457000000001, 76.441381000000007], [-97.121379000000005, 76.751078000000007], [-96.745123000000007, 77.161389], [-94.684085999999994, 77.097877999999994]]], [[[-116.198587, 77.645286999999996], [-116.335813, 76.876962000000006], [-117.10605099999999, 76.530032000000006], [-118.040412, 76.481172000000001], [-119.89931799999999, 76.053213], [-121.499995, 75.900019], [-122.854924, 76.116542999999993], [-122.85492499999999, 76.116542999999993], [-121.157535, 76.864508000000001], [-119.103939, 77.512219999999999], [-117.570131, 77.498318999999995], [-116.198587, 77.645286999999996]]], [[[-93.840002999999996, 77.519997000000004], [-94.295608000000001, 77.491343000000001], [-96.169653999999994, 77.555110999999997], [-96.436304000000007, 77.834629000000007], [-94.422577000000004, 77.820004999999995], [-93.720656000000005, 77.634331000000003], [-93.840002999999996, 77.519997000000004]]], [[[-110.186938, 77.697014999999993], [-112.051191, 77.409228999999996], [-113.534279, 77.732207000000002], [-112.724587, 78.051050000000004], [-111.264443, 78.152956000000003], [-109.85445199999999, 77.996324999999999], [-110.186938, 77.697014999999993]]], [[[-109.663146, 78.601973000000001], [-110.881314, 78.40692], [-112.542091, 78.407902000000007], [-112.525891, 78.550555000000003], [-111.50001, 78.849993999999995], [-110.963661, 78.804440999999997], [-109.663146, 78.601973000000001]]], [[[-95.830295000000007, 78.056940999999995], [-97.309843000000001, 77.850596999999993], [-98.124289000000005, 78.082857000000004], [-98.552868000000004, 78.458105000000003], [-98.631984000000003, 78.871930000000006], [-97.337231000000003, 78.831984000000006], [-96.754399000000006, 78.765812999999994], [-95.559278000000006, 78.418315000000007], [-95.830295000000007, 78.056940999999995]]], [[[-100.060192, 78.324753999999999], [-99.670939000000004, 77.907544999999999], [-101.30394, 78.018985000000001], [-102.949809, 78.343228999999994], [-105.17613299999999, 78.380331999999996], [-104.210429, 78.677419999999998], [-105.41958, 78.918335999999996], [-105.492289, 79.301593999999994], [-103.52928199999999, 79.165349000000006], [-100.825158, 78.800461999999996], [-100.060192, 78.324753999999999]]], [[[-87.019999999999996, 79.659999999999997], [-85.814350000000005, 79.3369], [-87.187560000000005, 79.039299999999997], [-89.035349999999994, 78.287229999999994], [-90.804360000000003, 78.215329999999994], [-92.876689999999996, 78.343329999999995], [-93.951160000000002, 78.750990000000002], [-93.935739999999996, 79.113730000000004], [-93.145240000000001, 79.380099999999999], [-94.974000000000004, 79.372479999999996], [-96.076139999999995, 79.705020000000005], [-96.709720000000004, 80.157769999999999], [-96.016440000000003, 80.602329999999995], [-95.323449999999994, 80.907290000000003], [-94.298429999999996, 80.977270000000004], [-94.735420000000005, 81.206460000000007], [-92.409840000000003, 81.257390000000001], [-91.132890000000003, 80.72345], [-89.450000000000003, 80.509321999999997], [-87.810000000000002, 80.319999999999993], [-87.019999999999996, 79.659999999999997]]], [[[-68.5, 83.106322000000006], [-65.827349999999996, 83.028009999999995], [-63.68, 82.900000000000006], [-61.850000000000001, 82.628600000000006], [-61.893880000000003, 82.361649999999997], [-64.334000000000003, 81.927750000000003], [-66.753420000000006, 81.725269999999995], [-67.657550000000001, 81.501410000000007], [-65.480310000000003, 81.506569999999996], [-67.840000000000003, 80.900000000000006], [-69.469700000000003, 80.616829999999993], [-71.180000000000007, 79.799999999999997], [-73.242800000000003, 79.634150000000005], [-73.879999999999995, 79.430161999999996], [-76.907730000000001, 79.323089999999993], [-75.529240000000001, 79.197659999999999], [-76.220460000000003, 79.019069999999999], [-75.393450000000001, 78.525810000000007], [-76.343540000000004, 78.182959999999994], [-77.888509999999997, 77.899910000000006], [-78.362690000000001, 77.508589999999998], [-79.759510000000006, 77.209680000000006], [-79.619649999999993, 76.983360000000005], [-77.910889999999995, 77.022045000000006], [-77.889110000000002, 76.777955000000006], [-80.561250000000001, 76.178120000000007], [-83.174390000000002, 76.454030000000003], [-86.111840000000001, 76.299009999999996], [-87.599999999999994, 76.420000000000002], [-89.490679999999998, 76.472390000000004], [-89.616100000000003, 76.952129999999997], [-87.767390000000006, 77.178330000000003], [-88.260000000000005, 77.900000000000006], [-87.650000000000006, 77.970222000000007], [-84.976339999999993, 77.538730000000001], [-86.340000000000003, 78.180000000000007], [-87.961920000000006, 78.371809999999996], [-87.151979999999995, 78.758669999999995], [-85.378680000000003, 78.996899999999997], [-85.094949999999997, 79.345429999999993], [-86.507339999999999, 79.736239999999995], [-86.931790000000007, 80.251450000000006], [-84.198440000000005, 80.208359999999999], [-83.408696000000006, 80.099999999999994], [-81.848230000000001, 80.464420000000004], [-84.099999999999994, 80.579999999999998], [-87.598950000000002, 80.516270000000006], [-89.366630000000001, 80.855689999999996], [-90.200000000000003, 81.260000000000005], [-91.367859999999993, 81.553100000000001], [-91.587019999999995, 81.894289999999998], [-90.099999999999994, 82.084999999999994], [-88.932270000000003, 82.117509999999996], [-86.970240000000004, 82.279610000000005], [-85.5, 82.652272999999994], [-84.260005000000007, 82.599999999999994], [-83.180000000000007, 82.319999999999993], [-82.420000000000002, 82.859999999999999], [-81.099999999999994, 83.019999999999996], [-79.306640000000002, 83.130560000000003], [-76.25, 83.172059000000004], [-75.718779999999995, 83.064040000000006], [-72.831530000000001, 83.233239999999995], [-70.665764999999993, 83.169781], [-68.5, 83.106322000000006]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0430\u043d\u0430\u0434\u0430", "fr": "Canada", "en": "Canada", "nl": "Canada", "pt": "Canad\u00e1", "no": "Canada", "de": "Kanada", "it": "Canada", "sv": "Kanada", "pl": "Kanada", "fi": "Kanada", "zh": "\u52a0\u62ff\u5927", "ja": "\u30ab\u30ca\u30c0", "es": "Canad\u00e1"}, "label_fr": "Canada", "name": "Canada", "dbpedia_uri": "http://dbpedia.org/resource/Canada"}, "id": "CAN"}, {"geometry": {"type": "Polygon", "coordinates": [[[9.5942260000000008, 47.525058000000001], [9.6329320000000003, 47.347600999999997], [9.4799699999999998, 47.102809999999998], [9.9324480000000008, 46.920727999999997], [10.442701, 46.893546000000001], [10.363378000000001, 46.483570999999998], [9.9228369999999995, 46.314898999999997], [9.1828819999999993, 46.440215000000002], [8.9663059999999994, 46.036932], [8.4899520000000006, 46.005150999999998], [8.31663, 46.163642000000003], [7.755992, 45.824489999999997], [7.2738509999999996, 45.776947999999997], [6.8435930000000003, 45.991146999999998], [6.5000999999999998, 46.429673000000001], [6.0226090000000001, 46.27299], [6.0373890000000001, 46.725779000000003], [6.7687140000000001, 47.287708000000002], [6.7365709999999996, 47.541801], [7.192202, 47.449765999999997], [7.4667589999999997, 47.620581999999999], [8.3173010000000005, 47.613579999999999], [8.5226120000000005, 47.830827999999997], [9.5942260000000008, 47.525058000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0428\u0432\u0435\u0439\u0446\u0430\u0440\u0438\u044f", "fr": "Suisse", "en": "Switzerland", "nl": "Zwitserland", "pt": "Su\u00ed\u00e7a", "no": "Sveits", "de": "Schweiz", "it": "Svizzera", "sv": "Schweiz", "pl": "Szwajcaria", "fi": "Sveitsi", "zh": "\u745e\u58eb", "ja": "\u30b9\u30a4\u30b9", "es": "Suiza"}, "label_fr": "Suisse", "name": "Switzerland", "dbpedia_uri": "http://dbpedia.org/resource/Switzerland"}, "id": "CHE"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-68.634010000000004, -52.636369999999999], [-68.633349999999993, -54.869500000000002], [-67.562439999999995, -54.870010000000001], [-66.959919999999997, -54.896810000000002], [-67.291030000000006, -55.30124], [-68.148629999999997, -55.611829999999998], [-68.639990999999995, -55.580018000000003], [-69.232100000000003, -55.49906], [-69.958089999999999, -55.198430000000002], [-71.005679999999998, -55.053829999999998], [-72.263900000000007, -54.495139999999999], [-73.285200000000003, -53.957520000000002], [-74.662530000000004, -52.837490000000003], [-73.838099999999997, -53.047429999999999], [-72.434179999999998, -53.715400000000002], [-71.107730000000004, -54.074330000000003], [-70.59178, -53.615830000000003], [-70.267480000000006, -52.931229999999999], [-69.345650000000006, -52.518300000000004], [-68.634010000000004, -52.636369999999999]]], [[[-68.219913000000005, -21.494347000000001], [-67.828180000000003, -22.872919], [-67.106673999999998, -22.735925000000002], [-66.985234000000005, -22.986349000000001], [-67.328442999999993, -24.025303000000001], [-68.417653000000001, -24.518554999999999], [-68.386000999999993, -26.185016000000001], [-68.594800000000006, -26.506909], [-68.295541999999998, -26.899339999999999], [-69.001234999999994, -27.521214000000001], [-69.656130000000005, -28.459140999999999], [-70.013549999999995, -29.367923000000001], [-69.919008000000005, -30.336338999999999], [-70.535068999999993, -31.365010000000002], [-70.074399, -33.091209999999997], [-69.814777000000007, -33.273885999999997], [-69.817308999999995, -34.193570999999999], [-70.388048999999995, -35.169688000000001], [-70.364768999999995, -36.005088999999998], [-71.121881000000002, -36.658124000000001], [-71.118624999999994, -37.576827000000002], [-70.814663999999993, -38.552995000000003], [-71.413516999999999, -38.916021999999998], [-71.680761000000004, -39.808163999999998], [-71.915734, -40.832338999999997], [-71.746803999999997, -42.051386000000001], [-72.148898000000003, -42.254888000000001], [-71.915424000000002, -43.408565000000003], [-71.464055999999999, -43.787610999999998], [-71.793622999999997, -44.207172], [-71.329801000000003, -44.407522], [-71.222779000000003, -44.784242999999996], [-71.659316000000004, -44.973689], [-71.552008999999998, -45.560732999999999], [-71.917258000000004, -46.884838000000002], [-72.447355000000002, -47.738532999999997], [-72.331160999999994, -48.244238000000003], [-72.648246999999998, -48.878618000000003], [-73.415436, -49.318435999999998], [-73.328051000000002, -50.378785000000001], [-72.975746999999998, -50.74145], [-72.309973999999997, -50.677010000000003], [-72.329403999999997, -51.425955999999999], [-71.914804000000004, -52.009022000000002], [-69.498362, -52.142761], [-68.571545, -52.299444000000001], [-69.461284000000006, -52.291950999999997], [-69.942779999999999, -52.537931], [-70.845101999999997, -52.899200999999998], [-71.006332, -53.833252000000002], [-71.429794999999999, -53.856454999999997], [-72.557942999999995, -53.531410000000001], [-73.702757000000005, -52.835068999999997], [-73.702757000000005, -52.835070000000002], [-74.946763000000004, -52.262754000000001], [-75.260025999999996, -51.629354999999997], [-74.976631999999995, -51.043396000000001], [-75.479754, -50.378371999999999], [-75.608014999999995, -48.673772999999997], [-75.182770000000005, -47.711919000000002], [-74.126581000000002, -46.939253000000001], [-75.644395000000003, -46.647643000000002], [-74.692154000000002, -45.763976], [-74.351709, -44.103043999999997], [-73.240356000000006, -44.454960999999997], [-72.717804000000001, -42.383355999999999], [-73.388900000000007, -42.117531999999997], [-73.701335999999998, -43.365775999999997], [-74.331942999999995, -43.224958000000001], [-74.017956999999996, -41.794812999999998], [-73.677098999999998, -39.942213000000002], [-73.217592999999994, -39.258688999999997], [-73.505559000000005, -38.282882999999998], [-73.588060999999996, -37.156284999999997], [-73.166717000000006, -37.123779999999996], [-72.553137000000007, -35.508839999999999], [-71.861732000000003, -33.909092999999999], [-71.438450000000003, -32.418899000000003], [-71.668721000000005, -30.920645], [-71.370082999999994, -30.095682], [-71.489894000000007, -28.861442], [-70.905124000000001, -27.64038], [-70.724953999999997, -25.705924], [-70.403965999999997, -23.628996999999998], [-70.091245999999998, -21.393319000000002], [-70.164420000000007, -19.756468000000002], [-70.372572000000005, -18.347975000000002], [-69.858444000000006, -18.092694000000002], [-69.590423999999999, -17.580012], [-69.100246999999996, -18.260124999999999], [-68.966818000000004, -18.981683], [-68.442224999999993, -19.405068], [-68.757166999999995, -20.372658000000001], [-68.219913000000005, -21.494347000000001]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0427\u0438\u043b\u0438", "fr": "Chili", "en": "Chile", "nl": "Chili", "pt": "Chile", "no": "Chile", "de": "Chile", "it": "Cile", "sv": "Chile", "pl": "Chile", "fi": "Chile", "zh": "\u667a\u5229", "ja": "\u30c1\u30ea", "es": "Chile"}, "label_fr": "Chili", "name": "Chile", "dbpedia_uri": "http://dbpedia.org/resource/Chile"}, "id": "CHL"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[110.33918799999999, 18.678394999999998], [109.47521, 18.197700999999999], [108.655208, 18.507681999999999], [108.626217, 19.367888000000001], [109.119056, 19.821038999999999], [110.21159900000001, 20.101254000000001], [110.786551, 20.077534], [111.010051, 19.695930000000001], [110.57064699999999, 19.255879], [110.33918799999999, 18.678394999999998]]], [[[127.65740700000001, 49.760269999999998], [129.397818, 49.440600000000003], [130.58229299999999, 48.729686999999998], [130.98728199999999, 47.790132], [132.50667200000001, 47.788969999999999], [133.37359599999999, 48.183441999999999], [135.02631099999999, 48.478230000000003], [134.50081399999999, 47.578440000000001], [134.11236199999999, 47.212466999999997], [133.769644, 46.116926999999997], [133.097127, 45.144066000000002], [131.883454, 45.321162000000001], [131.02521200000001, 44.967953000000001], [131.288555, 44.111519999999999], [131.144688, 42.929989999999997], [130.63386600000001, 42.903015000000003], [130.640016, 42.395009000000002], [129.99426700000001, 42.985387000000003], [129.59666899999999, 42.424982], [128.05221499999999, 41.994284999999998], [128.20843300000001, 41.466771999999999], [127.343783, 41.503152], [126.869083, 41.816569000000001], [126.182045, 41.107335999999997], [125.079942, 40.569823999999997], [124.265625, 39.928493000000003], [122.86757, 39.637788], [122.131388, 39.170451999999997], [121.054554, 38.897471000000003], [121.585995, 39.360854000000003], [121.376757, 39.750261000000002], [122.168595, 40.422443000000001], [121.640359, 40.946390000000001], [120.768629, 40.593387999999997], [119.639602, 39.898055999999997], [119.023464, 39.252333], [118.042749, 39.204273999999998], [117.532702, 38.737636000000002], [118.05969899999999, 38.061475999999999], [118.87815000000001, 37.897325000000002], [118.911636, 37.448464000000001], [119.70280200000001, 37.156388999999997], [120.823457, 37.870427999999997], [121.711259, 37.481122999999997], [122.35793700000001, 37.454484000000001], [122.51999499999999, 36.930613999999998], [121.104164, 36.651328999999997], [120.63700900000001, 36.111440000000002], [119.664562, 35.609791000000001], [119.151208, 34.909858999999997], [120.227525, 34.360332], [120.620369, 33.376722999999998], [121.22901400000001, 32.460318999999998], [121.908146, 31.692174000000001], [121.891919, 30.949352000000001], [121.264257, 30.676266999999999], [121.503519, 30.142914999999999], [122.092114, 29.832519999999999], [121.938428, 29.018021999999998], [121.684439, 28.225512999999999], [121.12566099999999, 28.135673000000001], [120.395473, 27.053207], [119.585497, 25.740780999999998], [118.656871, 24.547391000000001], [117.281606, 23.624500999999999], [115.89073500000001, 22.782872999999999], [114.76382700000001, 22.668074000000001], [114.152547, 22.223759999999999], [113.80678, 22.54834], [113.241078, 22.051366999999999], [111.843592, 21.550494], [110.785466, 21.397144000000001], [110.444039, 20.341032999999999], [109.889861, 20.282457000000001], [109.627655, 21.008227000000002], [109.86448799999999, 21.395050999999999], [108.522813, 21.715212000000001], [108.05018, 21.552379999999999], [107.04342, 21.811899], [106.567273, 22.218205000000001], [106.725403, 22.794267999999999], [105.81124699999999, 22.976891999999999], [105.32920900000001, 23.352063000000001], [104.47685799999999, 22.81915], [103.504515, 22.703757], [102.706992, 22.708794999999999], [102.170436, 22.464753000000002], [101.652018, 22.318199], [101.80312000000001, 21.174367], [101.270026, 21.201651999999999], [101.18000499999999, 21.436572999999999], [101.15003299999999, 21.849983999999999], [100.416538, 21.558838999999999], [99.983489000000006, 21.742937000000001], [99.240898999999999, 22.118314000000002], [99.531992000000002, 22.949038999999999], [98.898748999999995, 23.142721999999999], [98.660262000000003, 24.063286000000002], [97.60472, 23.897404999999999], [97.724609000000001, 25.083637], [98.671837999999994, 25.918703000000001], [98.712093999999993, 26.743535999999999], [98.682689999999994, 27.508811999999999], [98.246230999999995, 27.747221], [97.911987999999994, 28.335944999999999], [97.327113999999995, 28.261583000000002], [96.248833000000005, 28.411031000000001], [96.586590999999999, 28.83098], [96.117678999999995, 29.452801999999998], [95.404802000000004, 29.031717], [94.565989999999999, 29.277438], [93.413347999999999, 28.640629000000001], [92.503118999999998, 27.896875999999999], [91.696657000000002, 27.771742], [91.258853999999999, 28.040614000000001], [90.730513999999999, 28.064954], [90.015828999999997, 28.296438999999999], [89.475809999999996, 28.042759], [88.814248000000006, 27.299316000000001], [88.730326000000005, 28.086865], [88.120441, 27.876542000000001], [86.954516999999996, 27.974262], [85.823319999999995, 28.203576000000002], [85.011638000000005, 28.642773999999999], [84.234579999999994, 28.839894000000001], [83.898993000000004, 29.320226000000002], [83.337114999999997, 29.463732], [82.327512999999996, 30.115268], [81.525803999999994, 30.422716999999999], [81.111255999999997, 30.183481], [79.721367000000001, 30.882715000000001], [78.738894000000002, 31.515906000000001], [78.458445999999995, 32.618164], [79.176129000000003, 32.483780000000003], [79.208892000000006, 32.994394999999997], [78.811086000000003, 33.506197999999998], [78.912268999999995, 34.321936000000001], [77.837451000000001, 35.494010000000003], [76.192847999999998, 35.898403000000002], [75.896896999999996, 36.666806000000001], [75.158028000000002, 37.133031000000003], [74.980001999999999, 37.419989999999999], [74.829986000000005, 37.990006999999999], [74.864816000000005, 38.378846000000003], [74.257514, 38.606507000000001], [73.928852000000006, 38.505814999999998], [73.675379000000007, 39.431237000000003], [73.960013000000004, 39.660007999999998], [73.822243999999998, 39.893973000000003], [74.776861999999994, 40.366425], [75.467827999999997, 40.562072000000001], [76.526368000000005, 40.427945999999999], [76.904483999999997, 41.066485999999998], [78.187196999999998, 41.185316], [78.543661, 41.582242999999998], [80.119429999999994, 42.123941000000002], [80.259990000000002, 42.349998999999997], [80.180149999999998, 42.920068000000001], [80.866206000000005, 43.180362000000002], [79.966105999999996, 44.917516999999997], [81.947070999999994, 45.317027000000003], [82.458926000000005, 45.539650000000002], [83.180484000000007, 47.330030999999998], [85.164289999999994, 47.000956000000002], [85.720483999999999, 47.452969000000003], [85.768232999999995, 48.455750999999999], [86.598776000000001, 48.549182000000002], [87.359970000000004, 49.214981000000002], [87.751264000000006, 49.297198000000002], [88.013831999999994, 48.599463], [88.854298, 48.069082000000002], [90.280826000000005, 47.693548999999997], [90.970809000000003, 46.888145999999999], [90.585768000000002, 45.719715999999998], [90.945539999999994, 45.286073000000002], [92.133891000000006, 45.115076000000002], [93.480733999999998, 44.975472000000003], [94.688929000000002, 44.352331999999997], [95.306875000000005, 44.241331000000002], [95.762455000000003, 43.319448999999999], [96.349395999999999, 42.725634999999997], [97.451757000000001, 42.748890000000003], [99.515816999999998, 42.524690999999997], [100.845866, 42.663803999999999], [101.83304, 42.514873000000001], [103.31227800000001, 41.907468000000001], [104.522282, 41.908346999999999], [104.964994, 41.597410000000004], [106.129316, 42.134327999999996], [107.744773, 42.481515999999999], [109.243596, 42.519446000000002], [110.412103, 42.871234000000001], [111.129682, 43.406834000000003], [111.829588, 43.743118000000003], [111.667737, 44.073175999999997], [111.348377, 44.457442], [111.873306, 45.102079000000003], [112.43606200000001, 45.011645999999999], [113.46390700000001, 44.808892999999998], [114.46033199999999, 45.339816999999996], [115.985096, 45.727235], [116.717868, 46.388202], [117.421701, 46.672733000000001], [118.874326, 46.805411999999997], [119.66327, 46.692680000000003], [119.772824, 47.048059000000002], [118.866574, 47.747059999999998], [118.064143, 48.06673], [117.295507, 47.697709000000003], [116.308953, 47.853409999999997], [115.74283699999999, 47.726545000000002], [115.485282, 48.135382999999997], [116.191802, 49.134597999999997], [116.67880100000001, 49.888531], [117.879244, 49.510983000000003], [119.288461, 50.142882999999998], [119.279366, 50.582908000000003], [120.18205, 51.643566], [120.738191, 51.964115], [120.72578900000001, 52.516226000000003], [120.177089, 52.753886000000001], [121.003085, 53.251401000000001], [122.24574800000001, 53.431725999999998], [123.571507, 53.458804000000001], [125.06821100000001, 53.161045000000001], [125.946349, 52.792799000000002], [126.56439899999999, 51.784255000000002], [126.93915699999999, 51.353893999999997], [127.28745600000001, 50.739797000000003], [127.65740700000001, 49.760269999999998]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0438\u0442\u0430\u0439 (\u0441\u0442\u0440\u0430\u043d\u0430)", "fr": "Chine", "en": "China", "nl": "China", "pt": "China (civiliza\u00e7\u00e3o)", "no": "Kina", "de": "China (Kulturraum)", "sv": "Kina (region)", "pl": "Chiny", "zh": "\u4e2d\u56fd", "ja": "\u4e2d\u56fd", "es": "China (regi\u00f3n)"}, "label_fr": "Chine", "name": "China", "dbpedia_uri": "http://dbpedia.org/resource/China"}, "id": "CHN"}, {"geometry": {"type": "Polygon", "coordinates": [[[-2.856125, 4.9944759999999997], [-3.3110840000000001, 4.9842959999999996], [-4.0088200000000001, 5.1798130000000002], [-4.6499170000000003, 5.1682639999999997], [-5.8344959999999997, 4.9937009999999997], [-6.5287689999999996, 4.7050879999999999], [-7.5189409999999999, 4.3382880000000004], [-7.7121589999999998, 4.3645659999999999], [-7.6353679999999997, 5.1881589999999997], [-7.5397150000000002, 5.313345], [-7.5701530000000004, 5.7073520000000002], [-7.9936930000000004, 6.1261900000000002], [-8.3113480000000006, 6.1930329999999998], [-8.6028800000000007, 6.4675640000000003], [-8.3854520000000008, 6.9118009999999996], [-8.4854459999999996, 7.3952080000000002], [-8.4392980000000009, 7.6860429999999997], [-8.2807030000000008, 7.6871799999999997], [-8.2217920000000007, 8.123329], [-8.2990490000000001, 8.3164440000000006], [-8.2034990000000008, 8.4554530000000003], [-7.8320999999999996, 8.575704], [-8.0791140000000006, 9.3762240000000006], [-8.3096160000000001, 9.7895319999999995], [-8.2293369999999992, 10.129020000000001], [-8.0299440000000004, 10.206535000000001], [-7.8995899999999999, 10.297382000000001], [-7.6227590000000003, 10.147235999999999], [-6.8505070000000003, 10.138994], [-6.666461, 10.430811], [-6.4939650000000002, 10.411303], [-6.2052230000000002, 10.524061], [-6.0504519999999999, 10.096361], [-5.8169259999999996, 10.222555], [-5.4043419999999998, 10.370737], [-4.9546530000000004, 10.152714], [-4.779884, 9.8219849999999997], [-4.330247, 9.6108349999999998], [-3.9804490000000001, 9.8623440000000002], [-3.5118990000000001, 9.9003259999999997], [-2.827496, 9.6424610000000008], [-2.5621900000000002, 8.2196280000000002], [-2.9835850000000002, 7.3797050000000004], [-3.24437, 6.2504720000000002], [-2.8107009999999999, 5.3890510000000003], [-2.856125, 4.9944759999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u043e\u0442-\u0434\u2019\u0418\u0432\u0443\u0430\u0440", "fr": "C\u00f4te d'Ivoire", "en": "C\u00f4te d'Ivoire", "nl": "Ivoorkust", "pt": "Costa do Marfim", "no": "Elfenbenskysten", "de": "Elfenbeink\u00fcste", "it": "Costa d'Avorio", "sv": "Elfenbenskusten", "pl": "Wybrze\u017ce Ko\u015bci S\u0142oniowej", "fi": "Norsunluurannikko", "zh": "\u79d1\u7279\u8fea\u74e6", "ja": "\u30b3\u30fc\u30c8\u30b8\u30dc\u30ef\u30fc\u30eb", "es": "Costa de Marfil"}, "label_fr": "C\u00f4te d'Ivoire", "name": "Ivory Coast", "dbpedia_uri": "http://dbpedia.org/resource/C%C3%B4te_d%27Ivoire"}, "id": "CIV"}, {"geometry": {"type": "Polygon", "coordinates": [[[13.075822000000001, 2.2670970000000001], [12.951333999999999, 2.3216160000000001], [12.35938, 2.192812], [11.751664999999999, 2.3267579999999999], [11.276449, 2.2610510000000001], [9.6491579999999999, 2.2838660000000002], [9.7951960000000007, 3.073404], [9.4043670000000006, 3.7345269999999999], [8.9481160000000006, 3.9041290000000002], [8.7449239999999993, 4.3522150000000002], [8.4888159999999999, 4.4956170000000002], [8.5002879999999994, 4.7719829999999996], [8.7575330000000005, 5.4796659999999999], [9.2331629999999993, 6.4444910000000002], [9.5227059999999994, 6.4534820000000002], [10.118277000000001, 7.0387700000000004], [10.497375, 7.055358], [11.058788, 6.6444270000000003], [11.745774000000001, 6.9813830000000001], [11.839309, 7.3970419999999999], [12.063946, 7.7998079999999996], [12.218871999999999, 8.3058239999999994], [12.753672, 8.7177629999999997], [12.955468, 9.4177719999999994], [13.1676, 9.6406259999999993], [13.308676, 10.160361999999999], [13.572950000000001, 10.798565999999999], [14.415379, 11.572369], [14.468192, 11.904752], [14.577178, 12.085361000000001], [14.181336, 12.483656999999999], [14.213531, 12.802035], [14.495787, 12.859396], [14.893386, 12.219048000000001], [14.960152000000001, 11.555574], [14.923565, 10.891325], [15.467873000000001, 9.9823369999999993], [14.909354, 9.9921290000000003], [14.627200999999999, 9.9209189999999996], [14.171466000000001, 10.021378], [13.954217999999999, 9.5494950000000003], [14.544466999999999, 8.9658610000000003], [14.979996, 8.7961039999999997], [15.120865999999999, 8.3821499999999993], [15.436092, 7.692812], [15.27946, 7.4219249999999999], [14.776545, 6.4084979999999998], [14.53656, 6.2269589999999999], [14.459407000000001, 5.4517610000000003], [14.558935999999999, 5.0305980000000003], [14.478372, 4.7326050000000004], [14.950953, 4.2103890000000002], [15.03622, 3.8513670000000002], [15.405396, 3.3353009999999998], [15.862731999999999, 3.0135369999999999], [15.907381000000001, 2.5573890000000001], [16.012851999999999, 2.2676400000000001], [15.940918999999999, 1.727673], [15.146342000000001, 1.9640150000000001], [14.337813000000001, 2.227875], [13.075822000000001, 2.2670970000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0430\u043c\u0435\u0440\u0443\u043d", "fr": "Cameroun", "en": "Cameroon", "nl": "Kameroen", "pt": "Camar\u00f5es", "no": "Kamerun", "de": "Kamerun", "it": "Camerun", "sv": "Kamerun", "pl": "Kamerun", "fi": "Kamerun", "zh": "\u5580\u9ea6\u9686", "ja": "\u30ab\u30e1\u30eb\u30fc\u30f3", "es": "Camer\u00fan"}, "label_fr": "Cameroun", "name": "Cameroon", "dbpedia_uri": "http://dbpedia.org/resource/Cameroon"}, "id": "CMR"}, {"geometry": {"type": "Polygon", "coordinates": [[[30.833860000000001, 3.509166], [30.773347000000001, 2.3398829999999999], [31.174149, 2.2044649999999999], [30.85267, 1.849396], [30.468508, 1.5838049999999999], [30.086154000000001, 1.0623130000000001], [29.875779000000001, 0.59738000000000002], [29.819503000000001, -0.20530999999999999], [29.587838000000001, -0.58740599999999998], [29.579466, -1.341313], [29.291886999999999, -1.6200559999999999], [29.254835, -2.2151100000000001], [29.117478999999999, -2.292211], [29.024926000000001, -2.8392580000000001], [29.276384, -3.2939069999999999], [29.339998000000001, -4.4999830000000003], [29.519987, -5.4199789999999997], [29.419993000000002, -5.9399990000000003], [29.620031999999998, -6.5200149999999999], [30.199997, -7.0799810000000001], [30.740015, -8.3400069999999999], [30.346086, -8.2382570000000008], [29.002911999999998, -8.4070319999999992], [28.734867000000001, -8.5265590000000007], [28.449871000000002, -9.1649180000000001], [28.673681999999999, -9.6059249999999992], [28.49607, -10.789884000000001], [28.372253000000001, -11.793647], [28.642416999999998, -11.971569000000001], [29.341548, -12.360744], [29.616001000000001, -12.178895000000001], [29.699614, -13.257227], [28.934286, -13.248958], [28.523561999999998, -12.698604], [28.155108999999999, -12.272481000000001], [27.388798999999999, -12.132747], [27.16442, -11.608748], [26.553087999999999, -11.924440000000001], [25.752310000000001, -11.784965], [25.418118, -11.330935999999999], [24.783169999999998, -11.238694000000001], [24.314516000000001, -11.262826], [24.257155000000001, -10.951993], [23.912215, -10.926826], [23.456790999999999, -10.867863], [22.837344999999999, -11.017621999999999], [22.402798000000001, -10.993074999999999], [22.155268, -11.084801000000001], [22.208753000000002, -9.8947959999999995], [21.875181999999999, -9.5237079999999992], [21.801801000000001, -8.9087069999999997], [21.949131000000001, -8.3059010000000004], [21.746455999999998, -7.9200850000000003], [21.728110999999998, -7.2908720000000002], [20.514748000000001, -7.2996059999999998], [20.601823, -6.9393180000000001], [20.091622000000001, -6.9430899999999998], [20.037723, -7.1163610000000004], [19.417501999999999, -7.1554289999999998], [19.166613000000002, -7.7381840000000004], [19.016752, -7.9882460000000002], [18.464175999999998, -7.8470139999999997], [18.134222000000001, -7.9876779999999998], [17.47297, -8.0685509999999994], [17.089995999999999, -7.5456890000000003], [16.860191, -7.2222980000000003], [16.573180000000001, -6.6226450000000003], [16.326528, -5.8774699999999998], [13.375597000000001, -5.8642409999999998], [13.024869000000001, -5.9843890000000002], [12.735170999999999, -5.9656820000000002], [12.322431999999999, -6.1000920000000001], [12.182337, -5.7899310000000002], [12.436688, -5.684304], [12.468004000000001, -5.2483620000000002], [12.631612000000001, -4.9912710000000002], [12.995517, -4.7811029999999999], [13.258240000000001, -4.8829570000000002], [13.600235, -4.5001379999999997], [14.144956000000001, -4.5100090000000002], [14.209035, -4.7930919999999997], [14.582604, -4.9702390000000003], [15.170992, -4.3435069999999998], [15.753539999999999, -3.855165], [16.00629, -3.5351330000000001], [15.972803000000001, -2.7123919999999999], [16.407091999999999, -1.7409269999999999], [16.865307000000001, -1.225816], [17.523716, -0.74382999999999999], [17.638645, -0.42483199999999999], [17.663553, -0.058083999999999997], [17.826540000000001, 0.28892299999999999], [17.774191999999999, 0.85565899999999995], [17.898834999999998, 1.741832], [18.094276000000001, 2.3657219999999999], [18.393792000000001, 2.9004430000000001], [18.453064999999999, 3.5043859999999998], [18.542981999999999, 4.2017850000000001], [18.932312, 4.7095060000000002], [19.467784000000002, 5.0315279999999998], [20.290679000000001, 4.6916779999999996], [20.927591, 4.3227859999999998], [21.659123000000001, 4.224342], [22.405124000000001, 4.0291600000000001], [22.704124, 4.633051], [22.841480000000001, 4.7101259999999998], [23.297214, 4.609693], [24.410530999999999, 5.108784], [24.805029000000001, 4.8972470000000001], [25.128833, 4.9272450000000001], [25.278797999999998, 5.1704080000000001], [25.650455000000001, 5.2560880000000001], [26.402761000000002, 5.1508750000000001], [27.044065, 5.127853], [27.374226, 5.2339440000000002], [27.979977000000002, 4.4084130000000004], [28.428993999999999, 4.2871550000000003], [28.696677999999999, 4.4550770000000002], [29.159078000000001, 4.3892670000000003], [29.715994999999999, 4.6008050000000003], [29.953499999999998, 4.173699], [30.833860000000001, 3.509166]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0414\u0435\u043c\u043e\u043a\u0440\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u041a\u043e\u043d\u0433\u043e", "fr": "R\u00e9publique d\u00e9mocratique du Congo", "en": "Democratic Republic of the Congo", "nl": "Congo-Kinshasa", "pt": "Rep\u00fablica Democr\u00e1tica do Congo", "no": "Den demokratiske republikken Kongo", "de": "Demokratische Republik Kongo", "it": "Repubblica Democratica del Congo", "sv": "Demokratiska republiken Kongo", "pl": "Demokratyczna Republika Konga", "fi": "Kongon demokraattinen tasavalta", "zh": "\u521a\u679c\u6c11\u4e3b\u5171\u548c\u56fd", "ja": "\u30b3\u30f3\u30b4\u6c11\u4e3b\u5171\u548c\u56fd", "es": "Rep\u00fablica Democr\u00e1tica del Congo"}, "label_fr": "R\u00e9publique d\u00e9mocratique du Congo", "name": "Democratic Republic of the Congo", "dbpedia_uri": "http://dbpedia.org/resource/Democratic_Republic_of_the_Congo"}, "id": "COD"}, {"geometry": {"type": "Polygon", "coordinates": [[[12.995517, -4.7811029999999999], [12.620760000000001, -4.4380230000000003], [12.318607999999999, -4.60623], [11.914963, -5.0379870000000002], [11.093773000000001, -3.9788269999999999], [11.855122, -3.4268709999999998], [11.478039000000001, -2.765619], [11.820964, -2.5141610000000001], [12.495703000000001, -2.3916879999999998], [12.575284, -1.9485110000000001], [13.109619, -2.4287399999999999], [13.992407, -2.4708049999999999], [14.29921, -1.9982759999999999], [14.425456000000001, -1.333407], [14.316418000000001, -0.55262699999999998], [13.843321, 0.038758000000000001], [14.276266, 1.19693], [14.026669, 1.3956770000000001], [13.282631, 1.314184], [13.003114, 1.8308960000000001], [13.075822000000001, 2.2670970000000001], [14.337813000000001, 2.227875], [15.146342000000001, 1.9640150000000001], [15.940918999999999, 1.727673], [16.012851999999999, 2.2676400000000001], [16.537057999999998, 3.1982550000000001], [17.133042, 3.7281970000000002], [17.809899999999999, 3.5601959999999999], [18.453064999999999, 3.5043859999999998], [18.393792000000001, 2.9004430000000001], [18.094276000000001, 2.3657219999999999], [17.898834999999998, 1.741832], [17.774191999999999, 0.85565899999999995], [17.826540000000001, 0.28892299999999999], [17.663553, -0.058083999999999997], [17.638645, -0.42483199999999999], [17.523716, -0.74382999999999999], [16.865307000000001, -1.225816], [16.407091999999999, -1.7409269999999999], [15.972803000000001, -2.7123919999999999], [16.00629, -3.5351330000000001], [15.753539999999999, -3.855165], [15.170992, -4.3435069999999998], [14.582604, -4.9702390000000003], [14.209035, -4.7930919999999997], [14.144956000000001, -4.5100090000000002], [13.600235, -4.5001379999999997], [13.258240000000001, -4.8829570000000002], [12.995517, -4.7811029999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u041a\u043e\u043d\u0433\u043e", "fr": "R\u00e9publique du Congo", "en": "Republic of the Congo", "nl": "Congo-Brazzaville", "pt": "Congo", "no": "Republikken Kongo", "de": "Republik Kongo", "it": "Repubblica del Congo", "sv": "Kongo-Brazzaville", "pl": "Kongo", "fi": "Kongon tasavalta", "zh": "\u521a\u679c\u5171\u548c\u56fd", "ja": "\u30b3\u30f3\u30b4\u5171\u548c\u56fd", "es": "Rep\u00fablica del Congo"}, "label_fr": "R\u00e9publique du Congo", "name": "Republic of the Congo", "dbpedia_uri": "http://dbpedia.org/resource/Republic_of_the_Congo"}, "id": "COG"}, {"geometry": {"type": "Polygon", "coordinates": [[[-75.373222999999996, -0.152032], [-75.801466000000005, 0.084801000000000001], [-76.292314000000005, 0.416047], [-76.57638, 0.256936], [-77.424983999999995, 0.39568700000000001], [-77.668612999999993, 0.82589299999999999], [-77.855061000000006, 0.80992500000000001], [-78.855259000000004, 1.380924], [-78.990934999999993, 1.69137], [-78.617830999999995, 1.7664040000000001], [-78.662118000000007, 2.2673549999999998], [-78.427610000000001, 2.629556], [-77.931543000000005, 2.6966060000000001], [-77.510430999999997, 3.3250169999999999], [-77.127690000000001, 3.8496359999999998], [-77.496272000000005, 4.0876060000000001], [-77.307601000000005, 4.6679839999999997], [-77.533220999999998, 5.5828119999999997], [-77.318815000000001, 5.8453540000000004], [-77.476660999999993, 6.6911160000000001], [-77.881570999999994, 7.2237710000000002], [-77.753414000000006, 7.7098399999999998], [-77.431107999999995, 7.6380610000000004], [-77.242565999999997, 7.9352780000000003], [-77.474722999999997, 8.524286], [-77.353361000000007, 8.6705050000000004], [-76.836674000000002, 8.6387490000000007], [-76.086383999999995, 9.3368210000000005], [-75.674599999999998, 9.4432480000000005], [-75.664704, 9.7740030000000004], [-75.480425999999994, 10.61899], [-74.906895000000006, 11.083045], [-74.276752999999999, 11.102036], [-74.197222999999994, 11.310473], [-73.414764000000005, 11.227015], [-72.627835000000005, 11.731972000000001], [-72.238195000000005, 11.955550000000001], [-71.754090000000005, 12.437303], [-71.399822, 12.376041000000001], [-71.137461000000002, 12.112982000000001], [-71.331584000000007, 11.776284], [-71.973922000000002, 11.608672], [-72.227575000000002, 11.108701999999999], [-72.614658000000006, 10.821975], [-72.905286000000004, 10.450343999999999], [-73.027603999999997, 9.7367699999999999], [-73.304952, 9.1519999999999992], [-72.788730000000001, 9.0850270000000002], [-72.660494999999997, 8.6252879999999994], [-72.439862000000005, 8.4052749999999996], [-72.360900999999998, 8.0026379999999993], [-72.479679000000004, 7.6325060000000002], [-72.444486999999995, 7.4237849999999996], [-72.198352, 7.3404309999999997], [-71.960176000000004, 6.9916150000000004], [-70.674233999999998, 7.0877850000000002], [-70.093312999999995, 6.9603760000000001], [-69.389480000000006, 6.0998609999999998], [-68.985319000000004, 6.2068050000000001], [-68.265051999999997, 6.1532679999999997], [-67.695087000000001, 6.2673180000000004], [-67.341440000000006, 6.0954680000000003], [-67.521531999999993, 5.55687], [-67.744697000000002, 5.2211290000000004], [-67.823012000000006, 4.5039369999999996], [-67.621836000000002, 3.8394819999999998], [-67.337564, 3.5423420000000001], [-67.303173000000001, 3.318454], [-67.809938000000002, 2.8206549999999999], [-67.447091999999998, 2.6002809999999998], [-67.181293999999994, 2.2506379999999999], [-66.876326000000006, 1.2533609999999999], [-67.065048000000004, 1.130112], [-67.259997999999996, 1.7199990000000001], [-67.537809999999993, 2.0371630000000001], [-67.868565000000004, 1.692455], [-69.816973000000004, 1.7148049999999999], [-69.804597000000001, 1.089081], [-69.218637999999999, 0.98567700000000003], [-69.252433999999994, 0.60265100000000005], [-69.452395999999993, 0.70615899999999998], [-70.015566000000007, 0.54141399999999995], [-70.020656000000002, -0.18515599999999999], [-69.577065000000005, -0.54999200000000004], [-69.420485999999997, -1.122619], [-69.444102000000001, -1.556287], [-69.893635000000003, -4.2981870000000004], [-70.394043999999994, -3.766591], [-70.692682000000005, -3.7428720000000002], [-70.047708999999998, -2.7251560000000001], [-70.813475999999994, -2.2568649999999999], [-71.413646, -2.3428019999999998], [-71.774760999999998, -2.1697899999999999], [-72.325787000000005, -2.434218], [-73.070391999999998, -2.308954], [-73.659503999999998, -1.260491], [-74.122394999999997, -1.0028330000000001], [-74.441601000000006, -0.53081999999999996], [-75.106624999999994, -0.057204999999999999], [-75.373222999999996, -0.152032]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u043e\u043b\u0443\u043c\u0431\u0438\u044f", "fr": "Colombie", "en": "Colombia", "nl": "Colombia", "pt": "Col\u00f4mbia", "no": "Colombia", "de": "Kolumbien", "it": "Colombia", "sv": "Colombia", "pl": "Kolumbia", "fi": "Kolumbia", "zh": "\u54e5\u4f26\u6bd4\u4e9a", "ja": "\u30b3\u30ed\u30f3\u30d3\u30a2", "es": "Colombia"}, "label_fr": "Colombie", "name": "Colombia", "dbpedia_uri": "http://dbpedia.org/resource/Colombia"}, "id": "COL"}, {"geometry": {"type": "Polygon", "coordinates": [[[-82.965783000000002, 8.225028], [-83.508437000000001, 8.4469270000000005], [-83.711473999999995, 8.6568360000000002], [-83.596312999999995, 8.8304430000000007], [-83.632642000000004, 9.0513860000000008], [-83.909886, 9.2908030000000004], [-84.303402000000006, 9.4873539999999998], [-84.647644, 9.6155369999999998], [-84.713351000000003, 9.9080519999999996], [-84.975660000000005, 10.086722999999999], [-84.911375000000007, 9.795992], [-85.110923, 9.5570400000000006], [-85.339488000000003, 9.8345420000000008], [-85.660786999999999, 9.9333469999999995], [-85.797444999999996, 10.134886], [-85.791708999999997, 10.439337], [-85.659313999999995, 10.754331000000001], [-85.941725000000005, 10.895277999999999], [-85.712540000000004, 11.088445], [-85.561852000000002, 11.217119], [-84.903002999999998, 10.952303000000001], [-84.673068999999998, 11.082656999999999], [-84.355930999999998, 10.999226], [-84.190179000000001, 10.79345], [-83.895054000000002, 10.726839], [-83.655612000000005, 10.938764000000001], [-83.402320000000003, 10.395438], [-83.015676999999997, 9.9929819999999996], [-82.546195999999995, 9.5661349999999992], [-82.932890999999998, 9.4768120000000007], [-82.927154999999999, 9.0743299999999998], [-82.719183000000001, 8.9257089999999994], [-82.868656999999999, 8.8072660000000003], [-82.829770999999994, 8.6262950000000007], [-82.913176000000007, 8.4235170000000004], [-82.965783000000002, 8.225028]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u043e\u0441\u0442\u0430-\u0420\u0438\u043a\u0430", "fr": "Costa Rica", "en": "Costa Rica", "nl": "Costa Rica", "pt": "Costa Rica", "no": "Costa Rica", "de": "Costa Rica", "it": "Costa Rica", "sv": "Costa Rica", "pl": "Kostaryka", "fi": "Costa Rica", "zh": "\u54e5\u65af\u8fbe\u9ece\u52a0", "ja": "\u30b3\u30b9\u30bf\u30ea\u30ab", "es": "Costa Rica"}, "label_fr": "Costa Rica", "name": "Costa Rica", "dbpedia_uri": "http://dbpedia.org/resource/Costa_Rica"}, "id": "CRI"}, {"geometry": {"type": "Polygon", "coordinates": [[[-82.268151000000003, 23.188611000000002], [-81.404456999999994, 23.117270999999999], [-80.618769, 23.105979999999999], [-79.679524000000001, 22.765302999999999], [-79.281486000000001, 22.399201999999999], [-78.347434000000007, 22.512166000000001], [-77.993296000000001, 22.277194000000001], [-77.146422000000001, 21.657851000000001], [-76.523825000000002, 21.20682], [-76.19462, 21.220565000000001], [-75.598222000000007, 21.016624], [-75.671059999999997, 20.735091000000001], [-74.933896000000004, 20.693905000000001], [-74.178025000000005, 20.284628000000001], [-74.296648000000005, 20.050379], [-74.961595000000003, 19.923435000000001], [-75.634680000000003, 19.873774000000001], [-76.323656, 19.952891000000001], [-77.755481000000003, 19.855481000000001], [-77.085108000000005, 20.413354000000002], [-77.492654999999999, 20.673105], [-78.137292000000002, 20.739948999999999], [-78.482827, 21.028613], [-78.719866999999994, 21.598113999999999], [-79.284999999999997, 21.559175], [-80.217474999999993, 21.827324000000001], [-80.517534999999995, 22.037078999999999], [-81.820943, 22.192056999999998], [-82.169991999999993, 22.387108999999999], [-81.795001999999997, 22.636965], [-82.775897999999998, 22.68815], [-83.494459000000006, 22.168517999999999], [-83.908799999999999, 22.154565000000002], [-84.052150999999995, 21.910575000000001], [-84.547030000000007, 21.801227999999998], [-84.974911000000006, 21.896028000000001], [-84.447062000000003, 22.20495], [-84.230356999999998, 22.565754999999999], [-83.778239999999997, 22.788118000000001], [-83.267548000000005, 22.983042000000001], [-82.510435999999999, 23.078747], [-82.268151000000003, 23.188611000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0443\u0431\u0430", "fr": "Cuba", "en": "Cuba", "nl": "Cuba (land)", "pt": "Cuba", "no": "Cuba", "de": "Kuba", "it": "Cuba", "sv": "Kuba", "pl": "Kuba", "fi": "Kuuba", "zh": "\u53e4\u5df4", "ja": "\u30ad\u30e5\u30fc\u30d0", "es": "Cuba"}, "label_fr": "Cuba", "name": "Cuba", "dbpedia_uri": "http://dbpedia.org/resource/Cuba"}, "id": "CUB"}, {"geometry": {"type": "Polygon", "coordinates": [[[32.731780000000001, 35.140025999999999], [32.802473999999997, 35.145504000000003], [32.946961000000002, 35.386702999999997], [33.667226999999997, 35.373215999999999], [34.576473999999997, 35.671596000000001], [33.900804000000001, 35.245756], [33.973616999999997, 35.058506000000001], [33.866439999999997, 35.093595000000001], [33.675392000000002, 35.017862999999998], [33.525685000000003, 35.038688], [33.475816999999999, 35.000345000000003], [33.455922000000001, 35.101424000000002], [33.383833000000003, 35.162711999999999], [33.190976999999997, 35.173124999999999], [32.919572000000002, 35.087833000000003], [32.731780000000001, 35.140025999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0443\u0440\u0435\u0446\u043a\u0430\u044f \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u0421\u0435\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u041a\u0438\u043f\u0440\u0430", "fr": "Chypre du Nord", "en": "Northern Cyprus", "nl": "Turkse Republiek Noord-Cyprus", "pt": "Rep\u00fablica Turca do Chipre do Norte", "no": "Nord-Kypros", "de": "T\u00fcrkische Republik Nordzypern", "it": "Repubblica Turca di Cipro del Nord", "sv": "Nordcypern", "pl": "Cypr P\u00f3\u0142nocny", "fi": "Pohjois-Kyproksen turkkilainen tasavalta", "zh": "\u5317\u8cfd\u666e\u52d2\u65af\u571f\u8033\u5176\u5171\u548c\u570b", "ja": "\u5317\u30ad\u30d7\u30ed\u30b9\u30fb\u30c8\u30eb\u30b3\u5171\u548c\u56fd", "es": "Rep\u00fablica Turca del Norte de Chipre"}, "label_fr": "Chypre du Nord", "name": "Northern Cyprus", "dbpedia_uri": "http://dbpedia.org/resource/Northern_Cyprus"}, "id": "-99"}, {"geometry": {"type": "Polygon", "coordinates": [[[33.973616999999997, 35.058506000000001], [34.004880999999997, 34.978098000000003], [32.979827, 34.571869], [32.490296000000001, 34.701655000000002], [32.256667, 35.103231999999998], [32.731780000000001, 35.140025999999999], [32.919572000000002, 35.087833000000003], [33.190976999999997, 35.173124999999999], [33.383833000000003, 35.162711999999999], [33.455922000000001, 35.101424000000002], [33.475816999999999, 35.000345000000003], [33.525685000000003, 35.038688], [33.675392000000002, 35.017862999999998], [33.866439999999997, 35.093595000000001], [33.973616999999997, 35.058506000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u041a\u0438\u043f\u0440", "fr": "Chypre (pays)", "en": "Cyprus", "nl": "Cyprus", "pt": "Chipre", "no": "Kypros", "de": "Republik Zypern", "it": "Cipro", "sv": "Cypern", "pl": "Cypr", "fi": "Kyproksen tasavalta", "zh": "\u8cfd\u666e\u52d2\u65af", "ja": "\u30ad\u30d7\u30ed\u30b9", "es": "Chipre"}, "label_fr": "Chypre (pays)", "name": "Cyprus", "dbpedia_uri": "http://dbpedia.org/resource/Cyprus"}, "id": "CYP"}, {"geometry": {"type": "Polygon", "coordinates": [[[16.960287999999998, 48.596981999999997], [16.499282999999998, 48.785808000000003], [16.029647000000001, 48.733899000000001], [15.253416, 49.039073999999999], [14.901446999999999, 48.964402], [14.338898, 48.555304999999997], [13.595946, 48.877172000000002], [13.031328999999999, 49.307068000000001], [12.521024000000001, 49.547415000000001], [12.415191, 49.969121000000001], [12.240111000000001, 50.266337999999998], [12.966837, 50.484076000000002], [13.338132, 50.733234000000003], [14.056228000000001, 50.926918000000001], [14.307013, 51.117268000000003], [14.570717999999999, 51.002338999999999], [15.016996000000001, 51.106673999999998], [15.490971999999999, 50.784730000000003], [16.238627000000001, 50.697732999999999], [16.176252999999999, 50.422606999999999], [16.719476, 50.215747], [16.868769, 50.473973999999998], [17.554566999999999, 50.362146000000003], [17.649445, 50.049038000000003], [18.392914000000001, 49.988629000000003], [18.853144, 49.496229999999997], [18.554970999999998, 49.495015000000002], [18.399994, 49.315001000000002], [18.170497999999998, 49.271515000000001], [18.104973000000001, 49.043982999999997], [17.913512000000001, 48.996493000000001], [17.886485, 48.903475], [17.545006999999998, 48.800018999999999], [17.101984999999999, 48.816969], [16.960287999999998, 48.596981999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0427\u0435\u0445\u0438\u044f", "fr": "R\u00e9publique tch\u00e8que", "en": "Czech Republic", "nl": "Tsjechi\u00eb", "pt": "Rep\u00fablica Checa", "no": "Tsjekkia", "de": "Tschechien", "it": "Repubblica Ceca", "sv": "Tjeckien", "pl": "Czechy", "fi": "T\u0161ekki", "zh": "\u6377\u514b", "ja": "\u30c1\u30a7\u30b3", "es": "Rep\u00fablica Checa"}, "label_fr": "R\u00e9publique tch\u00e8que", "name": "Czech Republic", "dbpedia_uri": "http://dbpedia.org/resource/Czech_Republic"}, "id": "CZE"}, {"geometry": {"type": "Polygon", "coordinates": [[[9.9219059999999999, 54.983103999999997], [9.9395799999999994, 54.596642000000003], [10.950112000000001, 54.363607000000002], [10.939467, 54.008693000000001], [11.956251999999999, 54.196486], [12.51844, 54.470371], [13.647467000000001, 54.075510999999999], [14.119686, 53.757029000000003], [14.353315, 53.248170999999999], [14.074521000000001, 52.981262999999998], [14.4376, 52.624850000000002], [14.685026000000001, 52.089947000000002], [14.607098000000001, 51.745187999999999], [15.016996000000001, 51.106673999999998], [14.570717999999999, 51.002338999999999], [14.307013, 51.117268000000003], [14.056228000000001, 50.926918000000001], [13.338132, 50.733234000000003], [12.966837, 50.484076000000002], [12.240111000000001, 50.266337999999998], [12.415191, 49.969121000000001], [12.521024000000001, 49.547415000000001], [13.031328999999999, 49.307068000000001], [13.595946, 48.877172000000002], [13.243357, 48.416114999999998], [12.884103, 48.289146000000002], [13.025850999999999, 47.637583999999997], [12.932627, 47.467646000000002], [12.620760000000001, 47.672387999999998], [12.141356999999999, 47.703082999999999], [11.426413999999999, 47.523766000000002], [10.544504, 47.566398999999997], [10.402084, 47.302487999999997], [9.8960679999999996, 47.580196999999998], [9.5942260000000008, 47.525058000000001], [8.5226120000000005, 47.830827999999997], [8.3173010000000005, 47.613579999999999], [7.4667589999999997, 47.620581999999999], [7.5936760000000003, 48.333019], [8.0992789999999992, 49.017783999999999], [6.6582299999999996, 49.201957999999998], [6.1863200000000003, 49.463802999999999], [6.2427510000000002, 49.902225999999999], [6.0430729999999997, 50.128051999999997], [6.1566580000000002, 50.803721000000003], [5.988658, 51.851616], [6.5893969999999999, 51.852029000000002], [6.8428699999999996, 52.228439999999999], [7.0920529999999999, 53.144043000000003], [6.9051400000000003, 53.482162000000002], [7.1004250000000004, 53.693931999999997], [7.9362389999999996, 53.748296000000003], [8.1217059999999996, 53.527791999999998], [8.8007340000000003, 54.020786000000001], [8.5721179999999997, 54.395645999999999], [8.5262290000000007, 54.962744000000001], [9.2820490000000007, 54.830865000000003], [9.9219059999999999, 54.983103999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0435\u0440\u043c\u0430\u043d\u0438\u044f", "fr": "Allemagne", "en": "Germany", "nl": "Duitsland", "pt": "Alemanha", "no": "Tyskland", "de": "Deutschland", "it": "Germania", "sv": "Tyskland", "pl": "Niemcy", "fi": "Saksa", "zh": "\u5fb7\u56fd", "ja": "\u30c9\u30a4\u30c4", "es": "Alemania"}, "label_fr": "Allemagne", "name": "Germany", "dbpedia_uri": "http://dbpedia.org/resource/Germany"}, "id": "DEU"}, {"geometry": {"type": "Polygon", "coordinates": [[[43.081226000000001, 12.699638999999999], [43.317852000000002, 12.390148], [43.286380999999999, 11.974928], [42.715873999999999, 11.735640999999999], [43.145305, 11.46204], [42.776851999999998, 10.926879], [42.554929999999999, 11.10511], [42.314140000000002, 11.0342], [41.755569999999999, 11.05091], [41.73959, 11.35511], [41.661760000000001, 11.6312], [42, 12.1], [42.351559999999999, 12.54223], [42.779642000000003, 12.455416], [43.081226000000001, 12.699638999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0414\u0436\u0438\u0431\u0443\u0442\u0438", "fr": "Djibouti", "en": "Djibouti", "nl": "Djibouti (land)", "pt": "Djibouti", "no": "Djibouti", "de": "Dschibuti", "it": "Gibuti", "sv": "Djibouti", "pl": "D\u017cibuti", "fi": "Djibouti", "zh": "\u5409\u5e03\u63d0", "ja": "\u30b8\u30d6\u30c1", "es": "Yibuti"}, "label_fr": "Djibouti", "name": "Djibouti", "dbpedia_uri": "http://dbpedia.org/resource/Djibouti"}, "id": "DJI"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[12.690006, 55.609991000000001], [12.089990999999999, 54.800015000000002], [11.043543, 55.364863999999997], [10.903914, 55.779955000000001], [12.370903999999999, 56.111407], [12.690006, 55.609991000000001]]], [[[10.912182, 56.458621000000001], [10.667804, 56.081383000000002], [10.369992999999999, 56.190007000000001], [9.6499849999999991, 55.469999000000001], [9.9219059999999999, 54.983103999999997], [9.2820490000000007, 54.830865000000003], [8.5262290000000007, 54.962744000000001], [8.1203109999999992, 55.517722999999997], [8.0899769999999993, 56.540011999999997], [8.2565819999999999, 56.809969000000002], [8.5434380000000001, 57.110002999999999], [9.4244690000000002, 57.172066000000001], [9.7755589999999994, 57.447941], [10.580005999999999, 57.730016999999997], [10.546106, 57.215733], [10.25, 56.890016000000003], [10.369992999999999, 56.609982000000002], [10.912182, 56.458621000000001]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0414\u0430\u043d\u0438\u044f", "fr": "Danemark", "en": "Denmark", "nl": "Denemarken", "pt": "Dinamarca", "no": "Danmark", "de": "D\u00e4nemark", "it": "Danimarca", "sv": "Danmark", "pl": "Dania", "fi": "Tanska", "zh": "\u4e39\u9ea6", "ja": "\u30c7\u30f3\u30de\u30fc\u30af", "es": "Dinamarca"}, "label_fr": "Danemark", "name": "Denmark", "dbpedia_uri": "http://dbpedia.org/resource/Denmark"}, "id": "DNK"}, {"geometry": {"type": "Polygon", "coordinates": [[[-71.712361000000001, 19.714455999999998], [-71.587304000000003, 19.884910999999999], [-70.806706000000005, 19.880286000000002], [-70.214365000000001, 19.622885], [-69.950815000000006, 19.648], [-69.76925, 19.293267], [-69.222126000000003, 19.313213999999999], [-69.254345999999998, 19.015196], [-68.809411999999995, 18.979074000000001], [-68.317943, 18.612197999999999], [-68.689316000000005, 18.205141999999999], [-69.164946, 18.422647999999999], [-69.623987999999997, 18.380713], [-69.952933999999999, 18.428307], [-70.133233000000004, 18.245915], [-70.517137000000005, 18.184291000000002], [-70.669297999999998, 18.426886], [-70.999949999999998, 18.283328999999998], [-71.400210000000001, 17.598564], [-71.657662000000002, 17.757573000000001], [-71.708304999999996, 18.044996999999999], [-71.687737999999996, 18.316659999999999], [-71.945111999999995, 18.616900000000001], [-71.701302999999996, 18.785416999999999], [-71.624872999999994, 19.169837999999999], [-71.712361000000001, 19.714455999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0414\u043e\u043c\u0438\u043d\u0438\u043a\u0430\u043d\u0441\u043a\u0430\u044f \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430", "fr": "R\u00e9publique dominicaine", "en": "Dominican Republic", "nl": "Dominicaanse Republiek", "pt": "Rep\u00fablica Dominicana", "no": "Den dominikanske republikk", "de": "Dominikanische Republik", "it": "Repubblica Dominicana", "sv": "Dominikanska republiken", "pl": "Dominikana", "fi": "Dominikaaninen tasavalta", "zh": "\u591a\u660e\u5c3c\u52a0\u5171\u548c\u570b", "ja": "\u30c9\u30df\u30cb\u30ab\u5171\u548c\u56fd", "es": "Rep\u00fablica Dominicana"}, "label_fr": "R\u00e9publique dominicaine", "name": "Dominican Republic", "dbpedia_uri": "http://dbpedia.org/resource/Dominican_Republic"}, "id": "DOM"}, {"geometry": {"type": "Polygon", "coordinates": [[[11.999506, 23.471668000000001], [8.5728930000000005, 21.565660999999999], [5.6775659999999997, 19.601206999999999], [4.2674190000000003, 19.155265], [3.1581329999999999, 19.057364], [3.1466609999999999, 19.693579], [2.6835879999999999, 19.85623], [2.060991, 20.142233000000001], [1.8232280000000001, 20.610809], [-1.550055, 22.792666000000001], [-4.9233370000000001, 24.974574], [-8.6844000000000001, 27.395744000000001], [-8.6651240000000005, 27.589479000000001], [-8.6655899999999999, 27.656426], [-8.6741159999999997, 28.841289], [-7.0592280000000001, 29.579228000000001], [-6.060632, 29.7317], [-5.2421290000000003, 30.000443000000001], [-4.8596459999999997, 30.501187999999999], [-3.6904409999999999, 30.896951999999999], [-3.6474980000000001, 31.637294000000001], [-3.0689799999999998, 31.724498000000001], [-2.6166049999999998, 32.094346000000002], [-1.3078989999999999, 32.262889000000001], [-1.1245510000000001, 32.651522], [-1.3880490000000001, 32.864015000000002], [-1.733455, 33.919713000000002], [-1.792986, 34.527918999999997], [-2.1699139999999999, 35.168396000000001], [-1.2086030000000001, 35.714849000000001], [-0.12745400000000001, 35.888661999999997], [0.50387700000000002, 36.301273000000002], [1.4669190000000001, 36.605646999999998], [3.161699, 36.783904999999997], [4.8157579999999998, 36.865037000000001], [5.3201200000000002, 36.716518999999998], [6.2618200000000002, 37.110655000000001], [7.3303849999999997, 37.118380999999999], [7.7370780000000003, 36.885708000000001], [8.4209639999999997, 36.946427], [8.2178240000000002, 36.433177000000001], [8.3763679999999994, 35.479875999999997], [8.140981, 34.655146000000002], [7.5244819999999999, 34.097375999999997], [7.6126420000000001, 33.344115000000002], [8.4304729999999992, 32.748336999999999], [8.4391029999999994, 32.506284999999998], [9.0556029999999996, 32.102691999999998], [9.4821399999999993, 30.307556000000002], [9.8056339999999995, 29.424638000000002], [9.8599979999999992, 28.959990000000001], [9.6838850000000001, 28.144174], [9.7561280000000004, 27.688258999999999], [9.6290560000000003, 27.140953], [9.7162860000000002, 26.512205999999999], [9.3194110000000006, 26.094325000000001], [9.9106930000000002, 25.365455000000001], [9.9482610000000005, 24.936954], [10.303846999999999, 24.379313], [10.771364, 24.562532000000001], [11.560669000000001, 24.097909000000001], [11.999506, 23.471668000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u043b\u0436\u0438\u0440", "fr": "Alg\u00e9rie", "en": "Algeria", "nl": "Algerije", "pt": "Arg\u00e9lia", "no": "Algerie", "de": "Algerien", "it": "Algeria", "sv": "Algeriet", "pl": "Algieria", "fi": "Algeria", "zh": "\u963f\u5c14\u53ca\u5229\u4e9a", "ja": "\u30a2\u30eb\u30b8\u30a7\u30ea\u30a2", "es": "Argelia"}, "label_fr": "Alg\u00e9rie", "name": "Algeria", "dbpedia_uri": "http://dbpedia.org/resource/Algeria"}, "id": "DZA"}, {"geometry": {"type": "Polygon", "coordinates": [[[-80.302560999999997, -3.4048560000000001], [-79.770292999999995, -2.6575120000000001], [-79.986559, -2.2207940000000002], [-80.368784000000005, -2.6851590000000001], [-80.967765, -2.2469429999999999], [-80.764805999999993, -1.9650479999999999], [-80.933659000000006, -1.057455], [-80.583370000000002, -0.906663], [-80.399325000000005, -0.28370299999999998], [-80.020898000000003, 0.36033999999999999], [-80.090609999999998, 0.76842900000000003], [-79.542761999999996, 0.98293799999999998], [-78.855259000000004, 1.380924], [-77.855061000000006, 0.80992500000000001], [-77.668612999999993, 0.82589299999999999], [-77.424983999999995, 0.39568700000000001], [-76.57638, 0.256936], [-76.292314000000005, 0.416047], [-75.801466000000005, 0.084801000000000001], [-75.373222999999996, -0.152032], [-75.233722999999998, -0.91141700000000003], [-75.544995999999998, -1.5616099999999999], [-76.635394000000005, -2.6086779999999998], [-77.837905000000006, -3.0030209999999999], [-78.450683999999995, -3.873097], [-78.639897000000005, -4.547784], [-79.205288999999993, -4.9591289999999999], [-79.624978999999996, -4.4541979999999999], [-80.028908000000001, -4.3460910000000004], [-80.442241999999993, -4.4257239999999998], [-80.469295000000002, -4.0592870000000003], [-80.184015000000002, -3.8211620000000002], [-80.302560999999997, -3.4048560000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042d\u043a\u0432\u0430\u0434\u043e\u0440", "fr": "\u00c9quateur (pays)", "en": "Ecuador", "nl": "Ecuador", "pt": "Equador", "no": "Ecuador", "de": "Ecuador", "it": "Ecuador", "sv": "Ecuador", "pl": "Ekwador", "fi": "Ecuador", "zh": "\u5384\u74dc\u591a\u5c14", "ja": "\u30a8\u30af\u30a2\u30c9\u30eb", "es": "Ecuador"}, "label_fr": "\u00c9quateur (pays)", "name": "Ecuador", "dbpedia_uri": "http://dbpedia.org/resource/Ecuador"}, "id": "ECU"}, {"geometry": {"type": "Polygon", "coordinates": [[[34.922600000000003, 29.501329999999999], [34.641739999999999, 29.099419999999999], [34.426549999999999, 28.343990000000002], [34.154510000000002, 27.8233], [33.92136, 27.648700000000002], [33.58811, 27.971360000000001], [33.136760000000002, 28.417649999999998], [32.423229999999997, 29.85108], [32.320459999999997, 29.760429999999999], [32.734819999999999, 28.70523], [33.348759999999999, 27.69989], [34.104550000000003, 26.14227], [34.473869999999998, 25.598559999999999], [34.795070000000003, 25.033750000000001], [35.692410000000002, 23.92671], [35.493720000000003, 23.752369999999999], [35.525979999999997, 23.102440000000001], [36.690689999999996, 22.20485], [36.866230000000002, 22], [32.899999999999999, 22], [29.02, 22], [25, 22], [25, 25.682500000000001], [25, 29.238655000000001], [24.70007, 30.04419], [24.957619999999999, 30.6616], [24.802869999999999, 31.089289999999998], [25.164819999999999, 31.56915], [26.495329999999999, 31.58568], [27.457619999999999, 31.321259999999999], [28.450479999999999, 31.025770000000001], [28.913530000000002, 30.870049999999999], [29.683420000000002, 31.186859999999999], [30.095030000000001, 31.473400000000002], [30.976929999999999, 31.555859999999999], [31.68796, 31.429600000000001], [31.96041, 30.933599999999998], [32.19247, 31.260339999999999], [32.993920000000003, 31.024069999999998], [33.773400000000002, 30.967459999999999], [34.265439999999998, 31.219360000000002], [34.922600000000003, 29.501329999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0415\u0433\u0438\u043f\u0435\u0442", "fr": "\u00c9gypte", "en": "Egypt", "nl": "Egypte (land)", "pt": "Egito", "no": "Egypt", "de": "\u00c4gypten", "it": "Egitto", "sv": "Egypten", "pl": "Egipt", "fi": "Egypti", "zh": "\u57c3\u53ca", "ja": "\u30a8\u30b8\u30d7\u30c8", "es": "Egipto"}, "label_fr": "\u00c9gypte", "name": "Egypt", "dbpedia_uri": "http://dbpedia.org/resource/Egypt"}, "id": "EGY"}, {"geometry": {"type": "Polygon", "coordinates": [[[42.351559999999999, 12.54223], [42.009749999999997, 12.865819999999999], [41.598559999999999, 13.45209], [41.155194000000002, 13.77332], [40.896599999999999, 14.118639999999999], [40.026218999999998, 14.519579], [39.340609999999998, 14.531549999999999], [39.099400000000003, 14.740640000000001], [38.512949999999996, 14.505470000000001], [37.90607, 14.959429999999999], [37.593769999999999, 14.213100000000001], [36.429510000000001, 14.42211], [36.323188999999999, 14.822481], [36.753860000000003, 16.291874], [36.852530000000002, 16.95655], [37.167470000000002, 17.26314], [37.904000000000003, 17.42754], [38.410089999999997, 17.998307], [38.990622999999999, 16.840626], [39.266109999999998, 15.922723], [39.814293999999997, 15.435646999999999], [41.179274999999997, 14.49108], [41.734952, 13.921037], [42.276831000000001, 13.343992], [42.589576000000001, 13.000420999999999], [43.081226000000001, 12.699638999999999], [42.779642000000003, 12.455416], [42.351559999999999, 12.54223]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042d\u0440\u0438\u0442\u0440\u0435\u044f", "fr": "\u00c9rythr\u00e9e", "en": "Eritrea", "nl": "Eritrea", "pt": "Eritreia", "no": "Eritrea", "de": "Eritrea", "it": "Eritrea", "sv": "Eritrea", "pl": "Erytrea", "fi": "Eritrea", "zh": "\u5384\u7acb\u7279\u91cc\u4e9a", "ja": "\u30a8\u30ea\u30c8\u30ea\u30a2", "es": "Eritrea"}, "label_fr": "\u00c9rythr\u00e9e", "name": "Eritrea", "dbpedia_uri": "http://dbpedia.org/resource/Eritrea"}, "id": "ERI"}, {"geometry": {"type": "Polygon", "coordinates": [[[-9.0348179999999996, 41.880571000000003], [-8.9844329999999992, 42.592775000000003], [-9.3928840000000005, 43.026625000000003], [-7.9781899999999997, 43.748337999999997], [-6.7544919999999999, 43.567909], [-5.411886, 43.574240000000003], [-4.3478430000000001, 43.403449000000002], [-3.5175320000000001, 43.455900999999997], [-1.901351, 43.422801999999997], [-1.5027710000000001, 43.034013999999999], [0.33804699999999999, 42.579546000000001], [0.70159099999999996, 42.795734000000003], [1.8267929999999999, 42.343384999999998], [2.9859990000000001, 42.473014999999997], [3.0394839999999999, 41.892119999999998], [2.0918420000000002, 41.226089000000002], [0.81052500000000005, 41.014732000000002], [0.72133100000000006, 40.678317999999997], [0.106692, 40.123933999999998], [-0.27871099999999999, 39.309978000000001], [0.111291, 38.738514000000002], [-0.46712399999999998, 38.292366000000001], [-0.68338900000000002, 37.642353999999997], [-1.438382, 37.443064], [-2.1464530000000002, 36.674143999999998], [-3.415781, 36.658900000000003], [-4.3689010000000001, 36.677838999999999], [-4.9952189999999996, 36.324708000000001], [-5.3771599999999999, 35.946849999999998], [-5.8664319999999996, 36.029817000000001], [-6.236694, 36.367677], [-6.5201909999999996, 36.942912999999997], [-7.4537259999999996, 37.097788000000001], [-7.5371050000000004, 37.428904000000003], [-7.1665080000000003, 37.803894], [-7.0292810000000001, 38.075763999999999], [-7.3740920000000001, 38.373058999999998], [-7.0980369999999997, 39.030073000000002], [-7.4986319999999997, 39.629570999999999], [-7.066592, 39.711891999999999], [-7.0264129999999998, 40.184524000000003], [-6.86402, 40.330871999999999], [-6.851127, 41.111083000000001], [-6.3890880000000001, 41.381815000000003], [-6.6686059999999996, 41.883386999999999], [-7.251309, 41.918346], [-7.4225130000000004, 41.792074999999997], [-8.0131750000000004, 41.790886], [-8.2638569999999998, 42.280468999999997], [-8.6719460000000002, 42.134689000000002], [-9.0348179999999996, 41.880571000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u0441\u043f\u0430\u043d\u0438\u044f", "fr": "Espagne", "en": "Spain", "nl": "Spanje", "pt": "Espanha", "no": "Spania", "de": "Spanien", "it": "Spagna", "sv": "Spanien", "pl": "Hiszpania", "fi": "Espanja", "zh": "\u897f\u73ed\u7259", "ja": "\u30b9\u30da\u30a4\u30f3", "es": "Espa\u00f1a"}, "label_fr": "Espagne", "name": "Spain", "dbpedia_uri": "http://dbpedia.org/resource/Spain"}, "id": "ESP"}, {"geometry": {"type": "Polygon", "coordinates": [[[24.312863, 57.793424000000002], [24.428927999999999, 58.383412999999997], [24.061198000000001, 58.257375000000003], [23.426559999999998, 58.612752999999998], [23.339794999999999, 59.187240000000003], [24.604213999999999, 59.465854], [25.864189, 59.611089999999997], [26.949135999999999, 59.445802999999998], [27.981114000000002, 59.475388000000002], [28.131699000000001, 59.300825000000003], [27.420165999999998, 58.724581000000001], [27.716685999999999, 57.791899000000001], [27.288184999999999, 57.474527999999999], [26.463532000000001, 57.476388999999998], [25.602810000000002, 57.847529000000002], [25.164594000000001, 57.970157], [24.312863, 57.793424000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042d\u0441\u0442\u043e\u043d\u0438\u044f", "fr": "Estonie", "en": "Estonia", "nl": "Estland", "pt": "Est\u00f3nia", "no": "Estland", "de": "Estland", "it": "Estonia", "sv": "Estland", "pl": "Estonia", "fi": "Viro", "zh": "\u7231\u6c99\u5c3c\u4e9a", "ja": "\u30a8\u30b9\u30c8\u30cb\u30a2", "es": "Estonia"}, "label_fr": "Estonie", "name": "Estonia", "dbpedia_uri": "http://dbpedia.org/resource/Estonia"}, "id": "EST"}, {"geometry": {"type": "Polygon", "coordinates": [[[37.90607, 14.959429999999999], [38.512949999999996, 14.505470000000001], [39.099400000000003, 14.740640000000001], [39.340609999999998, 14.531549999999999], [40.026249999999997, 14.519590000000001], [40.896599999999999, 14.118639999999999], [41.155200000000001, 13.77333], [41.598559999999999, 13.45209], [42.009749999999997, 12.865819999999999], [42.351559999999999, 12.54223], [42, 12.1], [41.661760000000001, 11.6312], [41.73959, 11.35511], [41.755569999999999, 11.05091], [42.314140000000002, 11.0342], [42.554929999999999, 11.10511], [42.776851999999998, 10.926879], [42.558759999999999, 10.57258], [42.92812, 10.021940000000001], [43.296990000000001, 9.5404800000000005], [43.678750000000001, 9.1835799999999992], [46.948340000000002, 7.99688], [47.78942, 8.0030000000000001], [44.9636, 5.00162], [43.660870000000003, 4.9575500000000003], [42.769669999999998, 4.2525899999999996], [42.128610000000002, 4.2341300000000004], [41.855083, 3.9189120000000002], [41.171799999999998, 3.9190900000000002], [40.768479999999997, 4.2570199999999998], [39.854939999999999, 3.8387899999999999], [39.559384000000001, 3.4220600000000001], [38.892510000000001, 3.50074], [38.671140000000001, 3.6160700000000001], [38.436970000000002, 3.5885099999999999], [38.120914999999997, 3.5986050000000001], [36.855092999999997, 4.447864], [36.159078999999998, 4.447864], [35.817447999999999, 4.7769659999999998], [35.817447999999999, 5.3382319999999996], [35.298006999999998, 5.5060000000000002], [34.70702, 6.59422], [34.250320000000002, 6.8260699999999996], [34.075099999999999, 7.2259500000000001], [33.568289999999998, 7.7133399999999996], [32.954180000000001, 7.7849700000000004], [33.294800000000002, 8.3545800000000003], [33.825499999999998, 8.3791600000000006], [33.974980000000002, 8.6845599999999994], [33.961620000000003, 9.5835799999999995], [34.257449999999999, 10.630089999999999], [34.73115, 10.910170000000001], [34.831629999999997, 11.318960000000001], [35.260489999999997, 12.08286], [35.863630000000001, 12.578279999999999], [36.270220000000002, 13.563330000000001], [36.429510000000001, 14.42211], [37.593769999999999, 14.213100000000001], [37.90607, 14.959429999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042d\u0444\u0438\u043e\u043f\u0438\u044f", "fr": "\u00c9thiopie", "en": "Ethiopia", "nl": "Ethiopi\u00eb", "pt": "Eti\u00f3pia", "no": "Etiopia", "de": "\u00c4thiopien", "it": "Etiopia", "sv": "Etiopien", "pl": "Etiopia", "fi": "Etiopia", "zh": "\u57c3\u585e\u4fc4\u6bd4\u4e9a", "ja": "\u30a8\u30c1\u30aa\u30d4\u30a2", "es": "Etiop\u00eda"}, "label_fr": "\u00c9thiopie", "name": "Ethiopia", "dbpedia_uri": "http://dbpedia.org/resource/Ethiopia"}, "id": "ETH"}, {"geometry": {"type": "Polygon", "coordinates": [[[28.591930000000001, 69.064777000000007], [28.445944000000001, 68.364613000000006], [29.977426000000001, 67.698296999999997], [29.054589, 66.944286000000005], [30.217649999999999, 65.805980000000005], [29.544429999999998, 64.948672000000002], [30.444685, 64.204453000000001], [30.035872000000001, 63.552813999999998], [31.516092, 62.867686999999997], [31.139990999999998, 62.357692999999998], [30.211106999999998, 61.780028000000001], [28.069997999999998, 60.503517000000002], [26.255172999999999, 60.423960999999998], [24.496624000000001, 60.057316], [22.869695, 59.846373], [22.290763999999999, 60.391921000000004], [21.322244000000001, 60.720170000000003], [21.544865999999999, 61.705328999999999], [21.059211000000001, 62.607393000000002], [21.536028999999999, 63.189734999999999], [22.442744000000001, 63.817810000000001], [24.730512000000001, 64.902343999999999], [25.398067999999999, 65.111427000000006], [25.294042999999999, 65.534345999999999], [23.903379000000001, 66.006927000000005], [23.56588, 66.396051], [23.539473000000001, 67.936008999999999], [21.978535000000001, 68.616845999999995], [20.645593000000002, 69.106246999999996], [21.244935999999999, 69.370442999999995], [22.356238000000001, 68.841740999999999], [23.662050000000001, 68.891247000000007], [24.735679000000001, 68.649557000000001], [25.689212999999999, 69.092113999999995], [26.179621999999998, 69.825299000000001], [27.732292000000001, 70.164192999999997], [29.015573, 69.766491000000002], [28.591930000000001, 69.064777000000007]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0424\u0438\u043d\u043b\u044f\u043d\u0434\u0438\u044f", "fr": "Finlande", "en": "Finland", "nl": "Finland", "pt": "Finl\u00e2ndia", "no": "Finland", "de": "Finnland", "it": "Finlandia", "sv": "Finland", "pl": "Finlandia", "fi": "Suomi", "zh": "\u82ac\u5170", "ja": "\u30d5\u30a3\u30f3\u30e9\u30f3\u30c9", "es": "Finlandia"}, "label_fr": "Finlande", "name": "Finland", "dbpedia_uri": "http://dbpedia.org/resource/Finland"}, "id": "FIN"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[178.37360000000001, -17.339919999999999], [178.71806000000001, -17.62846], [178.55270999999999, -18.150590000000001], [177.93266, -18.287990000000001], [177.38146, -18.16432], [177.28504000000001, -17.72465], [177.67087000000001, -17.381139999999998], [178.12557000000001, -17.504809999999999], [178.37360000000001, -17.339919999999999]]], [[[179.36414300000001, -16.801354], [178.72505899999999, -17.012042000000001], [178.59683899999999, -16.639150000000001], [179.096609, -16.433983999999999], [179.413509, -16.379054], [180, -16.067132999999998], [180, -16.555216999999999], [179.36414300000001, -16.801354]]], [[[-179.91736900000001, -16.501783], [-180, -16.555216999999999], [-180, -16.067132999999998], [-179.79331999999999, -16.020882], [-179.91736900000001, -16.501783]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0424\u0438\u0434\u0436\u0438", "fr": "Fidji", "en": "Fiji", "nl": "Fiji", "pt": "Fiji", "no": "Fiji", "de": "Fidschi", "it": "Figi", "sv": "Fiji", "pl": "Fid\u017ci", "fi": "Fid\u017ei", "zh": "\u6590\u6fdf", "ja": "\u30d5\u30a3\u30b8\u30fc", "es": "Fiyi"}, "label_fr": "Fidji", "name": "Fiji", "dbpedia_uri": "http://dbpedia.org/resource/Fiji"}, "id": "FJI"}, {"geometry": {"type": "Polygon", "coordinates": [[[-61.200000000000003, -51.850000000000001], [-60, -51.25], [-59.149999999999999, -51.5], [-58.549999999999997, -51.100000000000001], [-57.75, -51.549999999999997], [-58.049999999999997, -51.899999999999999], [-59.399999999999999, -52.200000000000003], [-59.850000000000001, -51.850000000000001], [-60.700000000000003, -52.299999999999997], [-61.200000000000003, -51.850000000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0424\u043e\u043b\u043a\u043b\u0435\u043d\u0434\u0441\u043a\u0438\u0435 \u043e\u0441\u0442\u0440\u043e\u0432\u0430", "fr": "\u00celes Malouines", "en": "Falkland Islands", "nl": "Falklandeilanden", "pt": "Ilhas Malvinas", "no": "Falklands\u00f8yene", "de": "Falklandinseln", "it": "Isole Falkland", "sv": "Falklands\u00f6arna", "pl": "Falklandy", "fi": "Falklandinsaaret", "zh": "\u798f\u514b\u5170\u7fa4\u5c9b", "ja": "\u30d5\u30a9\u30fc\u30af\u30e9\u30f3\u30c9\u8af8\u5cf6", "es": "Islas Malvinas (Territorio Brit\u00e1nico de Ultramar)"}, "label_fr": "\u00celes Malouines", "name": "Falkland Islands", "dbpedia_uri": "http://dbpedia.org/resource/Falkland_Islands"}, "id": "FLK"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-52.556424999999997, 2.504705], [-52.939656999999997, 2.1248580000000001], [-53.418464999999998, 2.0533890000000001], [-53.554839000000001, 2.3348969999999998], [-53.778520999999998, 2.376703], [-54.088062999999998, 2.1055570000000001], [-54.524754000000001, 2.311849], [-54.271230000000003, 2.7387480000000002], [-54.184283999999998, 3.194172], [-54.011504000000002, 3.6225700000000001], [-54.399541999999997, 4.2126109999999999], [-54.478633000000002, 4.8967559999999999], [-53.958044999999998, 5.7565480000000004], [-53.618453000000002, 5.6465290000000001], [-52.882140999999997, 5.4098509999999997], [-51.823343000000001, 4.5657680000000003], [-51.657797000000002, 4.1562320000000001], [-52.249338000000002, 3.2410939999999999], [-52.556424999999997, 2.504705]]], [[[9.5600159999999992, 42.152492000000002], [9.2297519999999995, 41.380006999999999], [8.7757229999999993, 41.583612000000002], [8.5442129999999992, 42.256517000000002], [8.7460090000000008, 42.628121999999998], [9.3900009999999998, 43.009985], [9.5600159999999992, 42.152492000000002]]], [[[3.588184, 50.378991999999997], [4.2860230000000001, 49.907496999999999], [4.7992220000000003, 49.985373000000003], [5.6740519999999997, 49.529483999999997], [5.8977589999999998, 49.442667], [6.1863200000000003, 49.463802999999999], [6.6582299999999996, 49.201957999999998], [8.0992789999999992, 49.017783999999999], [7.5936760000000003, 48.333019], [7.4667589999999997, 47.620581999999999], [7.192202, 47.449765999999997], [6.7365709999999996, 47.541801], [6.7687140000000001, 47.287708000000002], [6.0373890000000001, 46.725779000000003], [6.0226090000000001, 46.27299], [6.5000999999999998, 46.429673000000001], [6.8435930000000003, 45.991146999999998], [6.8023550000000004, 45.708579999999998], [7.0966519999999997, 45.333098999999997], [6.7499549999999999, 45.028517999999998], [7.0075620000000001, 44.254767000000001], [7.5495960000000002, 44.127901000000001], [7.4351849999999997, 43.693845000000003], [6.5292450000000004, 43.128892], [4.5569629999999997, 43.399650999999999], [3.1004109999999998, 43.075201], [2.9859990000000001, 42.473014999999997], [1.8267929999999999, 42.343384999999998], [0.70159099999999996, 42.795734000000003], [0.33804699999999999, 42.579546000000001], [-1.5027710000000001, 43.034013999999999], [-1.901351, 43.422801999999997], [-1.384225, 44.02261], [-1.1937979999999999, 46.014918000000002], [-2.225724, 47.064363], [-2.963276, 47.570326999999999], [-4.491555, 47.954954000000001], [-4.5923499999999997, 48.684159999999999], [-3.295814, 48.901691999999997], [-1.616511, 48.644421000000001], [-1.933494, 49.776342], [-0.98946900000000004, 49.347375999999997], [1.3387610000000001, 50.127172999999999], [1.6390009999999999, 50.946606000000003], [2.5135730000000001, 51.148505999999998], [2.6584219999999998, 50.796847999999997], [3.1232519999999999, 50.780363000000001], [3.588184, 50.378991999999997]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0424\u0440\u0430\u043d\u0446\u0438\u044f", "fr": "France", "en": "France", "nl": "Frankrijk", "pt": "Fran\u00e7a", "no": "Frankrike", "de": "Frankreich", "it": "Francia", "sv": "Frankrike", "pl": "Francja", "fi": "Ranska", "zh": "\u6cd5\u56fd", "ja": "\u30d5\u30e9\u30f3\u30b9", "es": "Francia"}, "label_fr": "France", "name": "France", "dbpedia_uri": "http://dbpedia.org/resource/France"}, "id": "FRA"}, {"geometry": {"type": "Polygon", "coordinates": [[[11.093773000000001, -3.9788269999999999], [10.066134999999999, -2.9694829999999999], [9.4052450000000007, -2.1443129999999999], [8.7979959999999995, -1.1113010000000001], [8.8300870000000007, -0.77907400000000004], [9.0484200000000001, -0.45935100000000001], [9.2913510000000006, 0.26866600000000002], [9.4928889999999999, 1.0101199999999999], [9.8302840000000007, 1.0678939999999999], [11.285079, 1.0576620000000001], [11.276449, 2.2610510000000001], [11.751664999999999, 2.3267579999999999], [12.35938, 2.192812], [12.951333999999999, 2.3216160000000001], [13.075822000000001, 2.2670970000000001], [13.003114, 1.8308960000000001], [13.282631, 1.314184], [14.026669, 1.3956770000000001], [14.276266, 1.19693], [13.843321, 0.038758000000000001], [14.316418000000001, -0.55262699999999998], [14.425456000000001, -1.333407], [14.29921, -1.9982759999999999], [13.992407, -2.4708049999999999], [13.109619, -2.4287399999999999], [12.575284, -1.9485110000000001], [12.495703000000001, -2.3916879999999998], [11.820964, -2.5141610000000001], [11.478039000000001, -2.765619], [11.855122, -3.4268709999999998], [11.093773000000001, -3.9788269999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0430\u0431\u043e\u043d", "fr": "Gabon", "en": "Gabon", "nl": "Gabon", "pt": "Gab\u00e3o", "no": "Gabon", "de": "Gabun", "it": "Gabon", "sv": "Gabon", "pl": "Gabon", "fi": "Gabon", "zh": "\u52a0\u84ec", "ja": "\u30ac\u30dc\u30f3", "es": "Gab\u00f3n"}, "label_fr": "Gabon", "name": "Gabon", "dbpedia_uri": "http://dbpedia.org/resource/Gabon"}, "id": "GAB"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-5.6619489999999999, 54.554603], [-6.1978850000000003, 53.867564999999999], [-6.9537300000000002, 54.073701999999997], [-7.5721679999999996, 54.059956], [-7.3660310000000004, 54.595841], [-7.5721679999999996, 55.131622], [-6.7338469999999999, 55.17286], [-5.6619489999999999, 54.554603]]], [[[-3.0050050000000001, 58.634999999999998], [-4.0738279999999998, 57.553024999999998], [-3.055002, 57.690018999999999], [-1.9592810000000001, 57.684800000000003], [-2.2199879999999999, 56.870016999999997], [-3.1190030000000002, 55.973793000000001], [-2.0850089999999999, 55.909998000000002], [-2.0056759999999998, 55.804903000000003], [-1.1149910000000001, 54.624986], [-0.43048500000000001, 54.464376000000001], [0.18498100000000001, 53.325014000000003], [0.46997699999999998, 52.929999000000002], [1.6815310000000001, 52.739519999999999], [1.5599879999999999, 52.099997999999999], [1.050562, 51.806761000000002], [1.449865, 51.289428000000001], [0.55033399999999999, 50.765739000000004], [-0.78751700000000002, 50.774988999999998], [-2.4899979999999999, 50.500019000000002], [-2.9562740000000001, 50.69688], [-3.617448, 50.228355999999998], [-4.5425079999999998, 50.341836999999998], [-5.2450229999999998, 49.960000000000001], [-5.776567, 50.159678], [-4.30999, 51.210000999999998], [-3.4148510000000001, 51.426009000000001], [-3.4227189999999998, 51.426848], [-4.9843669999999998, 51.593465999999999], [-5.267296, 51.991399999999999], [-4.2223470000000001, 52.301355999999998], [-4.7700129999999996, 52.840004999999998], [-4.5799989999999999, 53.495004000000002], [-3.0938310000000002, 53.404547000000001], [-3.0920800000000002, 53.404440999999998], [-2.9450090000000002, 53.984999999999999], [-3.6147010000000002, 54.600937000000002], [-3.6300050000000001, 54.615012999999998], [-4.8441689999999999, 54.790970999999999], [-5.0825269999999998, 55.061601000000003], [-4.719112, 55.508473000000002], [-5.0479810000000001, 55.783985999999999], [-5.586398, 55.311146000000001], [-5.6449990000000003, 56.275015000000003], [-6.1499810000000004, 56.78501], [-5.7868250000000003, 57.818848000000003], [-5.0099989999999996, 58.630012999999998], [-4.2114950000000002, 58.550845000000002], [-3.0050050000000001, 58.634999999999998]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0412\u0435\u043b\u0438\u043a\u043e\u0431\u0440\u0438\u0442\u0430\u043d\u0438\u044f", "fr": "Royaume-Uni", "en": "United Kingdom", "nl": "Verenigd Koninkrijk", "pt": "Reino Unido", "no": "Storbritannia", "de": "Vereinigtes K\u00f6nigreich", "it": "Regno Unito", "sv": "Storbritannien", "pl": "Wielka Brytania", "fi": "Yhdistynyt kuningaskunta", "zh": "\u82f1\u56fd", "ja": "\u30a4\u30ae\u30ea\u30b9", "es": "Reino Unido"}, "label_fr": "Royaume-Uni", "name": "United Kingdom", "dbpedia_uri": "http://dbpedia.org/resource/United_Kingdom"}, "id": "GBR"}, {"geometry": {"type": "Polygon", "coordinates": [[[41.554084000000003, 41.535656000000003], [41.703170999999998, 41.962943000000003], [41.453470000000003, 42.645122999999998], [40.875469000000002, 43.013627999999997], [40.321393999999998, 43.128633999999998], [39.955008999999997, 43.434998], [40.076965000000001, 43.553103999999998], [40.922184999999999, 43.382159000000001], [42.394395000000003, 43.220308000000003], [43.756017, 42.740828], [43.931199999999997, 42.554974000000001], [44.537623000000004, 42.711993], [45.470278999999998, 42.502780999999999], [45.776409999999998, 42.092444], [46.404950999999997, 41.860675000000001], [46.145432, 41.722802000000001], [46.637908000000003, 41.181673000000004], [46.501637000000002, 41.064444999999999], [45.962600999999999, 41.123873000000003], [45.217426000000003, 41.411451999999997], [44.972479999999997, 41.248128999999999], [43.582746, 41.092143], [42.619548999999999, 41.583173000000002], [41.554084000000003, 41.535656000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0414\u0436\u043e\u0440\u0434\u0436\u0438\u044f (\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f)", "fr": "G\u00e9orgie", "en": "Georgia", "nl": "Georgia", "pt": "Ge\u00f3rgia (desambigua\u00e7\u00e3o)", "no": "Georgia (andre betydninger)", "de": "Georgia (Begriffskl\u00e4rung)", "it": "Georgia (disambigua)", "sv": "Georgia (olika betydelser)", "pl": "Georgia (ujednoznacznienie)", "fi": "Georgia (t\u00e4smennyssivu)", "zh": "\u55ac\u6cbb\u4e9e (\u6d88\u6b67\u7fa9)", "ja": "\u30b8\u30e7\u30fc\u30b8\u30a2", "es": "Georgia (desambiguaci\u00f3n)"}, "label_fr": "G\u00e9orgie", "name": "Georgia", "dbpedia_uri": "http://dbpedia.org/resource/Georgia"}, "id": "GEO"}, {"geometry": {"type": "Polygon", "coordinates": [[[1.060122, 5.9288369999999997], [-0.50763800000000003, 5.3434730000000004], [-1.063625, 5.0005480000000002], [-1.964707, 4.7104619999999997], [-2.856125, 4.9944759999999997], [-2.8107009999999999, 5.3890510000000003], [-3.24437, 6.2504720000000002], [-2.9835850000000002, 7.3797050000000004], [-2.5621900000000002, 8.2196280000000002], [-2.827496, 9.6424610000000008], [-2.9638960000000001, 10.395334999999999], [-2.9404089999999998, 10.96269], [-1.2033579999999999, 11.009819], [-0.76157600000000003, 10.93693], [-0.43870199999999998, 11.098341], [0.023803000000000001, 11.018682], [-0.049785000000000003, 10.706918], [0.36758000000000002, 10.191212999999999], [0.36590099999999998, 9.4650040000000004], [0.46119199999999999, 8.6772229999999997], [0.71202900000000002, 8.3124649999999995], [0.49095699999999998, 7.4117439999999997], [0.570384, 6.9143590000000001], [0.83693099999999998, 6.279979], [1.060122, 5.9288369999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0430 (\u043d\u0430\u0440\u043e\u0434)", "fr": "Ghana", "en": "Ghana", "nl": "Ghana", "pt": "Gana", "no": "Ghana", "de": "Ghana", "it": "Ghana", "sv": "Ghana", "pl": "Ghana", "fi": "Ghana", "ja": "\u30ac\u30fc\u30ca", "es": "Ghana"}, "label_fr": "Ghana", "name": "Ghana", "dbpedia_uri": "http://dbpedia.org/resource/Ghana"}, "id": "GHA"}, {"geometry": {"type": "Polygon", "coordinates": [[[-8.4392980000000009, 7.6860429999999997], [-8.7221240000000009, 7.7116740000000004], [-8.9260649999999995, 7.309037], [-9.2087859999999999, 7.3139209999999997], [-9.4033479999999994, 7.5269050000000002], [-9.3372799999999998, 7.928534], [-9.7553420000000006, 8.5410550000000001], [-10.016567, 8.4285040000000002], [-10.230093999999999, 8.4062059999999992], [-10.505477000000001, 8.3488959999999999], [-10.494315, 8.715541], [-10.654769999999999, 8.9771780000000003], [-10.622394999999999, 9.2679100000000005], [-10.839152, 9.6882459999999995], [-11.117481, 10.045873], [-11.917277, 10.046984], [-12.150338, 9.8585720000000006], [-12.425929, 9.8358340000000002], [-12.596719, 9.6201880000000006], [-12.711957999999999, 9.3427120000000006], [-13.246549999999999, 8.9030489999999993], [-13.685154000000001, 9.4947440000000007], [-14.074045, 9.8861670000000004], [-14.330076, 10.01572], [-14.579699, 10.214467000000001], [-14.693232, 10.656300999999999], [-14.839554, 10.876571999999999], [-15.130311000000001, 11.040412], [-14.685687, 11.527824000000001], [-14.382192, 11.509271999999999], [-14.121406, 11.677117000000001], [-13.9008, 11.678718999999999], [-13.743161000000001, 11.811268999999999], [-13.828272, 12.142644000000001], [-13.718743999999999, 12.247185999999999], [-13.700476, 12.586183], [-13.217817999999999, 12.575874000000001], [-12.499051, 12.332090000000001], [-12.278599, 12.35444], [-12.203564999999999, 12.465648], [-11.658301, 12.386583], [-11.513942999999999, 12.442988], [-11.456168999999999, 12.076834], [-11.297573999999999, 12.077971], [-11.036555999999999, 12.211245], [-10.87083, 12.177887], [-10.593223999999999, 11.923975], [-10.165214000000001, 11.844084000000001], [-9.8909929999999999, 12.060479000000001], [-9.5679119999999998, 12.194243], [-9.3276160000000008, 12.334286000000001], [-9.1274739999999994, 12.308059999999999], [-8.905265, 12.088357999999999], [-8.7860990000000001, 11.812561000000001], [-8.3763050000000003, 11.393646], [-8.5813050000000004, 11.136246], [-8.6203210000000006, 10.810891], [-8.407311, 10.909257], [-8.2823569999999993, 10.792597000000001], [-8.3353769999999994, 10.494812], [-8.0299440000000004, 10.206535000000001], [-8.2293369999999992, 10.129020000000001], [-8.3096160000000001, 9.7895319999999995], [-8.0791140000000006, 9.3762240000000006], [-7.8320999999999996, 8.575704], [-8.2034990000000008, 8.4554530000000003], [-8.2990490000000001, 8.3164440000000006], [-8.2217920000000007, 8.123329], [-8.2807030000000008, 7.6871799999999997], [-8.4392980000000009, 7.6860429999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0432\u0438\u043d\u0435\u044f", "fr": "Guin\u00e9e", "en": "Guinea", "nl": "Guinee", "pt": "Guin\u00e9", "no": "Guinea", "de": "Guinea", "it": "Guinea", "sv": "Guinea", "pl": "Gwinea", "fi": "Guinea", "zh": "\u51e0\u5185\u4e9a", "ja": "\u30ae\u30cb\u30a2", "es": "Guinea"}, "label_fr": "Guin\u00e9e", "name": "Guinea", "dbpedia_uri": "http://dbpedia.org/resource/Guinea"}, "id": "GIN"}, {"geometry": {"type": "Polygon", "coordinates": [[[-16.841525000000001, 13.151394], [-16.713729000000001, 13.594958999999999], [-15.624596, 13.623587000000001], [-15.398770000000001, 13.860369], [-15.081735, 13.876492000000001], [-14.687030999999999, 13.630357], [-14.376714, 13.625679999999999], [-14.046991999999999, 13.794067999999999], [-13.844963, 13.505042], [-14.277702, 13.280585], [-14.712197, 13.298207], [-15.141163000000001, 13.509512000000001], [-15.511813, 13.27857], [-15.691001, 13.270353], [-15.931296, 13.130284], [-16.841525000000001, 13.151394]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0430\u043c\u0431\u0438\u044f", "fr": "Gambie", "en": "The Gambia", "nl": "Gambia (land)", "pt": "G\u00e2mbia", "no": "Gambia", "de": "Gambia", "it": "Gambia", "sv": "Gambia", "pl": "Gambia", "fi": "Gambia", "zh": "\u5188\u6bd4\u4e9a", "ja": "\u30ac\u30f3\u30d3\u30a2", "es": "Gambia"}, "label_fr": "Gambie", "name": "Gambia", "dbpedia_uri": "http://dbpedia.org/resource/The_Gambia"}, "id": "GMB"}, {"geometry": {"type": "Polygon", "coordinates": [[[-15.130311000000001, 11.040412], [-15.66418, 11.458474000000001], [-16.085214000000001, 11.524594], [-16.314786999999999, 11.806514999999999], [-16.308947, 11.958702000000001], [-16.613838000000001, 12.170911], [-16.677451999999999, 12.384852], [-16.147717, 12.547762000000001], [-15.816573999999999, 12.515567000000001], [-15.548477, 12.628170000000001], [-13.700476, 12.586183], [-13.718743999999999, 12.247185999999999], [-13.828272, 12.142644000000001], [-13.743161000000001, 11.811268999999999], [-13.9008, 11.678718999999999], [-14.121406, 11.677117000000001], [-14.382192, 11.509271999999999], [-14.685687, 11.527824000000001], [-15.130311000000001, 11.040412]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0432\u0438\u043d\u0435\u044f-\u0411\u0438\u0441\u0430\u0443", "fr": "Guin\u00e9e-Bissau", "en": "Guinea-Bissau", "nl": "Guinee-Bissau", "pt": "Guin\u00e9-Bissau", "no": "Guinea-Bissau", "de": "Guinea-Bissau", "it": "Guinea-Bissau", "sv": "Guinea-Bissau", "pl": "Gwinea Bissau", "fi": "Guinea-Bissau", "zh": "\u5e7e\u5167\u4e9e\u6bd4\u7d22", "ja": "\u30ae\u30cb\u30a2\u30d3\u30b5\u30a6", "es": "Guinea-Bissau"}, "label_fr": "Guin\u00e9e-Bissau", "name": "Guinea Bissau", "dbpedia_uri": "http://dbpedia.org/resource/Guinea-Bissau"}, "id": "GNB"}, {"geometry": {"type": "Polygon", "coordinates": [[[9.4928889999999999, 1.0101199999999999], [9.3056129999999992, 1.160911], [9.6491579999999999, 2.2838660000000002], [11.276449, 2.2610510000000001], [11.285079, 1.0576620000000001], [9.8302840000000007, 1.0678939999999999], [9.4928889999999999, 1.0101199999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042d\u043a\u0432\u0430\u0442\u043e\u0440\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0413\u0432\u0438\u043d\u0435\u044f", "fr": "Guin\u00e9e \u00e9quatoriale", "en": "Equatorial Guinea", "nl": "Equatoriaal-Guinea", "pt": "Guin\u00e9 Equatorial", "no": "Ekvatorial-Guinea", "de": "\u00c4quatorialguinea", "it": "Guinea Equatoriale", "sv": "Ekvatorialguinea", "pl": "Gwinea R\u00f3wnikowa", "fi": "P\u00e4iv\u00e4ntasaajan Guinea", "zh": "\u8d64\u9053\u51e0\u5185\u4e9a", "ja": "\u8d64\u9053\u30ae\u30cb\u30a2", "es": "Guinea Ecuatorial"}, "label_fr": "Guin\u00e9e \u00e9quatoriale", "name": "Equatorial Guinea", "dbpedia_uri": "http://dbpedia.org/resource/Equatorial_Guinea"}, "id": "GNQ"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[23.69998, 35.705004000000002], [24.246665, 35.368022000000003], [25.025015, 35.424996], [25.769207999999999, 35.354018000000003], [25.745023, 35.179997999999998], [26.290002999999999, 35.299990000000001], [26.164998000000001, 35.004995000000001], [24.724982000000001, 34.919987999999996], [24.735007, 35.084991000000002], [23.514977999999999, 35.279992], [23.69998, 35.705004000000002]]], [[[26.604196000000002, 41.562114999999999], [26.294602000000001, 40.936261000000002], [26.056941999999999, 40.824123], [25.447676999999999, 40.852544999999999], [24.925847999999998, 40.947062000000003], [23.714811000000001, 40.687128999999999], [24.407999, 40.124993000000003], [23.899968000000001, 39.962006000000002], [23.342998999999999, 39.960997999999996], [22.813987999999998, 40.476005000000001], [22.626298999999999, 40.256560999999998], [22.849748000000002, 39.659311000000002], [23.350027000000001, 39.190010999999998], [22.973099000000001, 38.970903], [23.530016, 38.510001000000003], [24.025024999999999, 38.219993000000002], [24.040011, 37.655014999999999], [23.115003000000002, 37.920011000000002], [23.409972, 37.409990999999998], [22.774972000000002, 37.305010000000003], [23.154225, 36.422505999999998], [22.490027999999999, 36.409999999999997], [21.670026, 36.844985999999999], [21.295010999999999, 37.644989000000002], [21.120034, 38.310322999999997], [20.730032000000001, 38.769984999999998], [20.217711999999999, 39.340235], [20.150016000000001, 39.624997999999998], [20.614999999999998, 40.110007000000003], [20.674997000000001, 40.435000000000002], [20.99999, 40.580004000000002], [21.020040000000002, 40.842726999999996], [21.674161000000002, 40.931274999999999], [22.055378000000001, 41.149866000000003], [22.597308000000002, 41.130487000000002], [22.761769999999999, 41.3048], [22.952376999999998, 41.337994000000002], [23.692074000000002, 41.309080999999999], [24.492645, 41.583896000000003], [25.197201, 41.234485999999997], [26.106138000000001, 41.328899], [26.117042000000001, 41.826904999999996], [26.604196000000002, 41.562114999999999]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0440\u0435\u0446\u0438\u044f", "fr": "Gr\u00e8ce", "en": "Greece", "nl": "Griekenland", "pt": "Gr\u00e9cia", "no": "Hellas", "de": "Griechenland", "it": "Grecia", "sv": "Grekland", "pl": "Grecja", "fi": "Kreikka", "zh": "\u5e0c\u814a", "ja": "\u30ae\u30ea\u30b7\u30e3", "es": "Grecia"}, "label_fr": "Gr\u00e8ce", "name": "Greece", "dbpedia_uri": "http://dbpedia.org/resource/Greece"}, "id": "GRC"}, {"geometry": {"type": "Polygon", "coordinates": [[[-46.76379, 82.627960000000002], [-43.406440000000003, 83.225160000000002], [-39.897530000000003, 83.180179999999993], [-38.622140000000002, 83.549049999999994], [-35.087870000000002, 83.645129999999995], [-27.100460000000002, 83.519660000000002], [-20.845389999999998, 82.726690000000005], [-22.69182, 82.341650000000001], [-26.517530000000001, 82.297650000000004], [-31.899999999999999, 82.200000000000003], [-31.396460000000001, 82.021540000000002], [-27.856660000000002, 82.131780000000006], [-24.844480000000001, 81.786969999999997], [-22.903279999999999, 82.093170000000001], [-22.071750000000002, 81.734489999999994], [-23.169609999999999, 81.152709999999999], [-20.623629999999999, 81.524619999999999], [-15.768179999999999, 81.912450000000007], [-12.77018, 81.718850000000003], [-12.208550000000001, 81.291539999999998], [-16.285329999999998, 80.580039999999997], [-16.850000000000001, 80.349999999999994], [-20.046240000000001, 80.177080000000004], [-17.730350000000001, 80.12912], [-18.899999999999999, 79.400000000000006], [-19.704989999999999, 78.751279999999994], [-19.67353, 77.638589999999994], [-18.472850000000001, 76.985650000000007], [-20.035029999999999, 76.944339999999997], [-21.67944, 76.627949999999998], [-19.834070000000001, 76.098079999999996], [-19.598960000000002, 75.248379999999997], [-20.66818, 75.155850000000001], [-19.372810000000001, 74.295609999999996], [-21.59422, 74.223820000000003], [-20.434539999999998, 73.817130000000006], [-20.762339999999998, 73.464359999999999], [-22.17221, 73.309550000000002], [-23.565930000000002, 73.306629999999998], [-22.313110000000002, 72.629279999999994], [-22.29954, 72.184089999999998], [-24.27834, 72.597880000000004], [-24.792960000000001, 72.330200000000005], [-23.442959999999999, 72.080160000000006], [-22.132809999999999, 71.468980000000002], [-21.75356, 70.663690000000003], [-23.53603, 70.471000000000004], [-24.307020000000001, 70.856489999999994], [-25.543410000000002, 71.430940000000007], [-25.201350000000001, 70.752260000000007], [-26.362760000000002, 70.226460000000003], [-23.727419999999999, 70.184010000000001], [-22.349019999999999, 70.129459999999995], [-25.02927, 69.258799999999994], [-27.74737, 68.470460000000003], [-30.67371, 68.125029999999995], [-31.77665, 68.120779999999996], [-32.811050000000002, 67.735470000000007], [-34.20196, 66.679739999999995], [-36.35284, 65.978899999999996], [-37.043779999999998, 65.93768], [-38.375050000000002, 65.692130000000006], [-39.812220000000003, 65.458479999999994], [-40.668990000000001, 64.839969999999994], [-40.682810000000003, 64.139020000000002], [-41.188699999999997, 63.482460000000003], [-42.819380000000002, 62.68233], [-42.41666, 61.900930000000002], [-42.866190000000003, 61.074039999999997], [-43.378399999999999, 60.097720000000002], [-44.787500000000001, 60.036760000000001], [-46.263640000000002, 60.853279999999998], [-48.26294, 60.858429999999998], [-49.233080000000001, 61.40681], [-49.900390000000002, 62.383360000000003], [-51.633249999999997, 63.626910000000002], [-52.140140000000002, 64.278419999999997], [-52.276589999999999, 65.176699999999997], [-53.661659999999998, 66.09957], [-53.301609999999997, 66.836500000000001], [-53.969110000000001, 67.188990000000004], [-52.980400000000003, 68.357590000000002], [-51.475360000000002, 68.729579999999999], [-51.080410000000001, 69.147810000000007], [-50.871220000000001, 69.929100000000005], [-52.013584999999999, 69.574924999999993], [-52.557920000000003, 69.426159999999996], [-53.456290000000003, 69.283625000000001], [-54.68336, 69.610029999999995], [-54.750010000000003, 70.289320000000004], [-54.358840000000001, 70.821314999999998], [-53.431314999999998, 70.835755000000006], [-51.390140000000002, 70.569779999999994], [-53.109369999999998, 71.204849999999993], [-54.004219999999997, 71.547190000000001], [-55, 71.406537], [-55.834679999999999, 71.654439999999994], [-54.71819, 72.586250000000007], [-55.326340000000002, 72.958609999999993], [-56.12003, 73.649770000000004], [-57.323630000000001, 74.710260000000005], [-58.596789999999999, 75.098609999999994], [-58.585160000000002, 75.517269999999996], [-61.268610000000002, 76.102379999999997], [-63.391649999999998, 76.175200000000004], [-66.064269999999993, 76.134860000000003], [-68.504379999999998, 76.061409999999995], [-69.664850000000001, 76.379750000000001], [-71.402569999999997, 77.008570000000006], [-68.776709999999994, 77.323120000000003], [-66.76397, 77.375950000000003], [-71.042929999999998, 77.635949999999994], [-73.296999999999997, 78.04419], [-73.159379999999999, 78.43271], [-69.373450000000005, 78.913880000000006], [-65.710700000000003, 79.394360000000006], [-65.323899999999995, 79.758139999999997], [-68.022980000000004, 80.11721], [-67.151290000000003, 80.515820000000005], [-63.689250000000001, 81.21396], [-62.234439999999999, 81.321100000000001], [-62.651159999999997, 81.770420000000001], [-60.282490000000003, 82.033630000000002], [-57.207439999999998, 82.190740000000005], [-54.134419999999999, 82.199619999999996], [-53.043280000000003, 81.888329999999996], [-50.390610000000002, 82.438829999999996], [-48.003860000000003, 82.064809999999994], [-46.59984, 81.985945000000001], [-44.523000000000003, 81.660700000000006], [-46.900700000000001, 82.199789999999993], [-46.76379, 82.627960000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0440\u0435\u043d\u043b\u0430\u043d\u0434\u0438\u044f", "fr": "Groenland", "en": "Greenland", "nl": "Groenland", "pt": "Gronel\u00e2ndia", "no": "Gr\u00f8nland", "de": "Gr\u00f6nland", "it": "Groenlandia", "sv": "Gr\u00f6nland", "pl": "Grenlandia", "fi": "Gr\u00f6nlanti", "zh": "\u683c\u9675\u5170", "ja": "\u30b0\u30ea\u30fc\u30f3\u30e9\u30f3\u30c9", "es": "Groenlandia"}, "label_fr": "Groenland", "name": "Greenland", "dbpedia_uri": "http://dbpedia.org/resource/Greenland"}, "id": "GRL"}, {"geometry": {"type": "Polygon", "coordinates": [[[-90.095555000000004, 13.735338], [-90.608624000000006, 13.909770999999999], [-91.232410000000002, 13.927832], [-91.689746999999997, 14.126218], [-92.22775, 14.538829], [-92.203230000000005, 14.830102999999999], [-92.087215999999998, 15.064584999999999], [-92.229248999999996, 15.251447000000001], [-91.747960000000006, 16.066565000000001], [-90.464472999999998, 16.069562000000001], [-90.438867000000002, 16.41011], [-90.600847000000002, 16.470777999999999], [-90.711821999999998, 16.687483], [-91.081670000000003, 16.918476999999999], [-91.453920999999994, 17.252177], [-91.002268999999998, 17.254657999999999], [-91.001519999999999, 17.817595000000001], [-90.067933999999994, 17.819326], [-89.143079999999998, 17.808319000000001], [-89.150806000000003, 17.015577], [-89.229122000000004, 15.886938000000001], [-88.930612999999994, 15.887273], [-88.604585999999998, 15.706379999999999], [-88.518364000000005, 15.855389000000001], [-88.225022999999993, 15.727722], [-88.680679999999995, 15.346247], [-89.154810999999995, 15.066419], [-89.225219999999993, 14.874286], [-89.145534999999995, 14.678019000000001], [-89.353325999999996, 14.424132999999999], [-89.587343000000004, 14.362586], [-89.534218999999993, 14.244816], [-89.721934000000005, 14.134228], [-90.064678000000001, 13.881970000000001], [-90.095555000000004, 13.735338]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0432\u0430\u0442\u0435\u043c\u0430\u043b\u0430", "fr": "Guatemala", "en": "Guatemala", "nl": "Guatemala", "pt": "Guatemala", "no": "Guatemala", "de": "Guatemala", "it": "Guatemala", "sv": "Guatemala", "pl": "Gwatemala", "fi": "Guatemala", "zh": "\u5371\u5730\u9a6c\u62c9", "ja": "\u30b0\u30a2\u30c6\u30de\u30e9", "es": "Guatemala"}, "label_fr": "Guatemala", "name": "Guatemala", "dbpedia_uri": "http://dbpedia.org/resource/Guatemala"}, "id": "GTM"}, {"geometry": {"type": "Polygon", "coordinates": [[[-59.758285000000001, 8.3670349999999996], [-59.101683999999999, 7.9992020000000004], [-58.482962000000001, 7.3476910000000002], [-58.454875999999999, 6.8327869999999997], [-58.078102999999999, 6.809094], [-57.542219000000003, 6.3212679999999999], [-57.147435999999999, 5.9731500000000004], [-57.307245999999999, 5.0735669999999997], [-57.914288999999997, 4.8126259999999998], [-57.860210000000002, 4.5768009999999997], [-58.044694, 4.0608639999999996], [-57.601568999999998, 3.3346550000000001], [-57.281433, 3.3334920000000001], [-57.150098, 2.7689270000000001], [-56.539386, 1.8995230000000001], [-56.782704000000003, 1.8637109999999999], [-57.335822999999998, 1.9485380000000001], [-57.660971000000004, 1.682585], [-58.11345, 1.5071950000000001], [-58.429476999999999, 1.4639420000000001], [-58.540013000000002, 1.2680880000000001], [-59.030861999999999, 1.317698], [-59.646044000000003, 1.786894], [-59.718546000000003, 2.2496299999999998], [-59.974525, 2.755233], [-59.815412999999999, 3.6064989999999999], [-59.538040000000002, 3.9588030000000001], [-59.767406000000001, 4.4235030000000002], [-60.111001999999999, 4.574967], [-59.980958999999999, 5.0140609999999999], [-60.213683000000003, 5.2444860000000002], [-60.733573999999997, 5.2002769999999998], [-61.410302999999999, 5.9590680000000003], [-61.139415, 6.2342969999999998], [-61.159336000000003, 6.6960769999999998], [-60.543998999999999, 6.8565839999999998], [-60.295667999999999, 7.0439109999999996], [-60.637973000000002, 7.415], [-60.550587999999998, 7.7796029999999998], [-59.758285000000001, 8.3670349999999996]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0430\u0439\u0430\u043d\u0430", "fr": "Guyana", "en": "Guyana", "nl": "Guyana", "pt": "Guiana", "no": "Guyana", "de": "Guyana", "it": "Guyana", "sv": "Guyana", "pl": "Gujana", "fi": "Guyana", "zh": "\u572d\u4e9a\u90a3", "ja": "\u30ac\u30a4\u30a2\u30ca", "es": "Guyana"}, "label_fr": "Guyana", "name": "Guyana", "dbpedia_uri": "http://dbpedia.org/resource/Guyana"}, "id": "GUY"}, {"geometry": {"type": "Polygon", "coordinates": [[[-87.316654, 12.984686], [-87.489408999999995, 13.297535], [-87.793110999999996, 13.38448], [-87.723502999999994, 13.78505], [-87.859515000000002, 13.893312], [-88.065342999999999, 13.964626000000001], [-88.503997999999996, 13.845485999999999], [-88.541230999999996, 13.980155], [-88.843073000000004, 14.140506999999999], [-89.058511999999993, 14.340028999999999], [-89.353325999999996, 14.424132999999999], [-89.145534999999995, 14.678019000000001], [-89.225219999999993, 14.874286], [-89.154810999999995, 15.066419], [-88.680679999999995, 15.346247], [-88.225022999999993, 15.727722], [-88.121153000000007, 15.688655000000001], [-87.901813000000004, 15.864458000000001], [-87.615679999999998, 15.878799000000001], [-87.522920999999997, 15.797279], [-87.367761999999999, 15.84694], [-86.903191000000007, 15.756713], [-86.440945999999997, 15.782835], [-86.119234000000006, 15.893449], [-86.001953999999998, 16.005406000000001], [-85.683317000000002, 15.953652], [-85.444004000000007, 15.885749000000001], [-85.182444000000004, 15.909158], [-84.983722, 15.995922999999999], [-84.526979999999995, 15.857224], [-84.368256000000002, 15.835158], [-84.063055000000006, 15.648244], [-83.773977000000002, 15.424072000000001], [-83.410381000000001, 15.270903000000001], [-83.147219000000007, 14.995829000000001], [-83.489988999999994, 15.016266999999999], [-83.628585000000001, 14.880074], [-83.975720999999993, 14.749435999999999], [-84.228341999999998, 14.748764], [-84.449336000000002, 14.621613999999999], [-84.649581999999995, 14.666805], [-84.820036999999999, 14.819587], [-84.924501000000006, 14.790493], [-85.052786999999995, 14.551541], [-85.148751000000004, 14.560197000000001], [-85.165364999999994, 14.354369999999999], [-85.514413000000005, 14.079012000000001], [-85.698665000000005, 13.960077999999999], [-85.801294999999996, 13.836055], [-86.096264000000005, 14.038187000000001], [-86.312141999999994, 13.771356000000001], [-86.520707999999999, 13.778487], [-86.755087000000003, 13.754845], [-86.733822000000004, 13.263093], [-86.880556999999996, 13.254204], [-87.005769000000001, 13.025793999999999], [-87.316654, 12.984686]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u043e\u043d\u0434\u0443\u0440\u0430\u0441", "fr": "Honduras", "en": "Honduras", "nl": "Honduras", "pt": "Honduras", "no": "Honduras", "de": "Honduras", "it": "Honduras", "sv": "Honduras", "pl": "Honduras", "fi": "Honduras", "zh": "\u6d2a\u90fd\u62c9\u65af", "ja": "\u30db\u30f3\u30b8\u30e5\u30e9\u30b9", "es": "Honduras"}, "label_fr": "Honduras", "name": "Honduras", "dbpedia_uri": "http://dbpedia.org/resource/Honduras"}, "id": "HND"}, {"geometry": {"type": "Polygon", "coordinates": [[[18.829837999999999, 45.908878000000001], [19.072769000000001, 45.521510999999997], [19.390476, 45.236516000000002], [19.005486000000001, 44.860233999999998], [18.553214000000001, 45.081589999999998], [17.861782999999999, 45.067740000000001], [17.002146, 45.233777000000003], [16.534939000000001, 45.211607999999998], [16.318156999999999, 45.004126999999997], [15.959367, 45.233777000000003], [15.750026, 44.818711999999998], [16.239660000000001, 44.351143], [16.456443, 44.041240000000002], [16.916156000000001, 43.667721999999998], [17.297373, 43.446340999999997], [17.674921999999999, 43.028562999999998], [18.559999999999999, 42.649999999999999], [18.450016000000002, 42.479990999999998], [17.509969999999999, 42.849995], [16.930005999999999, 43.209997999999999], [16.015384999999998, 43.507215000000002], [15.174454000000001, 44.243191000000003], [15.376250000000001, 44.317914999999999], [14.920309, 44.738484], [14.901602, 45.076059999999998], [14.258748000000001, 45.233777000000003], [13.952254999999999, 44.802123999999999], [13.656976, 45.136935000000001], [13.679403000000001, 45.484149000000002], [13.715059999999999, 45.500323999999999], [14.411968, 45.466166000000001], [14.595109000000001, 45.634940999999998], [14.935244000000001, 45.471694999999997], [15.327674999999999, 45.452316000000003], [15.323954000000001, 45.731783], [15.671530000000001, 45.834153999999998], [15.768732999999999, 46.238107999999997], [16.564807999999999, 46.503751000000001], [16.882515000000001, 46.380631999999999], [17.630065999999999, 45.951768999999999], [18.456061999999999, 45.759481000000001], [18.829837999999999, 45.908878000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0425\u043e\u0440\u0432\u0430\u0442\u0438\u044f", "fr": "Croatie", "en": "Croatia", "nl": "Kroati\u00eb", "pt": "Cro\u00e1cia", "no": "Kroatia", "de": "Kroatien", "it": "Croazia", "sv": "Kroatien", "pl": "Chorwacja", "fi": "Kroatia", "zh": "\u514b\u7f57\u5730\u4e9a", "ja": "\u30af\u30ed\u30a2\u30c1\u30a2", "es": "Croacia"}, "label_fr": "Croatie", "name": "Croatia", "dbpedia_uri": "http://dbpedia.org/resource/Croatia"}, "id": "HRV"}, {"geometry": {"type": "Polygon", "coordinates": [[[-73.189791, 19.915683999999999], [-72.579673, 19.871500999999999], [-71.712361000000001, 19.714455999999998], [-71.624872999999994, 19.169837999999999], [-71.701302999999996, 18.785416999999999], [-71.945111999999995, 18.616900000000001], [-71.687737999999996, 18.316659999999999], [-71.708304999999996, 18.044996999999999], [-72.372476000000006, 18.214960999999999], [-72.844410999999994, 18.145610999999999], [-73.454554999999999, 18.217905999999999], [-73.922432999999998, 18.030992999999999], [-74.458033999999998, 18.342549999999999], [-74.369924999999995, 18.664908], [-73.449541999999994, 18.526053000000001], [-72.694936999999996, 18.445799000000001], [-72.334881999999993, 18.668422], [-72.791650000000004, 19.101624999999999], [-72.784104999999997, 19.483591000000001], [-73.415021999999993, 19.639551000000001], [-73.189791, 19.915683999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u0413\u0430\u0438\u0442\u0438", "fr": "Ha\u00efti", "en": "Haiti", "nl": "Ha\u00efti", "pt": "Haiti", "no": "Haiti", "de": "Haiti", "it": "Haiti", "sv": "Haiti", "pl": "Haiti", "fi": "Haiti", "zh": "\u6d77\u5730", "ja": "\u30cf\u30a4\u30c1", "es": "Hait\u00ed"}, "label_fr": "Ha\u00efti", "name": "Haiti", "dbpedia_uri": "http://dbpedia.org/resource/Haiti"}, "id": "HTI"}, {"geometry": {"type": "Polygon", "coordinates": [[[16.202297999999999, 46.852386000000003], [16.534268000000001, 47.496170999999997], [16.340584, 47.712902], [16.903753999999999, 47.714866000000001], [16.979666999999999, 48.123497], [17.488472999999999, 47.867466], [17.857133000000001, 47.758429], [18.696512999999999, 47.880954000000003], [18.777024999999998, 48.081767999999997], [19.174365000000002, 48.111378999999999], [19.661363999999999, 48.266615000000002], [19.769470999999999, 48.202691000000002], [20.239053999999999, 48.327567000000002], [20.473562000000001, 48.562849999999997], [20.801293999999999, 48.623854000000001], [21.872236000000001, 48.319971000000002], [22.085608000000001, 48.422263999999998], [22.640820000000001, 48.150239999999997], [22.710531, 47.882193999999998], [22.099768000000001, 47.672438999999997], [21.626515000000001, 46.994238000000003], [21.021951999999999, 46.316088000000001], [20.220192000000001, 46.127468999999998], [19.596045, 46.171729999999997], [18.829837999999999, 45.908878000000001], [18.456061999999999, 45.759481000000001], [17.630065999999999, 45.951768999999999], [16.882515000000001, 46.380631999999999], [16.564807999999999, 46.503751000000001], [16.370505000000001, 46.841327], [16.202297999999999, 46.852386000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0412\u0435\u043d\u0433\u0440\u0438\u044f", "fr": "Hongrie", "en": "Hungary", "nl": "Hongarije", "pt": "Hungria", "no": "Ungarn", "de": "Ungarn", "it": "Ungheria", "sv": "Ungern", "pl": "W\u0119gry", "fi": "Unkari", "zh": "\u5308\u7259\u5229", "ja": "\u30cf\u30f3\u30ac\u30ea\u30fc", "es": "Hungr\u00eda"}, "label_fr": "Hongrie", "name": "Hungary", "dbpedia_uri": "http://dbpedia.org/resource/Hungary"}, "id": "HUN"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[120.715609, -10.239580999999999], [120.29501399999999, -10.258649999999999], [118.96780800000001, -9.5579689999999999], [119.90031, -9.3613400000000002], [120.42575600000001, -9.6659210000000009], [120.775502, -9.9696750000000005], [120.715609, -10.239580999999999]]], [[[124.43595000000001, -10.140001], [123.579982, -10.359987], [123.45998899999999, -10.239995], [123.550009, -9.9000160000000008], [123.980009, -9.2900270000000003], [124.968682, -8.8927899999999998], [125.07002, -9.0899870000000007], [125.08852, -9.3931730000000009], [124.43595000000001, -10.140001]]], [[[117.900018, -8.0956810000000008], [118.260616, -8.3623829999999995], [118.87846, -8.2806829999999998], [119.126507, -8.7058250000000008], [117.97040200000001, -8.9066390000000002], [117.277731, -9.0408950000000008], [116.74014099999999, -9.0329370000000004], [117.083737, -8.4571579999999997], [117.632024, -8.4493030000000005], [117.900018, -8.0956810000000008]]], [[[122.903537, -8.0942340000000002], [122.75698300000001, -8.6498080000000002], [121.254491, -8.9336660000000006], [119.924391, -8.8104180000000003], [119.920929, -8.4448589999999992], [120.715092, -8.2369649999999996], [121.341669, -8.53674], [122.00736499999999, -8.4606200000000005], [122.903537, -8.0942340000000002]]], [[[108.623479, -6.7776740000000002], [110.539227, -6.8773580000000001], [110.759576, -6.4651860000000001], [112.614811, -6.9460360000000003], [112.978768, -7.5942129999999999], [114.47893500000001, -7.7765279999999999], [115.705527, -8.3708069999999992], [114.564511, -8.7518170000000008], [113.46473400000001, -8.3489470000000008], [112.55967200000001, -8.3761810000000008], [111.52206099999999, -8.3021290000000008], [110.58615, -8.1226050000000001], [109.427667, -7.7406639999999998], [108.69365500000001, -7.6416000000000004], [108.27776299999999, -7.7666570000000004], [106.45410200000001, -7.3548999999999998], [106.280624, -6.9249000000000001], [105.365486, -6.8514160000000004], [106.05164600000001, -5.8959190000000001], [107.26500900000001, -5.9549849999999998], [108.072091, -6.3457619999999997], [108.486846, -6.4219850000000003], [108.623479, -6.7776740000000002]]], [[[134.72462400000001, -6.2144009999999996], [134.21013400000001, -6.895238], [134.112776, -6.1424669999999999], [134.290336, -5.7830579999999996], [134.49962500000001, -5.4450419999999999], [134.727002, -5.7375819999999997], [134.72462400000001, -6.2144009999999996]]], [[[127.24921500000001, -3.4590649999999998], [126.874923, -3.7909830000000002], [126.183802, -3.6073759999999999], [125.989034, -3.177273], [127.000651, -3.129318], [127.24921500000001, -3.4590649999999998]]], [[[130.47134399999999, -3.0937640000000002], [130.834836, -3.8584719999999999], [129.99054699999999, -3.4463010000000001], [129.155249, -3.3626369999999999], [128.59068400000001, -3.4286789999999998], [127.89889100000001, -3.3934359999999999], [128.13587899999999, -2.8436499999999998], [129.37099799999999, -2.8021539999999998], [130.47134399999999, -3.0937640000000002]]], [[[134.14336800000001, -1.151867], [134.42262700000001, -2.7691849999999998], [135.45760300000001, -3.367753], [136.29331400000001, -2.307042], [137.44073800000001, -1.7035130000000001], [138.32972699999999, -1.7026859999999999], [139.184921, -2.0512959999999998], [139.92668399999999, -2.409052], [141.00021000000001, -2.6001509999999999], [141.01705699999999, -5.8590220000000004], [141.033852, -9.1178930000000005], [140.143415, -8.2971679999999992], [139.12776700000001, -8.0960429999999999], [138.88147699999999, -8.3809349999999991], [137.614474, -8.411683], [138.03909899999999, -7.5978820000000002], [138.668621, -7.3202249999999998], [138.40791400000001, -6.2328489999999999], [137.92784, -5.3933660000000003], [135.98925, -4.5465439999999999], [135.16459800000001, -4.4629310000000002], [133.66288, -3.538853], [133.367705, -4.0248189999999999], [132.98395600000001, -4.1129790000000002], [132.75694100000001, -3.746283], [132.75378900000001, -3.3117869999999998], [131.98980399999999, -2.820551], [133.066845, -2.4604180000000002], [133.78003100000001, -2.4798480000000001], [133.696212, -2.2145419999999998], [132.232373, -2.212526], [131.83622199999999, -1.617162], [130.94283999999999, -1.4325220000000001], [130.51955799999999, -0.93772], [131.867538, -0.695461], [132.38011599999999, -0.36953799999999998], [133.98554799999999, -0.78020999999999996], [134.14336800000001, -1.151867]]], [[[125.24050099999999, 1.4198360000000001], [124.43703499999999, 0.42788100000000001], [123.68550500000001, 0.235593], [122.723083, 0.43113699999999999], [121.056725, 0.38121699999999997], [120.183083, 0.23724700000000001], [120.04087, -0.51965799999999995], [120.93590500000001, -1.408906], [121.475821, -0.95596199999999998], [123.340565, -0.61567300000000003], [123.258399, -1.0762130000000001], [122.822715, -0.93095099999999997], [122.38853, -1.516858], [121.508274, -1.9044829999999999], [122.454572, -3.1860580000000001], [122.271896, -3.5295000000000001], [123.170963, -4.6836929999999999], [123.162333, -5.3406039999999999], [122.62851499999999, -5.6345910000000003], [122.236394, -5.2829329999999999], [122.71956900000001, -4.4641719999999996], [121.73823400000001, -4.8513310000000001], [121.489463, -4.5745529999999999], [121.61917099999999, -4.1884779999999999], [120.89818200000001, -3.6021049999999999], [120.97238900000001, -2.627643], [120.305453, -2.9316040000000001], [120.390047, -4.0975789999999996], [120.430717, -5.5282410000000004], [119.796543, -5.6734], [119.366906, -5.3798779999999997], [119.653606, -4.4594170000000002], [119.498835, -3.4944120000000001], [119.078344, -3.4870220000000001], [118.767769, -2.8019989999999999], [119.18097400000001, -2.1471040000000001], [119.32339399999999, -1.3531470000000001], [119.825999, 0.154254], [120.035702, 0.56647700000000001], [120.885779, 1.309223], [121.66681699999999, 1.013944], [122.927567, 0.87519199999999997], [124.077522, 0.91710199999999997], [125.065989, 1.643259], [125.24050099999999, 1.4198360000000001]]], [[[128.68824900000001, 1.1323859999999999], [128.635952, 0.25848599999999999], [128.12017, 0.35641299999999998], [127.968034, -0.252077], [128.379999, -0.78000400000000003], [128.10001600000001, -0.89999600000000002], [127.69647500000001, -0.266598], [127.39949, 1.011722], [127.60051199999999, 1.8106910000000001], [127.932378, 2.1745960000000002], [128.00415599999999, 1.628531], [128.594559, 1.5408109999999999], [128.68824900000001, 1.1323859999999999]]], [[[117.87562699999999, 1.8276410000000001], [118.996747, 0.90221899999999999], [117.811858, 0.78424199999999999], [117.47833900000001, 0.102475], [117.52164399999999, -0.80372299999999997], [116.56004799999999, -1.4876609999999999], [116.53379700000001, -2.483517], [116.148084, -4.0127259999999998], [116.00085799999999, -3.6570369999999999], [114.86480299999999, -4.1069839999999997], [114.46865200000001, -3.4957039999999999], [113.755672, -3.4391699999999998], [113.25699400000001, -3.118776], [112.06812600000001, -3.4783919999999999], [111.70329099999999, -2.9944419999999998], [111.04824000000001, -3.049426], [110.22384599999999, -2.9340320000000002], [110.070936, -1.5928739999999999], [109.57194800000001, -1.314907], [109.091874, -0.459507], [108.952658, 0.41537499999999999], [109.069136, 1.341934], [109.66325999999999, 2.0064669999999998], [109.83022699999999, 1.338136], [110.514061, 0.77313100000000001], [111.159138, 0.97647799999999996], [111.79754800000001, 0.90444100000000005], [112.380252, 1.410121], [112.859809, 1.49779], [113.80585000000001, 1.217549], [114.62135499999999, 1.430688], [115.13403700000001, 2.821482], [115.51907799999999, 3.169238], [115.865517, 4.306559], [117.015214, 4.3060939999999999], [117.882035, 4.1375510000000002], [117.313232, 3.2344279999999999], [118.04833000000001, 2.28769], [117.87562699999999, 1.8276410000000001]]], [[[105.817655, -5.8523560000000003], [104.710384, -5.8732850000000001], [103.868213, -5.0373150000000004], [102.584261, -4.2202590000000004], [102.156173, -3.6141459999999999], [101.399113, -2.7997770000000002], [100.902503, -2.050262], [100.141981, -0.65034800000000004], [99.263739999999999, 0.183142], [98.970011, 1.0428820000000001], [98.601350999999994, 1.823507], [97.699597999999995, 2.4531839999999998], [97.176941999999997, 3.3087909999999998], [96.424017000000006, 3.8688600000000002], [95.380876000000001, 4.9707819999999998], [95.293025999999998, 5.4798210000000003], [95.936863000000002, 5.4395129999999998], [97.484881999999999, 5.246321], [98.369168999999999, 4.26837], [99.142559000000006, 3.5903499999999999], [99.693997999999993, 3.1743290000000002], [100.641434, 2.0993810000000002], [101.658012, 2.0836969999999999], [102.498271, 1.3987000000000001], [103.07684, 0.561361], [103.838396, 0.104542], [103.437645, -0.71194599999999997], [104.010789, -1.059212], [104.369991, -1.084843], [104.53949, -1.7823720000000001], [104.88789300000001, -2.3404250000000002], [105.622111, -2.4288439999999998], [106.108593, -3.0617770000000002], [105.857446, -4.3055250000000003], [105.817655, -5.8523560000000003]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u043d\u0434\u043e\u043d\u0435\u0437\u0438\u044f", "fr": "Indon\u00e9sie", "en": "Indonesia", "nl": "Indonesi\u00eb", "pt": "Indon\u00e9sia", "no": "Indonesia", "de": "Indonesien", "it": "Indonesia", "sv": "Indonesien", "pl": "Indonezja", "fi": "Indonesia", "zh": "\u5370\u5ea6\u5c3c\u897f\u4e9a", "ja": "\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2", "es": "Indonesia"}, "label_fr": "Indon\u00e9sie", "name": "Indonesia", "dbpedia_uri": "http://dbpedia.org/resource/Indonesia"}, "id": "IDN"}, {"geometry": {"type": "Polygon", "coordinates": [[[77.837451000000001, 35.494010000000003], [78.912268999999995, 34.321936000000001], [78.811086000000003, 33.506197999999998], [79.208892000000006, 32.994394999999997], [79.176129000000003, 32.483780000000003], [78.458445999999995, 32.618164], [78.738894000000002, 31.515906000000001], [79.721367000000001, 30.882715000000001], [81.111255999999997, 30.183481], [80.476720999999998, 29.729865], [80.088425000000001, 28.79447], [81.057203000000001, 28.416094999999999], [81.999987000000004, 27.925478999999999], [83.304248999999999, 27.364505999999999], [84.675017999999994, 27.234901000000001], [85.251778999999999, 26.726198], [86.024393000000003, 26.630984999999999], [87.227472000000006, 26.397898000000001], [88.060237999999998, 26.414615000000001], [88.174803999999995, 26.810404999999999], [88.043132999999997, 27.445819], [88.120441, 27.876542000000001], [88.730326000000005, 28.086865], [88.814248000000006, 27.299316000000001], [88.835643000000005, 27.098966000000001], [89.744528000000003, 26.719403], [90.373275000000007, 26.875724000000002], [91.217512999999997, 26.808648000000002], [92.033484000000001, 26.83831], [92.103712000000002, 27.452614000000001], [91.696657000000002, 27.771742], [92.503118999999998, 27.896875999999999], [93.413347999999999, 28.640629000000001], [94.565989999999999, 29.277438], [95.404802000000004, 29.031717], [96.117678999999995, 29.452801999999998], [96.586590999999999, 28.83098], [96.248833000000005, 28.411031000000001], [97.327113999999995, 28.261583000000002], [97.402561000000006, 27.882536000000002], [97.051989000000006, 27.699058999999998], [97.133999000000003, 27.083773999999998], [96.419365999999997, 27.264589000000001], [95.124768000000003, 26.573571999999999], [95.155152999999999, 26.001307000000001], [94.603249000000005, 25.162495], [94.552657999999994, 24.675238], [94.106741999999997, 23.850740999999999], [93.325187999999997, 24.078555999999999], [93.286327, 23.043658000000001], [93.060293999999999, 22.703111], [93.166128, 22.278459999999999], [92.672720999999996, 22.041239000000001], [92.146034999999998, 23.627499], [91.869928000000002, 23.624345999999999], [91.706474999999998, 22.985264000000001], [91.158963, 23.503526999999998], [91.467730000000003, 24.072638999999999], [91.915092999999999, 24.130413999999998], [92.376202000000006, 24.976693000000001], [91.799595999999994, 25.147431999999998], [90.872210999999993, 25.132601000000001], [89.920693, 25.269749999999998], [89.832481000000001, 25.965081999999999], [89.355093999999994, 26.014406999999999], [88.563049000000007, 26.446525999999999], [88.209789000000001, 25.768066000000001], [88.931554000000006, 25.238692], [88.306372999999994, 24.866078999999999], [88.084422000000004, 24.501657000000002], [88.699939999999998, 24.233715], [88.529769999999999, 23.631142000000001], [88.876311999999999, 22.879145999999999], [89.031960999999995, 22.055707999999999], [88.888766000000004, 21.690588000000002], [88.208496999999994, 21.703171999999999], [86.975703999999993, 21.495562], [87.033169000000001, 20.743307999999999], [86.499351000000004, 20.151637999999998], [85.060265999999999, 19.478579], [83.941006000000002, 18.302009999999999], [83.189216999999999, 17.671220999999999], [82.192791999999997, 17.016635999999998], [82.191242000000003, 16.556664000000001], [81.692718999999997, 16.310219], [80.791999000000004, 15.951972], [80.324895999999995, 15.899184999999999], [80.025069000000002, 15.136415], [80.233273999999994, 13.835770999999999], [80.286293999999998, 13.006261], [79.862547000000006, 12.056215], [79.857999000000007, 10.357275], [79.340512000000004, 10.308854], [78.885345000000001, 9.5461360000000006], [79.189719999999994, 9.2165440000000007], [78.277940999999998, 8.9330470000000002], [77.941164999999998, 8.2529590000000006], [77.539897999999994, 7.965535], [76.592979, 8.8992760000000004], [76.130060999999998, 10.299630000000001], [75.746466999999996, 11.308251], [75.396101000000002, 11.781245], [74.864816000000005, 12.741936000000001], [74.616716999999994, 13.992583], [74.443859000000003, 14.617222], [73.534199000000001, 15.990652000000001], [73.119909000000007, 17.928570000000001], [72.820909, 19.208234000000001], [72.824475000000007, 20.419502999999999], [72.630533, 21.356009], [71.175273000000004, 20.757441], [70.470459000000005, 20.877331000000002], [69.16413, 22.089297999999999], [69.644927999999993, 22.450775], [69.349597000000003, 22.84318], [68.176644999999994, 23.691965], [68.842599000000007, 24.359134000000001], [71.043239999999997, 24.356524], [70.844699000000006, 25.215102000000002], [70.282872999999995, 25.722228999999999], [70.168926999999996, 26.491872000000001], [69.514392999999998, 26.940966], [70.616495999999998, 27.989196], [71.777665999999996, 27.913180000000001], [72.823751999999999, 28.961592], [73.450637999999998, 29.976413000000001], [74.421379999999999, 30.979814999999999], [74.405929, 31.692639], [75.258641999999995, 32.271104999999999], [74.451559000000003, 32.764899999999997], [74.104293999999996, 33.441473000000002], [73.749948000000003, 34.317698999999998], [74.240202999999994, 34.748887000000003], [75.757060999999993, 34.504922999999998], [76.871722000000005, 34.653543999999997], [77.837451000000001, 35.494010000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u043d\u0434\u0438\u044f", "fr": "Inde", "en": "India", "nl": "India", "pt": "\u00cdndia", "no": "India", "de": "Indien", "it": "India", "sv": "Indien", "pl": "Indie", "fi": "Intia", "zh": "\u5370\u5ea6", "ja": "\u30a4\u30f3\u30c9", "es": "India"}, "label_fr": "Inde", "name": "India", "dbpedia_uri": "http://dbpedia.org/resource/India"}, "id": "IND"}, {"geometry": {"type": "Polygon", "coordinates": [[[-6.1978850000000003, 53.867564999999999], [-6.032985, 53.153163999999997], [-6.7888570000000001, 52.260117999999999], [-8.561617, 51.669300999999997], [-9.9770859999999999, 51.820455000000003], [-9.166283, 52.864629000000001], [-9.6885250000000003, 53.881363], [-8.3279870000000003, 54.664518999999999], [-7.5721679999999996, 55.131622], [-7.3660310000000004, 54.595841], [-7.5721679999999996, 54.059956], [-6.9537300000000002, 54.073701999999997], [-6.1978850000000003, 53.867564999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u0440\u043b\u0430\u043d\u0434\u0438\u044f (\u043e\u0441\u0442\u0440\u043e\u0432)", "fr": "Irlande (\u00eele)", "en": "Ireland", "nl": "Ierland (eiland)", "pt": "Irlanda (ilha)", "no": "Irland (\u00f8y)", "de": "Irland (Insel)", "it": "Irlanda (isola)", "pl": "Irlandia (wyspa)", "fi": "Irlanti (saari)", "zh": "\u7231\u5c14\u5170\u5c9b", "ja": "\u30a2\u30a4\u30eb\u30e9\u30f3\u30c9\u5cf6", "es": "Irlanda (isla)"}, "label_fr": "Irlande (\u00eele)", "name": "Ireland", "dbpedia_uri": "http://dbpedia.org/resource/Ireland"}, "id": "IRL"}, {"geometry": {"type": "Polygon", "coordinates": [[[53.921598000000003, 37.198917999999999], [54.800303999999997, 37.392420999999999], [55.511578, 37.964117000000002], [56.180374999999998, 37.935127000000001], [56.619365999999999, 38.121394000000002], [57.330433999999997, 38.029229000000001], [58.436154000000002, 37.522309], [59.234762000000003, 37.412987999999999], [60.377637999999997, 36.527383], [61.123071000000003, 36.491596999999999], [61.210816999999999, 35.650072000000002], [60.803193, 34.404102000000002], [60.52843, 33.676445999999999], [60.963700000000003, 33.528832000000001], [60.536078000000003, 32.981268999999998], [60.863655000000001, 32.182920000000003], [60.941944999999997, 31.548075000000001], [61.699314000000001, 31.379505999999999], [61.781222, 30.735849999999999], [60.874248000000001, 29.829239000000001], [61.369309000000001, 29.303276], [61.771867999999998, 28.699334], [62.727829999999997, 28.259644999999999], [62.755426, 27.378923], [63.233898000000003, 27.217047000000001], [63.316631999999998, 26.756532], [61.874186999999999, 26.239975000000001], [61.497363, 25.078237000000001], [59.616134000000002, 25.380157000000001], [58.525761000000003, 25.609961999999999], [57.397250999999997, 25.739902000000001], [56.970765999999998, 26.966106], [56.492139000000002, 27.143305000000002], [55.723709999999997, 26.964632999999999], [54.715089999999996, 26.480657999999998], [53.493096999999999, 26.812369], [52.483598000000001, 27.580849000000001], [51.520763000000002, 27.865690000000001], [50.852947999999998, 28.814520999999999], [50.115009000000001, 30.147773000000001], [49.57685, 29.985714999999999], [48.941333, 30.31709], [48.567971, 29.926777999999999], [48.014567999999997, 30.452456999999999], [48.004697999999998, 30.985137000000002], [47.685285999999998, 30.984853000000001], [47.849204, 31.709175999999999], [47.334660999999997, 32.469155000000001], [46.109361999999997, 33.017287000000003], [45.416691, 33.967798000000002], [45.64846, 34.748137999999997], [46.151788000000003, 35.093259000000003], [46.076340000000002, 35.677382999999999], [45.420617999999997, 35.977545999999997], [44.772669999999998, 37.170450000000002], [44.225755999999997, 37.971584], [44.421402999999998, 38.281281], [44.109225000000002, 39.428136000000002], [44.793990000000001, 39.713003], [44.952688000000002, 39.335765000000002], [45.457721999999997, 38.874139], [46.143622999999998, 38.741200999999997], [46.505719999999997, 38.770605000000003], [47.685079000000002, 39.508364], [48.060094999999997, 39.582234999999997], [48.355528999999997, 39.288764999999998], [48.010744000000003, 38.794015000000002], [48.634374999999999, 38.270378000000001], [48.883248999999999, 38.320245], [49.199612000000002, 37.582873999999997], [50.147770999999999, 37.374566999999999], [50.842354, 36.872813999999998], [52.264024999999997, 36.700422000000003], [53.825789999999998, 36.965031000000003], [53.921598000000003, 37.198917999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u0440\u0430\u043d", "fr": "Iran", "en": "Iran", "nl": "Iran", "pt": "Ir\u00e3o", "no": "Iran", "de": "Iran", "it": "Iran", "sv": "Iran", "pl": "Iran", "fi": "Iran", "zh": "\u4f0a\u6717", "ja": "\u30a4\u30e9\u30f3", "es": "Ir\u00e1n"}, "label_fr": "Iran", "name": "Iran", "dbpedia_uri": "http://dbpedia.org/resource/Iran"}, "id": "IRN"}, {"geometry": {"type": "Polygon", "coordinates": [[[45.420617999999997, 35.977545999999997], [46.076340000000002, 35.677382999999999], [46.151788000000003, 35.093259000000003], [45.64846, 34.748137999999997], [45.416691, 33.967798000000002], [46.109361999999997, 33.017287000000003], [47.334660999999997, 32.469155000000001], [47.849204, 31.709175999999999], [47.685285999999998, 30.984853000000001], [48.004697999999998, 30.985137000000002], [48.014567999999997, 30.452456999999999], [48.567971, 29.926777999999999], [47.974519000000001, 29.975819000000001], [47.302622, 30.059069999999998], [46.568713000000002, 29.099025000000001], [44.709499000000001, 29.178891], [41.889980999999999, 31.190009], [40.399994, 31.889991999999999], [39.195467999999998, 32.161009], [38.792341, 33.378686000000002], [41.006158999999997, 34.419372000000003], [41.383965000000003, 35.628317000000003], [41.289707, 36.358815], [41.837063999999998, 36.605854000000001], [42.349590999999997, 37.229872999999998], [42.779125999999998, 37.385263999999999], [43.942259, 37.256228], [44.293452000000002, 37.001514], [44.772699000000003, 37.170445000000001], [45.420617999999997, 35.977545999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u0440\u0430\u043a", "fr": "Irak", "en": "Iraq", "nl": "Irak", "pt": "Iraque", "no": "Irak", "de": "Irak", "it": "Iraq", "sv": "Irak", "pl": "Irak", "fi": "Irak", "zh": "\u4f0a\u62c9\u514b", "ja": "\u30a4\u30e9\u30af", "es": "Irak"}, "label_fr": "Irak", "name": "Iraq", "dbpedia_uri": "http://dbpedia.org/resource/Iraq"}, "id": "IRQ"}, {"geometry": {"type": "Polygon", "coordinates": [[[-14.508694999999999, 66.455892000000006], [-14.739637, 65.808747999999994], [-13.609731999999999, 65.126671000000002], [-14.909834, 64.364081999999996], [-17.794438, 63.678749000000003], [-18.656245999999999, 63.496383000000002], [-19.972754999999999, 63.643635000000003], [-22.762972000000001, 63.960178999999997], [-21.778483999999999, 64.402116000000007], [-23.955044000000001, 64.891130000000004], [-22.184403, 65.084968000000003], [-22.227423000000002, 65.378594000000007], [-24.326184000000001, 65.611188999999996], [-23.650514999999999, 66.262518999999998], [-22.134922, 66.410469000000006], [-20.576284000000001, 65.732112000000001], [-19.056842, 66.276600999999999], [-17.798624, 65.993853000000001], [-16.167819000000001, 66.526792], [-14.508694999999999, 66.455892000000006]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u0441\u043b\u0430\u043d\u0434\u0438\u044f", "fr": "Islande", "en": "Iceland", "nl": "IJsland", "pt": "Isl\u00e2ndia", "no": "Island", "de": "Island", "it": "Islanda", "sv": "Island", "pl": "Islandia", "fi": "Islanti", "zh": "\u51b0\u5c9b", "ja": "\u30a2\u30a4\u30b9\u30e9\u30f3\u30c9", "es": "Islandia"}, "label_fr": "Islande", "name": "Iceland", "dbpedia_uri": "http://dbpedia.org/resource/Iceland"}, "id": "ISL"}, {"geometry": {"type": "Polygon", "coordinates": [[[35.719918, 32.709192000000002], [35.545665, 32.393991999999997], [35.183929999999997, 32.532511], [34.974640999999998, 31.866582000000001], [35.225892000000002, 31.754341], [34.970506999999998, 31.616778], [34.927408, 31.353435000000001], [35.397561000000003, 31.489086], [35.420918, 31.100066000000002], [34.922603000000002, 29.501325999999999], [34.265433000000002, 31.219360999999999], [34.556372000000003, 31.548824], [34.488106999999999, 31.605539], [34.752586999999998, 32.072926000000002], [34.955416999999997, 32.827376000000001], [35.098457000000003, 33.080539000000002], [35.126052999999999, 33.090899999999998], [35.460709000000001, 33.089039999999997], [35.552796999999998, 33.264274999999998], [35.821100999999999, 33.277425999999998], [35.836396999999998, 32.868122999999997], [35.700797999999999, 32.716014000000001], [35.719918, 32.709192000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u0437\u0440\u0430\u0438\u043b\u044c", "fr": "Isra\u00ebl", "en": "Israel", "nl": "Isra\u00ebl", "pt": "Israel", "no": "Israel", "de": "Israel", "it": "Israele", "sv": "Israel", "pl": "Izrael", "fi": "Israel", "zh": "\u4ee5\u8272\u5217", "ja": "\u30a4\u30b9\u30e9\u30a8\u30eb", "es": "Israel"}, "label_fr": "Isra\u00ebl", "name": "Israel", "dbpedia_uri": "http://dbpedia.org/resource/Israel"}, "id": "ISR"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[15.520376000000001, 38.231155000000001], [15.160242999999999, 37.444046], [15.309898, 37.134219000000002], [15.099988, 36.619987000000002], [14.335229, 36.996631000000001], [13.826733000000001, 37.104531000000001], [12.431004, 37.612949999999998], [12.570944000000001, 38.126381000000002], [13.741156, 38.034965999999997], [14.761248999999999, 38.143873999999997], [15.520376000000001, 38.231155000000001]]], [[[9.2100120000000008, 41.209991000000002], [9.8099749999999997, 40.500008999999999], [9.6695189999999993, 39.177376000000002], [9.2148179999999993, 39.240473000000001], [8.8069360000000003, 38.906618000000002], [8.4283020000000004, 39.171847], [8.3882530000000006, 40.378310999999997], [8.1599979999999999, 40.950006999999999], [8.7099910000000005, 40.899984000000003], [9.2100120000000008, 41.209991000000002]]], [[[12.376485000000001, 46.767558999999999], [13.806475000000001, 46.509306000000002], [13.69811, 46.016778000000002], [13.93763, 45.591016000000003], [13.141605999999999, 45.736691999999998], [12.328581, 45.381777999999997], [12.383875, 44.885373999999999], [12.261452999999999, 44.600482], [12.589237000000001, 44.091366000000001], [13.526906, 43.587727000000001], [14.029821, 42.761007999999997], [15.142569999999999, 41.95514], [15.926190999999999, 41.961314999999999], [16.169896999999999, 41.740295000000003], [15.889346, 41.541082000000003], [16.785001999999999, 41.179606], [17.519169000000002, 40.877142999999997], [18.376687, 40.355625000000003], [18.480246999999999, 40.168866000000001], [18.293385000000001, 39.810774000000002], [17.738379999999999, 40.277670999999998], [16.869596000000001, 40.442234999999997], [16.448743, 39.795400999999998], [17.171489999999999, 39.424700000000001], [17.052841000000001, 38.902870999999998], [16.635088, 38.843572000000002], [16.100961000000002, 37.985899000000003], [15.684087, 37.908848999999996], [15.687963, 38.214593000000001], [15.891980999999999, 38.750942000000002], [16.109331999999998, 38.964547000000003], [15.718814, 39.544072], [15.413613, 40.048357000000003], [14.998495999999999, 40.172949000000003], [14.703268, 40.604550000000003], [14.060672, 40.786347999999997], [13.627985000000001, 41.188287000000003], [12.888082000000001, 41.25309], [12.106683, 41.704535], [11.191905999999999, 42.355424999999997], [10.511948, 42.931463000000001], [10.200029000000001, 43.920006999999998], [9.7024880000000007, 44.036279], [8.8889460000000007, 44.366335999999997], [8.4285610000000002, 44.231228000000002], [7.8507670000000003, 43.767147999999999], [7.4351849999999997, 43.693845000000003], [7.5495960000000002, 44.127901000000001], [7.0075620000000001, 44.254767000000001], [6.7499549999999999, 45.028517999999998], [7.0966519999999997, 45.333098999999997], [6.8023550000000004, 45.708579999999998], [6.8435930000000003, 45.991146999999998], [7.2738509999999996, 45.776947999999997], [7.755992, 45.824489999999997], [8.31663, 46.163642000000003], [8.4899520000000006, 46.005150999999998], [8.9663059999999994, 46.036932], [9.1828819999999993, 46.440215000000002], [9.9228369999999995, 46.314898999999997], [10.363378000000001, 46.483570999999998], [10.442701, 46.893546000000001], [11.048556, 46.751359000000001], [11.164828, 46.941578999999997], [12.153088, 47.115392999999997], [12.376485000000001, 46.767558999999999]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u0442\u0430\u043b\u0438\u044f", "fr": "Italie", "en": "Italy", "nl": "Itali\u00eb", "pt": "It\u00e1lia", "no": "Italia", "de": "Italien", "it": "Italia", "sv": "Italien", "pl": "W\u0142ochy", "fi": "Italia", "zh": "\u610f\u5927\u5229", "ja": "\u30a4\u30bf\u30ea\u30a2", "es": "Italia"}, "label_fr": "Italie", "name": "Italy", "dbpedia_uri": "http://dbpedia.org/resource/Italy"}, "id": "ITA"}, {"geometry": {"type": "Polygon", "coordinates": [[[-77.569601000000006, 18.490525000000002], [-76.896619000000001, 18.400867000000002], [-76.365358999999998, 18.160701], [-76.199658999999997, 17.886866999999999], [-76.902561000000006, 17.868238000000002], [-77.206340999999995, 17.701115999999999], [-77.766023000000004, 17.861597], [-78.337719000000007, 18.225968000000002], [-78.217726999999996, 18.454533000000001], [-77.797364999999999, 18.524218000000001], [-77.569601000000006, 18.490525000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042f\u043c\u0430\u0439\u043a\u0430", "fr": "Jama\u00efque", "en": "Jamaica", "nl": "Jamaica", "pt": "Jamaica", "no": "Jamaica", "de": "Jamaika", "it": "Giamaica", "sv": "Jamaica", "pl": "Jamajka", "fi": "Jamaika", "zh": "\u7259\u4e70\u52a0", "ja": "\u30b8\u30e3\u30de\u30a4\u30ab", "es": "Jamaica"}, "label_fr": "Jama\u00efque", "name": "Jamaica", "dbpedia_uri": "http://dbpedia.org/resource/Jamaica"}, "id": "JAM"}, {"geometry": {"type": "Polygon", "coordinates": [[[35.545665, 32.393991999999997], [35.719918, 32.709192000000002], [36.834062000000003, 32.312938000000003], [38.792341, 33.378686000000002], [39.195467999999998, 32.161009], [39.004885999999999, 32.010216999999997], [37.002166000000003, 31.508413000000001], [37.998849, 30.508500000000002], [37.668120000000002, 30.338664999999999], [37.503582000000002, 30.003775999999998], [36.740527999999998, 29.865283000000002], [36.501213999999997, 29.505254000000001], [36.068941000000002, 29.197495], [34.956037000000002, 29.356555], [34.922603000000002, 29.501325999999999], [35.420918, 31.100066000000002], [35.397561000000003, 31.489086], [35.545251999999998, 31.782505], [35.545665, 32.393991999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u043e\u0440\u0434\u0430\u043d\u0438\u044f", "fr": "Jordanie", "en": "Jordan", "nl": "Jordani\u00eb", "pt": "Jord\u00e2nia", "no": "Jordan", "de": "Jordanien", "it": "Giordania", "sv": "Jordanien", "pl": "Jordania", "fi": "Jordania", "zh": "\u7ea6\u65e6", "ja": "\u30e8\u30eb\u30c0\u30f3", "es": "Jordania"}, "label_fr": "Jordanie", "name": "Jordan", "dbpedia_uri": "http://dbpedia.org/resource/Jordan"}, "id": "JOR"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[134.638428, 34.149234], [134.766379, 33.806334999999997], [134.203416, 33.201177999999999], [133.79294999999999, 33.521985000000001], [133.28026800000001, 33.289569999999998], [133.014858, 32.704566999999997], [132.36311499999999, 32.989381999999999], [132.37117599999999, 33.463642], [132.924373, 34.060299000000001], [133.49296799999999, 33.944620999999998], [133.90410600000001, 34.364930999999999], [134.638428, 34.149234]]], [[[140.97638799999999, 37.142074000000001], [140.59977000000001, 36.343983000000001], [140.77407400000001, 35.842877000000001], [140.25327899999999, 35.138114000000002], [138.975528, 34.6676], [137.21759900000001, 34.606285999999997], [135.79298299999999, 33.464804999999998], [135.120983, 33.849071000000002], [135.07943499999999, 34.596544999999999], [133.340316, 34.375937999999998], [132.15677099999999, 33.904933], [130.98614499999999, 33.885761000000002], [132.00003599999999, 33.149991999999997], [131.33278999999999, 31.450354999999998], [130.686318, 31.029578999999998], [130.20241999999999, 31.418237999999999], [130.447676, 32.319474999999997], [129.81469200000001, 32.610309999999998], [129.40846300000001, 33.296056], [130.35393500000001, 33.604151000000002], [130.87845100000001, 34.232742999999999], [131.884229, 34.749713999999997], [132.617673, 35.433393000000002], [134.60830100000001, 35.731617999999997], [135.677538, 35.527133999999997], [136.72383099999999, 37.304983999999997], [137.390612, 36.827390999999999], [138.85760200000001, 37.827485000000003], [139.42640499999999, 38.215961999999998], [140.05479, 39.438806999999997], [139.88337899999999, 40.563312000000003], [140.30578299999999, 41.195005000000002], [141.36897300000001, 41.37856], [141.91426300000001, 39.991616], [141.884601, 39.180864999999997], [140.95948899999999, 38.174000999999997], [140.97638799999999, 37.142074000000001]]], [[[143.91016200000001, 44.174100000000003], [144.613427, 43.960883000000003], [145.32082500000001, 44.384732999999997], [145.543137, 43.262087999999999], [144.059662, 42.988357999999998], [143.18385000000001, 41.995215000000002], [141.611491, 42.678790999999997], [141.067286, 41.584594000000003], [139.955106, 41.569555999999999], [139.817544, 42.563758999999997], [140.31208699999999, 43.333272999999998], [141.380549, 43.388824999999997], [141.671952, 44.772125000000003], [141.967645, 45.551482999999998], [143.14286999999999, 44.510357999999997], [143.91016200000001, 44.174100000000003]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042f\u043f\u043e\u043d\u0438\u044f", "fr": "Japon", "en": "Japan", "nl": "Japan", "pt": "Jap\u00e3o", "no": "Japan", "de": "Japan", "it": "Giappone", "sv": "Japan", "pl": "Japonia", "fi": "Japani", "zh": "\u65e5\u672c", "ja": "\u65e5\u672c", "es": "Jap\u00f3n"}, "label_fr": "Japon", "name": "Japan", "dbpedia_uri": "http://dbpedia.org/resource/Japan"}, "id": "JPN"}, {"geometry": {"type": "Polygon", "coordinates": [[[70.962315000000004, 42.266154], [70.388964999999999, 42.081308], [69.070026999999996, 41.384244000000002], [68.632482999999993, 40.668680999999999], [68.259895999999998, 40.662325000000003], [67.985855999999998, 41.135990999999997], [66.714046999999994, 41.168444000000001], [66.510649000000001, 41.987644000000003], [66.023392000000001, 41.994646000000003], [66.098011999999997, 42.997660000000003], [64.900824, 43.728081000000003], [63.185786999999998, 43.650075000000001], [62.013300000000001, 43.504477000000001], [61.058320000000002, 44.405816999999999], [60.239972000000002, 44.784036999999998], [58.689988999999997, 45.500014], [58.503126999999999, 45.586804000000001], [55.928916999999998, 44.995857999999998], [55.968190999999997, 41.308641999999999], [55.455250999999997, 41.259858999999999], [54.755344999999998, 42.043970999999999], [54.079417999999997, 42.324109], [52.944293000000002, 42.116033999999999], [52.502459999999999, 41.783315999999999], [52.446339000000002, 42.027151000000003], [52.692112000000002, 42.443894999999998], [52.501426000000002, 42.792298000000002], [51.342427000000001, 43.132975000000002], [50.891292, 44.031033999999998], [50.339129, 44.284016000000001], [50.305643000000003, 44.609836000000001], [51.278503000000001, 44.514854], [51.316898999999999, 45.245998], [52.167389999999997, 45.408391000000002], [53.040875999999997, 45.259047000000002], [53.220866000000001, 46.234645999999998], [53.042737000000002, 46.853006000000001], [52.042023, 46.804637], [51.191944999999997, 47.048704999999998], [50.034083000000003, 46.608989999999999], [49.10116, 46.399329999999999], [48.593240999999999, 46.561033999999999], [48.694733999999997, 47.075628000000002], [48.057253000000003, 47.743752999999998], [47.315230999999997, 47.715846999999997], [46.466445999999998, 48.394151999999998], [47.043672000000001, 49.152039000000002], [46.751595999999999, 49.356006000000001], [47.549480000000003, 50.454698], [48.577840999999999, 49.874760000000002], [48.702382, 50.605128000000001], [50.766648000000004, 51.692762000000002], [52.328724000000001, 51.718651999999999], [54.532877999999997, 51.026240000000001], [55.716940999999998, 50.621716999999997], [56.777960999999998, 51.043551000000001], [58.363290999999997, 51.063653000000002], [59.642282000000002, 50.545442000000001], [59.932806999999997, 50.842193999999999], [61.337423999999999, 50.79907], [61.588003, 51.272658999999997], [59.967534000000001, 51.960419999999999], [60.927269000000003, 52.447547999999998], [60.739992999999998, 52.719985999999999], [61.699986000000003, 52.979996], [60.978065999999998, 53.664993000000003], [61.436591, 54.006264999999999], [65.178533999999999, 54.354227999999999], [65.666876000000002, 54.601267], [68.1691, 54.970391999999997], [69.068167000000003, 55.385249999999999], [70.865267000000003, 55.169733999999998], [71.180131000000003, 54.133285000000001], [72.224149999999995, 54.376655], [73.508516, 54.035617000000002], [73.425679000000002, 53.489809999999999], [74.384844999999999, 53.546861], [76.891099999999994, 54.490524000000001], [76.525178999999994, 54.177002999999999], [77.800916000000001, 53.404415], [80.035560000000004, 50.864750999999998], [80.568447000000006, 51.388336000000002], [81.945986000000005, 50.812196], [83.383004, 51.069183000000002], [83.935114999999996, 50.889246], [84.416376999999997, 50.311399999999999], [85.115560000000002, 50.117303], [85.541269999999997, 49.692858999999999], [86.829357000000002, 49.826675000000002], [87.359970000000004, 49.214981000000002], [86.598776000000001, 48.549182000000002], [85.768232999999995, 48.455750999999999], [85.720483999999999, 47.452969000000003], [85.164289999999994, 47.000956000000002], [83.180484000000007, 47.330030999999998], [82.458926000000005, 45.539650000000002], [81.947070999999994, 45.317027000000003], [79.966105999999996, 44.917516999999997], [80.866206000000005, 43.180362000000002], [80.180149999999998, 42.920068000000001], [80.259990000000002, 42.349998999999997], [79.643645000000006, 42.496682999999997], [79.142177000000004, 42.856091999999997], [77.658392000000006, 42.960686000000003], [76.000354000000002, 42.988022000000001], [75.636965000000004, 42.877899999999997], [74.212866000000005, 43.298338999999999], [73.645303999999996, 43.091271999999996], [73.489757999999995, 42.500894000000002], [71.844638000000003, 42.845395000000003], [71.186280999999994, 42.704293], [70.962315000000004, 42.266154]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0430\u0437\u0430\u0445\u0441\u0442\u0430\u043d", "fr": "Kazakhstan", "en": "Kazakhstan", "nl": "Kazachstan", "pt": "Cazaquist\u00e3o", "no": "Kasakhstan", "de": "Kasachstan", "it": "Kazakistan", "sv": "Kazakstan", "pl": "Kazachstan", "fi": "Kazakstan", "zh": "\u54c8\u8428\u514b\u65af\u5766", "ja": "\u30ab\u30b6\u30d5\u30b9\u30bf\u30f3", "es": "Kazajist\u00e1n"}, "label_fr": "Kazakhstan", "name": "Kazakhstan", "dbpedia_uri": "http://dbpedia.org/resource/Kazakhstan"}, "id": "KAZ"}, {"geometry": {"type": "Polygon", "coordinates": [[[40.993000000000002, -0.85829], [41.585129999999999, -1.6832499999999999], [40.884770000000003, -2.0825499999999999], [40.63785, -2.49979], [40.263039999999997, -2.5730900000000001], [40.121189999999999, -3.2776800000000001], [39.800060000000002, -3.6811600000000002], [39.604889999999997, -4.3465299999999996], [39.202219999999997, -4.6767700000000003], [37.7669, -3.6771199999999999], [37.698689999999999, -3.0969899999999999], [34.072620000000001, -1.05982], [33.903711000000001, -0.94999999999999996], [33.893568999999999, 0.10981399999999999], [34.18, 0.51500000000000001], [34.6721, 1.1769400000000001], [35.035989999999998, 1.90584], [34.596069999999997, 3.0537399999999999], [34.479129999999998, 3.5556000000000001], [34.005000000000003, 4.2498849999999999], [34.620196, 4.8471229999999998], [35.298006999999998, 5.5060000000000002], [35.817447999999999, 5.3382319999999996], [35.817447999999999, 4.7769659999999998], [36.159078999999998, 4.447864], [36.855092999999997, 4.447864], [38.120914999999997, 3.5986050000000001], [38.436970000000002, 3.5885099999999999], [38.671140000000001, 3.6160700000000001], [38.892510000000001, 3.50074], [39.559384000000001, 3.4220600000000001], [39.854939999999999, 3.8387899999999999], [40.768479999999997, 4.2570199999999998], [41.171799999999998, 3.9190900000000002], [41.855083, 3.9189120000000002], [40.981050000000003, 2.7845200000000001], [40.993000000000002, -0.85829]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0435\u043d\u0438\u044f", "fr": "Kenya", "en": "Kenya", "nl": "Kenia", "pt": "Qu\u00e9nia", "no": "Kenya", "de": "Kenia", "it": "Kenya", "sv": "Kenya", "pl": "Kenia", "fi": "Kenia", "zh": "\u80af\u5c3c\u4e9a", "ja": "\u30b1\u30cb\u30a2", "es": "Kenia"}, "label_fr": "Kenya", "name": "Kenya", "dbpedia_uri": "http://dbpedia.org/resource/Kenya"}, "id": "KEN"}, {"geometry": {"type": "Polygon", "coordinates": [[[70.962315000000004, 42.266154], [71.186280999999994, 42.704293], [71.844638000000003, 42.845395000000003], [73.489757999999995, 42.500894000000002], [73.645303999999996, 43.091271999999996], [74.212866000000005, 43.298338999999999], [75.636965000000004, 42.877899999999997], [76.000354000000002, 42.988022000000001], [77.658392000000006, 42.960686000000003], [79.142177000000004, 42.856091999999997], [79.643645000000006, 42.496682999999997], [80.259990000000002, 42.349998999999997], [80.119429999999994, 42.123941000000002], [78.543661, 41.582242999999998], [78.187196999999998, 41.185316], [76.904483999999997, 41.066485999999998], [76.526368000000005, 40.427945999999999], [75.467827999999997, 40.562072000000001], [74.776861999999994, 40.366425], [73.822243999999998, 39.893973000000003], [73.960013000000004, 39.660007999999998], [73.675379000000007, 39.431237000000003], [71.784694000000002, 39.279463], [70.549161999999995, 39.604197999999997], [69.464887000000004, 39.526682999999998], [69.559610000000006, 40.103211000000002], [70.648019000000005, 39.935754000000003], [71.014197999999993, 40.244365999999999], [71.774874999999994, 40.145843999999997], [73.055417000000006, 40.866033000000002], [71.870114999999998, 41.392899999999997], [71.157859000000002, 41.143586999999997], [70.420022000000003, 41.519998000000001], [71.259247999999999, 42.167710999999997], [70.962315000000004, 42.266154]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0438\u0440\u0433\u0438\u0437\u0438\u044f", "fr": "Kirghizistan", "en": "Kyrgyzstan", "nl": "Kirgizi\u00eb", "pt": "Quirguist\u00e3o", "no": "Kirgisistan", "de": "Kirgisistan", "it": "Kirghizistan", "sv": "Kirgizistan", "pl": "Kirgistan", "fi": "Kirgisia", "zh": "\u5409\u5c14\u5409\u65af\u65af\u5766", "ja": "\u30ad\u30eb\u30ae\u30b9", "es": "Kirguist\u00e1n"}, "label_fr": "Kirghizistan", "name": "Kyrgyzstan", "dbpedia_uri": "http://dbpedia.org/resource/Kyrgyzstan"}, "id": "KGZ"}, {"geometry": {"type": "Polygon", "coordinates": [[[103.49728, 10.632555], [103.09069, 11.153661], [102.58493199999999, 12.186595000000001], [102.348099, 13.394247], [102.988422, 14.225721], [104.281418, 14.416743], [105.218777, 14.273211999999999], [106.04394600000001, 13.881091], [106.49637300000001, 14.570584], [107.382727, 14.202441], [107.614548, 13.535531000000001], [107.49140300000001, 12.337206], [105.810524, 11.567615], [106.24966999999999, 10.961812], [105.199915, 10.88931], [104.334335, 10.486544], [103.49728, 10.632555]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0430\u043c\u0431\u043e\u0434\u0436\u0430", "fr": "Cambodge", "en": "Cambodia", "nl": "Cambodja", "pt": "Camboja", "no": "Kambodsja", "de": "Kambodscha", "it": "Cambogia", "sv": "Kambodja", "pl": "Kambod\u017ca", "fi": "Kambod\u017ea", "zh": "\u67ec\u57d4\u5be8", "ja": "\u30ab\u30f3\u30dc\u30b8\u30a2", "es": "Camboya"}, "label_fr": "Cambodge", "name": "Cambodia", "dbpedia_uri": "http://dbpedia.org/resource/Cambodia"}, "id": "KHM"}, {"geometry": {"type": "Polygon", "coordinates": [[[128.349716, 38.612242999999999], [129.21292, 37.432392], [129.46045000000001, 36.784188999999998], [129.46830399999999, 35.632140999999997], [129.09137699999999, 35.082484000000001], [128.18584999999999, 34.890377000000001], [127.38651900000001, 34.475673999999998], [126.485748, 34.390045999999998], [126.37392, 34.934559999999998], [126.559231, 35.684541000000003], [126.11739799999999, 36.725484999999999], [126.86014299999999, 36.893923999999998], [126.17475899999999, 37.749685999999997], [126.23733900000001, 37.840378000000001], [126.68371999999999, 37.804772999999997], [127.07330899999999, 38.256115000000001], [127.780035, 38.304535999999999], [128.205746, 38.370396999999997], [128.349716, 38.612242999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u041a\u043e\u0440\u0435\u044f", "fr": "Cor\u00e9e du Sud", "en": "South Korea", "nl": "Zuid-Korea", "pt": "Coreia do Sul", "no": "S\u00f8r-Korea", "de": "S\u00fcdkorea", "it": "Corea del Sud", "sv": "Sydkorea", "pl": "Korea Po\u0142udniowa", "fi": "Korean tasavalta", "zh": "\u5927\u97e9\u6c11\u56fd", "ja": "\u5927\u97d3\u6c11\u56fd", "es": "Corea del Sur"}, "label_fr": "Cor\u00e9e du Sud", "name": "South Korea", "dbpedia_uri": "http://dbpedia.org/resource/South_Korea"}, "id": "KOR"}, {"geometry": {"type": "Polygon", "coordinates": [[[20.762160000000002, 42.051859999999998], [20.717310000000001, 41.847110000000001], [20.590229999999998, 41.855409999999999], [20.522950000000002, 42.217869999999998], [20.283740000000002, 42.320250000000001], [20.070699999999999, 42.588630000000002], [20.257580000000001, 42.812750000000001], [20.496790000000001, 42.884689999999999], [20.635079999999999, 43.216709999999999], [20.81448, 43.27205], [20.956510000000002, 43.130940000000002], [21.143395000000002, 43.068685000000002], [21.27421, 42.909590000000001], [21.438659999999999, 42.862549999999999], [21.633019999999998, 42.677169999999997], [21.77505, 42.682699999999997], [21.66292, 42.439219999999999], [21.543320000000001, 42.320250000000001], [21.576636000000001, 42.245224], [21.352699999999999, 42.206800000000001], [20.762160000000002, 42.051859999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u043e\u0441\u043e\u0432\u043e (\u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0433\u0438\u043e\u043d)", "fr": "Kosovo", "en": "Kosovo", "nl": "Kosovo", "pt": "Kosovo", "no": "Kosovo", "de": "Kosovo", "it": "Kosovo", "sv": "Kosovo", "pl": "Kosowo", "fi": "Kosovo", "zh": "\u79d1\u7d22\u6c83", "ja": "\u30b3\u30bd\u30dc", "es": "Kosovo"}, "label_fr": "Kosovo", "name": "Kosovo", "dbpedia_uri": "http://dbpedia.org/resource/Kosovo"}, "id": "CS-KM"}, {"geometry": {"type": "Polygon", "coordinates": [[[47.974519000000001, 29.975819000000001], [48.183188999999999, 29.534476999999999], [48.093943000000003, 29.306298999999999], [48.416094000000001, 28.552004], [47.708851000000003, 28.526063000000001], [47.459822000000003, 29.002518999999999], [46.568713000000002, 29.099025000000001], [47.302622, 30.059069999999998], [47.974519000000001, 29.975819000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0443\u0432\u0435\u0439\u0442", "fr": "Kowe\u00eft", "en": "Kuwait", "nl": "Koeweit", "pt": "Kuwait", "no": "Kuwait", "de": "Kuwait", "it": "Kuwait", "sv": "Kuwait", "pl": "Kuwejt", "fi": "Kuwait", "zh": "\u79d1\u5a01\u7279", "ja": "\u30af\u30a6\u30a7\u30fc\u30c8", "es": "Kuwait"}, "label_fr": "Kowe\u00eft", "name": "Kuwait", "dbpedia_uri": "http://dbpedia.org/resource/Kuwait"}, "id": "KWT"}, {"geometry": {"type": "Polygon", "coordinates": [[[105.218777, 14.273211999999999], [105.544338, 14.723934], [105.589039, 15.570316], [104.779321, 16.441865], [104.716947, 17.428858999999999], [103.95647700000001, 18.240953999999999], [103.200192, 18.309632000000001], [102.998706, 17.961694999999999], [102.413005, 17.932782], [102.113592, 18.109102], [101.05954800000001, 17.512497], [101.03593100000001, 18.408928], [101.282015, 19.462585000000001], [100.60629400000001, 19.508344000000001], [100.54888099999999, 20.109238000000001], [100.115988, 20.417850000000001], [100.32910099999999, 20.786121999999999], [101.18000499999999, 21.436572999999999], [101.270026, 21.201651999999999], [101.80312000000001, 21.174367], [101.652018, 22.318199], [102.170436, 22.464753000000002], [102.754896, 21.675136999999999], [103.203861, 20.766562], [104.435, 20.758732999999999], [104.822574, 19.886641999999998], [104.18338799999999, 19.624668], [103.89653199999999, 19.265180999999998], [105.094598, 18.666975000000001], [105.92576200000001, 17.485315], [106.55600800000001, 16.604284], [107.31270600000001, 15.908538], [107.564525, 15.202173], [107.382727, 14.202441], [106.49637300000001, 14.570584], [106.04394600000001, 13.881091], [105.218777, 14.273211999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u0430\u043e\u0441", "fr": "Laos", "en": "Laos", "nl": "Laos", "pt": "Laos", "no": "Laos", "de": "Laos", "it": "Laos", "sv": "Laos", "pl": "Laos", "fi": "Laos", "zh": "\u8001\u631d", "ja": "\u30e9\u30aa\u30b9", "es": "Laos"}, "label_fr": "Laos", "name": "Laos", "dbpedia_uri": "http://dbpedia.org/resource/Laos"}, "id": "LAO"}, {"geometry": {"type": "Polygon", "coordinates": [[[35.821100999999999, 33.277425999999998], [35.552796999999998, 33.264274999999998], [35.460709000000001, 33.089039999999997], [35.126052999999999, 33.090899999999998], [35.482207000000002, 33.905450000000002], [35.979591999999997, 34.610058000000002], [35.998403000000003, 34.644914], [36.448194000000001, 34.593935000000002], [36.611750000000001, 34.201788999999998], [36.066459999999999, 33.824911999999998], [35.821100999999999, 33.277425999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u0438\u0432\u0430\u043d", "fr": "Liban", "en": "Lebanon", "nl": "Libanon", "pt": "L\u00edbano", "no": "Libanon", "de": "Libanon", "it": "Libano", "sv": "Libanon", "pl": "Liban", "fi": "Libanon", "zh": "\u9ece\u5df4\u5ae9", "ja": "\u30ec\u30d0\u30ce\u30f3", "es": "L\u00edbano"}, "label_fr": "Liban", "name": "Lebanon", "dbpedia_uri": "http://dbpedia.org/resource/Lebanon"}, "id": "LBN"}, {"geometry": {"type": "Polygon", "coordinates": [[[-7.7121589999999998, 4.3645659999999999], [-7.9741070000000001, 4.3557550000000003], [-9.0047940000000004, 4.8324189999999998], [-9.9134200000000003, 5.5935610000000002], [-10.765383999999999, 6.1407109999999996], [-11.438779, 6.7859170000000004], [-11.199802, 7.1058459999999997], [-11.146704, 7.396706], [-10.695595000000001, 7.9394640000000001], [-10.230093999999999, 8.4062059999999992], [-10.016567, 8.4285040000000002], [-9.7553420000000006, 8.5410550000000001], [-9.3372799999999998, 7.928534], [-9.4033479999999994, 7.5269050000000002], [-9.2087859999999999, 7.3139209999999997], [-8.9260649999999995, 7.309037], [-8.7221240000000009, 7.7116740000000004], [-8.4392980000000009, 7.6860429999999997], [-8.4854459999999996, 7.3952080000000002], [-8.3854520000000008, 6.9118009999999996], [-8.6028800000000007, 6.4675640000000003], [-8.3113480000000006, 6.1930329999999998], [-7.9936930000000004, 6.1261900000000002], [-7.5701530000000004, 5.7073520000000002], [-7.5397150000000002, 5.313345], [-7.6353679999999997, 5.1881589999999997], [-7.7121589999999998, 4.3645659999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u0438\u0431\u0435\u0440\u0438\u044f", "fr": "Liberia", "en": "Liberia", "nl": "Liberia", "pt": "Lib\u00e9ria", "no": "Liberia", "it": "Liberia", "sv": "Liberia", "pl": "Liberia", "fi": "Liberia", "zh": "\u5229\u6bd4\u91cc\u4e9a", "ja": "\u30ea\u30d9\u30ea\u30a2", "es": "Liberia"}, "label_fr": "Liberia", "name": "Liberia", "dbpedia_uri": "http://dbpedia.org/resource/Liberia"}, "id": "LBR"}, {"geometry": {"type": "Polygon", "coordinates": [[[14.8513, 22.862950000000001], [14.143871000000001, 22.491288999999998], [13.581424999999999, 23.040506000000001], [11.999506, 23.471668000000001], [11.560669000000001, 24.097909000000001], [10.771364, 24.562532000000001], [10.303846999999999, 24.379313], [9.9482610000000005, 24.936954], [9.9106930000000002, 25.365455000000001], [9.3194110000000006, 26.094325000000001], [9.7162860000000002, 26.512205999999999], [9.6290560000000003, 27.140953], [9.7561280000000004, 27.688258999999999], [9.6838850000000001, 28.144174], [9.8599979999999992, 28.959990000000001], [9.8056339999999995, 29.424638000000002], [9.4821399999999993, 30.307556000000002], [9.9700170000000004, 30.539325000000002], [10.056575, 30.961831], [9.9502249999999997, 31.376069999999999], [10.636901, 31.761420999999999], [10.944789999999999, 32.081814999999999], [11.432252999999999, 32.368903000000003], [11.488787, 33.136996000000003], [12.663309999999999, 32.79278], [13.083259999999999, 32.878819999999997], [13.91868, 32.711959999999998], [15.24563, 32.265079999999998], [15.713939999999999, 31.376259999999998], [16.611619999999998, 31.182179999999999], [18.021090000000001, 30.763570000000001], [19.086410000000001, 30.266390000000001], [19.57404, 30.52582], [20.053349999999998, 30.985759999999999], [19.820329999999998, 31.75179], [20.133970000000001, 32.238199999999999], [20.854520000000001, 32.706800000000001], [21.54298, 32.843200000000003], [22.895759999999999, 32.638579999999997], [23.236799999999999, 32.191490000000002], [23.60913, 32.187260000000002], [23.927499999999998, 32.016669999999998], [24.921140000000001, 31.899360000000001], [25.164819999999999, 31.56915], [24.802869999999999, 31.089289999999998], [24.957619999999999, 30.6616], [24.70007, 30.04419], [25, 29.238655000000001], [25, 25.682500000000001], [25, 22], [25, 20.003039999999999], [23.850000000000001, 20], [23.83766, 19.580469999999998], [19.849260000000001, 21.495090000000001], [15.860849999999999, 23.40972], [14.8513, 22.862950000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u0438\u0432\u0438\u044f", "fr": "Libye", "en": "Libya", "nl": "Libi\u00eb", "pt": "L\u00edbia", "no": "Libya", "de": "Libyen", "it": "Libia", "sv": "Libyen", "pl": "Libia", "fi": "Libya", "zh": "\u5229\u6bd4\u4e9a", "ja": "\u30ea\u30d3\u30a2", "es": "Libia"}, "label_fr": "Libye", "name": "Libya", "dbpedia_uri": "http://dbpedia.org/resource/Libya"}, "id": "LBY"}, {"geometry": {"type": "Polygon", "coordinates": [[[81.787959000000001, 7.5230550000000003], [81.637321999999998, 6.4817749999999998], [81.218019999999996, 6.1971410000000002], [80.348356999999993, 5.9683700000000002], [79.872468999999995, 6.7634629999999998], [79.695166999999998, 8.2008430000000008], [80.147801000000001, 9.8240780000000001], [80.838818000000003, 9.2684270000000009], [81.304319000000007, 8.5642060000000004], [81.787959000000001, 7.5230550000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0428\u0440\u0438-\u041b\u0430\u043d\u043a\u0430", "fr": "Sri Lanka", "en": "Sri Lanka", "nl": "Sri Lanka", "pt": "Sri Lanka", "no": "Sri Lanka", "de": "Sri Lanka", "it": "Sri Lanka", "sv": "Sri Lanka", "pl": "Sri Lanka", "fi": "Sri Lanka", "zh": "\u65af\u91cc\u862d\u5361", "ja": "\u30b9\u30ea\u30e9\u30f3\u30ab", "es": "Sri Lanka"}, "label_fr": "Sri Lanka", "name": "Sri Lanka", "dbpedia_uri": "http://dbpedia.org/resource/Sri_Lanka"}, "id": "LKA"}, {"geometry": {"type": "Polygon", "coordinates": [[[28.978262999999998, -28.955597000000001], [29.325165999999999, -29.257387000000001], [29.018415000000001, -29.743766000000001], [28.848400000000002, -30.070050999999999], [28.291069, -30.226216999999998], [28.107205, -30.545732000000001], [27.749396999999998, -30.645105999999998], [26.999262000000002, -29.875954], [27.532511, -29.242711], [28.074338000000001, -28.851469000000002], [28.541699999999999, -28.647501999999999], [28.978262999999998, -28.955597000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u0435\u0441\u043e\u0442\u043e", "fr": "Lesotho", "en": "Lesotho", "nl": "Lesotho", "pt": "Lesoto", "no": "Lesotho", "de": "Lesotho", "it": "Lesotho", "sv": "Lesotho", "pl": "Lesotho", "fi": "Lesotho", "zh": "\u83b1\u7d22\u6258", "ja": "\u30ec\u30bd\u30c8", "es": "Lesoto"}, "label_fr": "Lesotho", "name": "Lesotho", "dbpedia_uri": "http://dbpedia.org/resource/Lesotho"}, "id": "LSO"}, {"geometry": {"type": "Polygon", "coordinates": [[[22.731099, 54.327537], [22.651052, 54.582740999999999], [22.757764000000002, 54.856574000000002], [22.315723999999999, 55.015298999999999], [21.268449, 55.190482000000003], [21.055800000000001, 56.031075999999999], [22.201156999999998, 56.337802000000003], [23.878264000000001, 56.273671], [24.860683999999999, 56.372528000000003], [25.000934000000001, 56.164530999999997], [25.533047, 56.100296999999998], [26.494330999999999, 55.615107000000002], [26.588279, 55.167175999999998], [25.768433000000002, 54.846963000000002], [25.536353999999999, 54.282423000000001], [24.450683999999999, 53.905701999999998], [23.484127999999998, 53.912497999999999], [23.243987000000001, 54.220567000000003], [22.731099, 54.327537]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u0438\u0442\u0432\u0430", "fr": "Lituanie", "en": "Lithuania", "nl": "Litouwen", "pt": "Litu\u00e2nia", "no": "Litauen", "de": "Litauen", "it": "Lituania", "sv": "Litauen", "pl": "Litwa", "fi": "Liettua", "zh": "\u7acb\u9676\u5b9b", "ja": "\u30ea\u30c8\u30a2\u30cb\u30a2", "es": "Lituania"}, "label_fr": "Lituanie", "name": "Lithuania", "dbpedia_uri": "http://dbpedia.org/resource/Lithuania"}, "id": "LTU"}, {"geometry": {"type": "Polygon", "coordinates": [[[6.0430729999999997, 50.128051999999997], [6.2427510000000002, 49.902225999999999], [6.1863200000000003, 49.463802999999999], [5.8977589999999998, 49.442667], [5.6740519999999997, 49.529483999999997], [5.7824169999999997, 50.090328], [6.0430729999999997, 50.128051999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u044e\u043a\u0441\u0435\u043c\u0431\u0443\u0440\u0433", "fr": "Luxembourg (pays)", "en": "Luxembourg", "nl": "Luxemburg (land)", "pt": "Luxemburgo", "no": "Luxembourg", "de": "Luxemburg", "it": "Lussemburgo", "sv": "Luxemburg", "pl": "Luksemburg", "fi": "Luxemburg", "zh": "\u5362\u68ee\u5821", "ja": "\u30eb\u30af\u30bb\u30f3\u30d6\u30eb\u30af", "es": "Luxemburgo"}, "label_fr": "Luxembourg (pays)", "name": "Luxembourg", "dbpedia_uri": "http://dbpedia.org/resource/Luxembourg"}, "id": "LUX"}, {"geometry": {"type": "Polygon", "coordinates": [[[21.055800000000001, 56.031075999999999], [21.090423999999999, 56.783873], [21.581866000000002, 57.411870999999998], [22.524341, 57.753374000000001], [23.318453000000002, 57.006236000000001], [24.120729999999998, 57.025692999999997], [24.312863, 57.793424000000002], [25.164594000000001, 57.970157], [25.602810000000002, 57.847529000000002], [26.463532000000001, 57.476388999999998], [27.288184999999999, 57.474527999999999], [27.770015999999998, 57.244258000000002], [27.855281999999999, 56.759326000000001], [28.176708999999999, 56.169130000000003], [27.102460000000001, 55.783313999999997], [26.494330999999999, 55.615107000000002], [25.533047, 56.100296999999998], [25.000934000000001, 56.164530999999997], [24.860683999999999, 56.372528000000003], [23.878264000000001, 56.273671], [22.201156999999998, 56.337802000000003], [21.055800000000001, 56.031075999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u0430\u0442\u0432\u0438\u044f", "fr": "Lettonie", "en": "Latvia", "nl": "Letland", "pt": "Let\u00f3nia", "no": "Latvia", "de": "Lettland", "it": "Lettonia", "sv": "Lettland", "pl": "\u0141otwa", "fi": "Latvia", "zh": "\u62c9\u812b\u7dad\u4e9e", "ja": "\u30e9\u30c8\u30d3\u30a2", "es": "Letonia"}, "label_fr": "Lettonie", "name": "Latvia", "dbpedia_uri": "http://dbpedia.org/resource/Latvia"}, "id": "LVA"}, {"geometry": {"type": "Polygon", "coordinates": [[[-5.1938630000000003, 35.755181999999998], [-4.5910060000000001, 35.330711999999998], [-3.6400570000000001, 35.399855000000002], [-2.6043059999999998, 35.179093000000002], [-2.1699139999999999, 35.168396000000001], [-1.792986, 34.527918999999997], [-1.733455, 33.919713000000002], [-1.3880490000000001, 32.864015000000002], [-1.1245510000000001, 32.651522], [-1.3078989999999999, 32.262889000000001], [-2.6166049999999998, 32.094346000000002], [-3.0689799999999998, 31.724498000000001], [-3.6474980000000001, 31.637294000000001], [-3.6904409999999999, 30.896951999999999], [-4.8596459999999997, 30.501187999999999], [-5.2421290000000003, 30.000443000000001], [-6.060632, 29.7317], [-7.0592280000000001, 29.579228000000001], [-8.6741159999999997, 28.841289], [-8.6655899999999999, 27.656426], [-8.8178090000000005, 27.656426], [-8.8178280000000004, 27.656426], [-8.7948839999999997, 27.120695999999999], [-9.4130369999999992, 27.088476], [-9.7353430000000003, 26.860945000000001], [-10.189424000000001, 26.860945000000001], [-10.551263000000001, 26.990808000000001], [-11.392555, 26.883424000000002], [-11.718220000000001, 26.104092000000001], [-12.030759, 26.030866], [-12.500963, 24.770116000000002], [-13.891109999999999, 23.691009000000001], [-14.221168, 22.310162999999999], [-14.630833000000001, 21.860939999999999], [-14.750954999999999, 21.500599999999999], [-17.002962, 21.420733999999999], [-17.020427999999999, 21.42231], [-16.973248000000002, 21.885745], [-16.589137000000001, 22.158234], [-16.261921999999998, 22.67934], [-16.326414, 23.017768], [-15.982611, 23.723358000000001], [-15.426004000000001, 24.359134000000001], [-15.089332000000001, 24.520261000000001], [-14.824645, 25.103532999999999], [-14.800926, 25.636265000000002], [-14.43994, 26.254418000000001], [-13.773804999999999, 26.618891999999999], [-13.139942, 27.640148], [-13.121613, 27.654147999999999], [-12.618836999999999, 28.038186], [-11.688919, 28.148644000000001], [-10.900957, 28.832142000000001], [-10.399592, 29.098586000000001], [-9.5648110000000006, 29.933574], [-9.8147179999999992, 31.177735999999999], [-9.4347930000000009, 32.038096000000003], [-9.3006930000000008, 32.564678999999998], [-8.6574760000000008, 33.240245000000002], [-7.6541779999999999, 33.697065000000002], [-6.9125439999999996, 34.110475999999998], [-6.2443419999999996, 35.145865000000001], [-5.9299939999999998, 35.759988], [-5.1938630000000003, 35.755181999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0430\u0440\u043e\u043a\u043a\u043e", "fr": "Maroc", "en": "Morocco", "nl": "Marokko", "pt": "Marrocos", "no": "Marokko", "de": "Marokko", "it": "Marocco", "sv": "Marocko", "pl": "Maroko", "fi": "Marokko", "zh": "\u6469\u6d1b\u54e5", "ja": "\u30e2\u30ed\u30c3\u30b3", "es": "Marruecos"}, "label_fr": "Maroc", "name": "Morocco", "dbpedia_uri": "http://dbpedia.org/resource/Morocco"}, "id": "MAR"}, {"geometry": {"type": "Polygon", "coordinates": [[[26.619337000000002, 48.220725999999999], [26.857824000000001, 48.368211000000002], [27.522537, 48.467118999999997], [28.259547000000001, 48.155562000000003], [28.670891000000001, 48.118149000000003], [29.122698, 47.849094999999998], [29.050868000000001, 47.510227], [29.415134999999999, 47.346645000000002], [29.559674000000001, 46.928583000000003], [29.908852, 46.674360999999998], [29.83821, 46.525326], [30.024659, 46.423937000000002], [29.759972000000001, 46.349988000000003], [29.170653999999999, 46.379261999999997], [29.072106999999999, 46.517677999999997], [28.862971999999999, 46.437888999999998], [28.933717000000001, 46.258830000000003], [28.659987000000001, 45.939987000000002], [28.485268999999999, 45.596907000000002], [28.233554000000002, 45.488283000000003], [28.054442999999999, 45.944586000000001], [28.160018000000001, 46.371563000000002], [28.128029999999999, 46.810476000000001], [27.551165999999998, 47.405116999999997], [27.233872999999999, 47.826771000000001], [26.924175999999999, 48.123263999999999], [26.619337000000002, 48.220725999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u043e\u043b\u0434\u0430\u0432\u0438\u044f", "fr": "Moldavie", "en": "Moldova", "nl": "Moldavi\u00eb (land)", "pt": "Mold\u00e1via", "no": "Moldova", "de": "Moldawien", "it": "Moldavia", "sv": "Moldavien", "pl": "Mo\u0142dawia", "fi": "Moldova", "zh": "\u6469\u5c14\u591a\u74e6", "ja": "\u30e2\u30eb\u30c9\u30d0", "es": "Moldavia"}, "label_fr": "Moldavie", "name": "Moldova", "dbpedia_uri": "http://dbpedia.org/resource/Moldova"}, "id": "MDA"}, {"geometry": {"type": "Polygon", "coordinates": [[[49.543519000000003, -12.469833], [49.808981000000003, -12.895284999999999], [50.056511, -13.555761], [50.217430999999998, -14.758789], [50.476537, -15.226512], [50.377110999999999, -15.706068999999999], [50.200274999999998, -16.000263], [49.860605999999997, -15.414253], [49.672606999999999, -15.710203999999999], [49.863343999999998, -16.451036999999999], [49.774563999999998, -16.875042000000001], [49.498612000000001, -17.106036], [49.435619000000003, -17.953064000000001], [49.041792000000001, -19.118780999999998], [48.548541, -20.496887999999998], [47.930748999999999, -22.391501000000002], [47.547722999999998, -23.781959000000001], [47.095761000000003, -24.94163], [46.282477999999998, -25.178463000000001], [45.409508000000002, -25.601434000000001], [44.833573999999999, -25.346101000000001], [44.039720000000003, -24.988344999999999], [43.763767999999999, -24.460677], [43.697778, -23.574116], [43.345654000000003, -22.776903999999998], [43.254187000000002, -22.057413], [43.433298000000001, -21.336475], [43.893683000000003, -21.163307], [43.896369999999997, -20.830459000000001], [44.374324999999999, -20.072365999999999], [44.464396999999998, -19.435454], [44.232422, -18.961995000000002], [44.042976000000003, -18.331386999999999], [43.963084000000002, -17.409945], [44.312469, -16.850496], [44.446517, -16.216218999999999], [44.944937000000003, -16.179373999999999], [45.502732000000002, -15.974373], [45.872993999999998, -15.793454000000001], [46.312243000000002, -15.780018], [46.882182999999998, -15.210182], [47.705129999999997, -14.594303], [48.005215, -14.091233000000001], [47.869047000000002, -13.663869], [48.293827999999998, -13.784068], [48.845059999999997, -13.089174999999999], [48.863509000000001, -12.487868000000001], [49.194651, -12.040557], [49.543519000000003, -12.469833]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0430\u0434\u0430\u0433\u0430\u0441\u043a\u0430\u0440", "fr": "Madagascar", "en": "Madagascar", "nl": "Madagaskar", "pt": "Madag\u00e1scar", "no": "Madagaskar", "de": "Madagaskar", "it": "Madagascar", "sv": "Madagaskar", "pl": "Madagaskar", "fi": "Madagaskar", "zh": "\u9a6c\u8fbe\u52a0\u65af\u52a0", "ja": "\u30de\u30c0\u30ac\u30b9\u30ab\u30eb", "es": "Madagascar"}, "label_fr": "Madagascar", "name": "Madagascar", "dbpedia_uri": "http://dbpedia.org/resource/Madagascar"}, "id": "MDG"}, {"geometry": {"type": "Polygon", "coordinates": [[[-97.140007999999995, 25.869997000000001], [-97.528071999999995, 24.992144], [-97.702945999999997, 24.272342999999999], [-97.776042000000004, 22.932580000000002], [-97.872366999999997, 22.444212], [-97.699044000000001, 21.898689000000001], [-97.388959999999997, 21.411019], [-97.189333000000005, 20.635432999999999], [-96.525576000000001, 19.890930999999998], [-96.292126999999994, 19.320371000000002], [-95.900885000000002, 18.828023999999999], [-94.839062999999996, 18.562716999999999], [-94.425730000000001, 18.144371], [-93.548651000000007, 18.423836999999999], [-92.786113999999998, 18.524839], [-92.037347999999994, 18.704568999999999], [-91.407903000000005, 18.876083000000001], [-90.771870000000007, 19.284120000000001], [-90.533590000000004, 19.867418000000001], [-90.451476, 20.707522000000001], [-90.278617999999994, 20.999855], [-89.601320999999999, 21.261725999999999], [-88.543865999999994, 21.493675], [-87.658417, 21.458846000000001], [-87.05189, 21.543543], [-86.811982, 21.331515], [-86.845907999999994, 20.849865000000001], [-87.383291, 20.255405], [-87.621054000000001, 19.646553000000001], [-87.436750000000004, 19.472403], [-87.586560000000006, 19.040130000000001], [-87.837191000000004, 18.259816000000001], [-88.090664000000004, 18.516648], [-88.300031000000004, 18.499981999999999], [-88.490122999999997, 18.486830999999999], [-88.848343999999997, 17.883198], [-89.029857000000007, 18.001511000000001], [-89.150908999999999, 17.955468], [-89.143079999999998, 17.808319000000001], [-90.067933999999994, 17.819326], [-91.001519999999999, 17.817595000000001], [-91.002268999999998, 17.254657999999999], [-91.453920999999994, 17.252177], [-91.081670000000003, 16.918476999999999], [-90.711821999999998, 16.687483], [-90.600847000000002, 16.470777999999999], [-90.438867000000002, 16.41011], [-90.464472999999998, 16.069562000000001], [-91.747960000000006, 16.066565000000001], [-92.229248999999996, 15.251447000000001], [-92.087215999999998, 15.064584999999999], [-92.203230000000005, 14.830102999999999], [-92.22775, 14.538829], [-93.359464000000003, 15.61543], [-93.875169, 15.940163999999999], [-94.691655999999995, 16.200975], [-95.250226999999995, 16.128318], [-96.053381999999999, 15.752088000000001], [-96.557434000000001, 15.653515000000001], [-97.263592000000003, 15.917064999999999], [-98.013030000000001, 16.107312], [-98.947676000000001, 16.566043000000001], [-99.697396999999995, 16.706164000000001], [-100.829499, 17.171071000000001], [-101.666089, 17.649025999999999], [-101.91852799999999, 17.916090000000001], [-102.478132, 17.975750999999999], [-103.50099, 18.292294999999999], [-103.91752700000001, 18.748571999999999], [-104.99200999999999, 19.316134000000002], [-105.493038, 19.946767000000001], [-105.731396, 20.434101999999999], [-105.397773, 20.531718999999999], [-105.50066099999999, 20.816894999999999], [-105.270752, 21.076284999999999], [-105.265817, 21.422104000000001], [-105.603161, 21.871146], [-105.693414, 22.269079999999999], [-106.028716, 22.773752000000002], [-106.90998, 23.767773999999999], [-107.915449, 24.548915000000001], [-108.401905, 25.172314], [-109.260199, 25.580608999999999], [-109.44408900000001, 25.824884000000001], [-109.29164400000001, 26.442934000000001], [-109.801458, 26.676176000000002], [-110.391732, 27.162115], [-110.641019, 27.859876], [-111.17891899999999, 27.941241000000002], [-111.759607, 28.467953000000001], [-112.228235, 28.954408999999998], [-112.271824, 29.266843999999999], [-112.809594, 30.021114000000001], [-113.163811, 30.786881000000001], [-113.148669, 31.170966], [-113.871881, 31.567608], [-114.205737, 31.524045000000001], [-114.77645099999999, 31.799531999999999], [-114.9367, 31.393484999999998], [-114.771232, 30.913616999999999], [-114.67389900000001, 30.162680999999999], [-114.330974, 29.750432], [-113.588875, 29.061610999999999], [-113.424053, 28.826174000000002], [-113.271969, 28.754783], [-113.140039, 28.411289], [-112.962298, 28.425190000000001], [-112.76158700000001, 27.780217], [-112.457911, 27.525814], [-112.244952, 27.171727000000001], [-111.616489, 26.662817], [-111.28467499999999, 25.732589999999998], [-110.987819, 25.294606000000002], [-110.710007, 24.826004000000001], [-110.65504900000001, 24.298594999999999], [-110.172856, 24.265547999999999], [-109.77184699999999, 23.811183], [-109.409104, 23.364671999999999], [-109.433392, 23.185587999999999], [-109.854219, 22.818272], [-110.031392, 22.823077999999999], [-110.29507099999999, 23.430973000000002], [-110.949501, 24.000964], [-111.670568, 24.484423], [-112.182036, 24.738413000000001], [-112.148989, 25.470124999999999], [-112.30071100000001, 26.012004000000001], [-112.777297, 26.321960000000001], [-113.464671, 26.768186], [-113.59672999999999, 26.63946], [-113.84893700000001, 26.900064], [-114.46574699999999, 27.14209], [-115.055142, 27.722726999999999], [-114.982253, 27.798200000000001], [-114.57036600000001, 27.741485000000001], [-114.19932900000001, 28.115003000000002], [-114.162018, 28.566112], [-114.931842, 29.279478999999998], [-115.518654, 29.556362], [-115.887365, 30.180793999999999], [-116.25834999999999, 30.836463999999999], [-116.721526, 31.635743999999999], [-117.12775999999999, 32.535339999999998], [-115.99135, 32.612389999999998], [-114.72139, 32.720829999999999], [-114.815, 32.525280000000002], [-113.30498, 32.039140000000003], [-111.02361000000001, 31.334720000000001], [-109.035, 31.341940000000001], [-108.24194, 31.342220000000001], [-108.23999999999999, 31.754854000000002], [-106.50758999999999, 31.754519999999999], [-106.1429, 31.39995], [-105.63159, 31.083829999999999], [-105.03737, 30.644020000000001], [-104.70574999999999, 30.121729999999999], [-104.45697, 29.571960000000001], [-103.94, 29.27], [-103.11, 28.969999999999999], [-102.48, 29.760000000000002], [-101.66240000000001, 29.779299999999999], [-100.9576, 29.380710000000001], [-100.45583999999999, 28.696120000000001], [-100.11, 28.109999999999999], [-99.519999999999996, 27.539999999999999], [-99.299999999999997, 26.84], [-99.019999999999996, 26.370000000000001], [-98.239999999999995, 26.059999999999999], [-97.530000000000001, 25.84], [-97.140007999999995, 25.869997000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0435\u043a\u0441\u0438\u043a\u0430", "fr": "Mexique", "en": "Mexico", "nl": "Mexico (land)", "pt": "M\u00e9xico", "no": "Mexico", "de": "Mexiko", "it": "Messico", "sv": "Mexiko", "pl": "Meksyk", "fi": "Meksiko", "zh": "\u58a8\u897f\u54e5", "ja": "\u30e1\u30ad\u30b7\u30b3", "es": "M\u00e9xico"}, "label_fr": "Mexique", "name": "Mexico", "dbpedia_uri": "http://dbpedia.org/resource/Mexico"}, "id": "MEX"}, {"geometry": {"type": "Polygon", "coordinates": [[[20.590229999999998, 41.855409999999999], [20.717310000000001, 41.847110000000001], [20.762160000000002, 42.051859999999998], [21.352699999999999, 42.206800000000001], [21.576636000000001, 42.245224], [21.917079999999999, 42.303640000000001], [22.380526, 42.320259999999998], [22.881374000000001, 41.999296999999999], [22.952376999999998, 41.337994000000002], [22.761769999999999, 41.3048], [22.597308000000002, 41.130487000000002], [22.055378000000001, 41.149866000000003], [21.674161000000002, 40.931274999999999], [21.020040000000002, 40.842726999999996], [20.605180000000001, 41.086219999999997], [20.463149999999999, 41.515090000000001], [20.590229999999998, 41.855409999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0438\u044f", "fr": "Mac\u00e9doine", "en": "Macedonia", "nl": "Macedoni\u00eb", "pt": "Maced\u00f3nia", "no": "Makedonia", "de": "Mazedonien (Begriffskl\u00e4rung)", "it": "Macedonia", "sv": "Makedonien (olika betydelser)", "pl": "Macedonia (ujednoznacznienie)", "fi": "Makedonia (t\u00e4smennyssivu)", "zh": "\u99ac\u5176\u9813 (\u6d88\u6b67\u7fa9)", "ja": "\u30de\u30b1\u30c9\u30cb\u30a2 (\u66d6\u6627\u3055\u56de\u907f)", "es": "Macedonia"}, "label_fr": "Mac\u00e9doine", "name": "Macedonia", "dbpedia_uri": "http://dbpedia.org/resource/Macedonia"}, "id": "MKD"}, {"geometry": {"type": "Polygon", "coordinates": [[[-12.17075, 14.616834000000001], [-11.834208, 14.799097], [-11.666078000000001, 15.388208000000001], [-11.349095, 15.411256], [-10.650791, 15.132745999999999], [-10.086846, 15.330486000000001], [-9.7002550000000003, 15.264106999999999], [-9.5502380000000002, 15.486497], [-5.537744, 15.50169], [-5.315277, 16.201854000000001], [-5.4885229999999998, 16.325102000000001], [-5.9711290000000004, 20.640833000000001], [-6.4537870000000002, 24.956591], [-4.9233370000000001, 24.974574], [-1.550055, 22.792666000000001], [1.8232280000000001, 20.610809], [2.060991, 20.142233000000001], [2.6835879999999999, 19.85623], [3.1466609999999999, 19.693579], [3.1581329999999999, 19.057364], [4.2674190000000003, 19.155265], [4.2702099999999996, 16.852226999999999], [3.7234219999999998, 16.184284000000002], [3.6382590000000001, 15.56812], [2.7499929999999999, 15.409525], [1.3855280000000001, 15.323561], [1.0157830000000001, 14.968182000000001], [0.374892, 14.928908], [-0.26625700000000002, 14.924308999999999], [-0.51585400000000003, 15.116158], [-1.0663629999999999, 14.973815], [-2.0010349999999999, 14.559008], [-2.1918250000000001, 14.246418], [-2.9676939999999998, 13.79815], [-3.103707, 13.541266999999999], [-3.5228030000000001, 13.337662], [-4.0063909999999998, 13.472485000000001], [-4.280405, 13.228444], [-4.4271659999999997, 12.542646], [-5.220942, 11.713858999999999], [-5.1978429999999998, 11.375146000000001], [-5.4705649999999997, 10.951269999999999], [-5.4043419999999998, 10.370737], [-5.8169259999999996, 10.222555], [-6.0504519999999999, 10.096361], [-6.2052230000000002, 10.524061], [-6.4939650000000002, 10.411303], [-6.666461, 10.430811], [-6.8505070000000003, 10.138994], [-7.6227590000000003, 10.147235999999999], [-7.8995899999999999, 10.297382000000001], [-8.0299440000000004, 10.206535000000001], [-8.3353769999999994, 10.494812], [-8.2823569999999993, 10.792597000000001], [-8.407311, 10.909257], [-8.6203210000000006, 10.810891], [-8.5813050000000004, 11.136246], [-8.3763050000000003, 11.393646], [-8.7860990000000001, 11.812561000000001], [-8.905265, 12.088357999999999], [-9.1274739999999994, 12.308059999999999], [-9.3276160000000008, 12.334286000000001], [-9.5679119999999998, 12.194243], [-9.8909929999999999, 12.060479000000001], [-10.165214000000001, 11.844084000000001], [-10.593223999999999, 11.923975], [-10.87083, 12.177887], [-11.036555999999999, 12.211245], [-11.297573999999999, 12.077971], [-11.456168999999999, 12.076834], [-11.513942999999999, 12.442988], [-11.467898999999999, 12.754519], [-11.553398, 13.141214], [-11.927716, 13.422075], [-12.124886999999999, 13.994726999999999], [-12.17075, 14.616834000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0430\u043b\u0438", "fr": "Mali", "en": "Mali", "nl": "Mali", "pt": "Mali", "no": "Mali", "de": "Mali", "it": "Mali", "sv": "Mali", "pl": "Mali", "fi": "Mali", "zh": "\u9a6c\u91cc\u5171\u548c\u56fd", "ja": "\u30de\u30ea\u5171\u548c\u56fd", "es": "Mal\u00ed"}, "label_fr": "Mali", "name": "Mali", "dbpedia_uri": "http://dbpedia.org/resource/Mali"}, "id": "MLI"}, {"geometry": {"type": "Polygon", "coordinates": [[[99.543308999999994, 20.186598], [98.959676000000002, 19.752980999999998], [98.253724000000005, 19.708203000000001], [97.797782999999995, 18.627079999999999], [97.375895999999997, 18.445437999999999], [97.859122999999997, 17.567945999999999], [98.493761000000006, 16.837835999999999], [98.903347999999994, 16.177824000000001], [98.537375999999995, 15.308496999999999], [98.192074000000005, 15.123703000000001], [98.430819, 14.622028], [99.097755000000006, 13.827503], [99.212012000000001, 13.269294], [99.196353999999999, 12.804748], [99.587286000000006, 11.892763], [99.038121000000004, 10.960546000000001], [98.553550999999999, 9.9329599999999996], [98.457173999999995, 10.675266000000001], [98.764545999999996, 11.441292000000001], [98.428338999999994, 12.032987], [98.509574000000001, 13.122377999999999], [98.103604000000004, 13.640459999999999], [97.777732, 14.837286000000001], [97.597071999999997, 16.100567999999999], [97.164540000000002, 16.928733999999999], [96.505769000000001, 16.427240999999999], [95.369352000000006, 15.71439], [94.808404999999993, 15.803454], [94.188804000000005, 16.037935999999998], [94.533485999999996, 17.277239999999999], [94.324816999999996, 18.213514], [93.540987999999999, 19.366492999999998], [93.663255000000007, 19.726962], [93.078277999999997, 19.855145], [92.368554000000003, 20.670883], [92.303234000000003, 21.475484999999999], [92.652257000000006, 21.324048000000001], [92.672720999999996, 22.041239000000001], [93.166128, 22.278459999999999], [93.060293999999999, 22.703111], [93.286327, 23.043658000000001], [93.325187999999997, 24.078555999999999], [94.106741999999997, 23.850740999999999], [94.552657999999994, 24.675238], [94.603249000000005, 25.162495], [95.155152999999999, 26.001307000000001], [95.124768000000003, 26.573571999999999], [96.419365999999997, 27.264589000000001], [97.133999000000003, 27.083773999999998], [97.051989000000006, 27.699058999999998], [97.402561000000006, 27.882536000000002], [97.327113999999995, 28.261583000000002], [97.911987999999994, 28.335944999999999], [98.246230999999995, 27.747221], [98.682689999999994, 27.508811999999999], [98.712093999999993, 26.743535999999999], [98.671837999999994, 25.918703000000001], [97.724609000000001, 25.083637], [97.60472, 23.897404999999999], [98.660262000000003, 24.063286000000002], [98.898748999999995, 23.142721999999999], [99.531992000000002, 22.949038999999999], [99.240898999999999, 22.118314000000002], [99.983489000000006, 21.742937000000001], [100.416538, 21.558838999999999], [101.15003299999999, 21.849983999999999], [101.18000499999999, 21.436572999999999], [100.32910099999999, 20.786121999999999], [100.115988, 20.417850000000001], [99.543308999999994, 20.186598]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u044c\u044f\u043d\u043c\u0430", "fr": "Birmanie", "en": "Burma", "nl": "Myanmar", "pt": "Myanmar", "no": "Burma", "de": "Myanmar", "it": "Birmania", "sv": "Burma", "pl": "Birma", "fi": "Myanmar", "zh": "\u7f05\u7538", "ja": "\u30df\u30e3\u30f3\u30de\u30fc", "es": "Birmania"}, "label_fr": "Birmanie", "name": "Myanmar", "dbpedia_uri": "http://dbpedia.org/resource/Burma"}, "id": "MMR"}, {"geometry": {"type": "Polygon", "coordinates": [[[19.801613, 42.500093], [19.738050999999999, 42.688246999999997], [19.304490000000001, 42.195740000000001], [19.371770000000001, 41.877549999999999], [19.162459999999999, 41.955019999999998], [18.88214, 42.281509999999997], [18.449999999999999, 42.479999999999997], [18.559999999999999, 42.649999999999999], [18.706479999999999, 43.200110000000002], [19.031649999999999, 43.43253], [19.218520000000002, 43.52384], [19.483889999999999, 43.352290000000004], [19.629999999999999, 43.21378], [19.958570000000002, 43.10604], [20.3398, 42.898519999999998], [20.257580000000001, 42.812750000000001], [20.070699999999999, 42.588630000000002], [19.801613, 42.500093]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0427\u0435\u0440\u043d\u043e\u0433\u043e\u0440\u0438\u044f", "fr": "Mont\u00e9n\u00e9gro", "en": "Montenegro", "nl": "Montenegro", "pt": "Montenegro", "no": "Montenegro", "de": "Montenegro", "it": "Montenegro", "sv": "Montenegro", "pl": "Czarnog\u00f3ra", "fi": "Montenegro", "zh": "\u8499\u7279\u5167\u54e5\u7f85", "ja": "\u30e2\u30f3\u30c6\u30cd\u30b0\u30ed", "es": "Montenegro"}, "label_fr": "Mont\u00e9n\u00e9gro", "name": "Montenegro", "dbpedia_uri": "http://dbpedia.org/resource/Montenegro"}, "id": "MNE"}, {"geometry": {"type": "Polygon", "coordinates": [[[87.751264000000006, 49.297198000000002], [88.805566999999996, 49.470520999999998], [90.713667000000001, 50.331811999999999], [92.234712000000002, 50.802171000000001], [93.104219000000001, 50.495289999999997], [94.147565999999998, 50.480536999999998], [94.815949000000003, 50.013432999999999], [95.814027999999993, 49.977466999999997], [97.259727999999996, 49.726061000000001], [98.231762000000003, 50.422401000000001], [97.825739999999996, 51.010995000000001], [98.861491000000001, 52.047365999999997], [99.981731999999994, 51.634005999999999], [100.88948000000001, 51.516855999999997], [102.065223, 51.259920999999999], [102.255909, 50.510561000000003], [103.676545, 50.089965999999997], [104.62155199999999, 50.275328999999999], [105.886591, 50.406019000000001], [106.88880399999999, 50.274296], [107.86817600000001, 49.793705000000003], [108.475167, 49.282547999999998], [109.402449, 49.292960999999998], [110.66201100000001, 49.130127999999999], [111.581231, 49.377968000000003], [112.89774, 49.543565000000001], [114.36245599999999, 50.248303], [114.96211, 50.140247000000002], [115.48569500000001, 49.805177], [116.67880100000001, 49.888531], [116.191802, 49.134597999999997], [115.485282, 48.135382999999997], [115.74283699999999, 47.726545000000002], [116.308953, 47.853409999999997], [117.295507, 47.697709000000003], [118.064143, 48.06673], [118.866574, 47.747059999999998], [119.772824, 47.048059000000002], [119.66327, 46.692680000000003], [118.874326, 46.805411999999997], [117.421701, 46.672733000000001], [116.717868, 46.388202], [115.985096, 45.727235], [114.46033199999999, 45.339816999999996], [113.46390700000001, 44.808892999999998], [112.43606200000001, 45.011645999999999], [111.873306, 45.102079000000003], [111.348377, 44.457442], [111.667737, 44.073175999999997], [111.829588, 43.743118000000003], [111.129682, 43.406834000000003], [110.412103, 42.871234000000001], [109.243596, 42.519446000000002], [107.744773, 42.481515999999999], [106.129316, 42.134327999999996], [104.964994, 41.597410000000004], [104.522282, 41.908346999999999], [103.31227800000001, 41.907468000000001], [101.83304, 42.514873000000001], [100.845866, 42.663803999999999], [99.515816999999998, 42.524690999999997], [97.451757000000001, 42.748890000000003], [96.349395999999999, 42.725634999999997], [95.762455000000003, 43.319448999999999], [95.306875000000005, 44.241331000000002], [94.688929000000002, 44.352331999999997], [93.480733999999998, 44.975472000000003], [92.133891000000006, 45.115076000000002], [90.945539999999994, 45.286073000000002], [90.585768000000002, 45.719715999999998], [90.970809000000003, 46.888145999999999], [90.280826000000005, 47.693548999999997], [88.854298, 48.069082000000002], [88.013831999999994, 48.599463], [87.751264000000006, 49.297198000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u043e\u043d\u0433\u043e\u043b\u0438\u044f", "fr": "Mongolie", "en": "Mongolia", "nl": "Mongoli\u00eb", "pt": "Mong\u00f3lia", "no": "Mongolia", "de": "Mongolei", "it": "Mongolia", "sv": "Mongoliet", "pl": "Mongolia", "fi": "Mongolia", "zh": "\u8499\u53e4\u56fd", "ja": "\u30e2\u30f3\u30b4\u30eb\u56fd", "es": "Mongolia"}, "label_fr": "Mongolie", "name": "Mongolia", "dbpedia_uri": "http://dbpedia.org/resource/Mongolia"}, "id": "MNG"}, {"geometry": {"type": "Polygon", "coordinates": [[[34.559989000000002, -11.520020000000001], [35.312398000000002, -11.439145999999999], [36.514082000000002, -11.720938], [36.775151000000001, -11.594537000000001], [37.471283999999997, -11.568751000000001], [37.827644999999997, -11.268769000000001], [38.427557, -11.285202], [39.521030000000003, -10.896853999999999], [40.316589, -10.317095999999999], [40.478386999999998, -10.765440999999999], [40.437252999999998, -11.761711], [40.560811000000001, -12.639177], [40.599620000000002, -14.201974999999999], [40.775475, -14.691763999999999], [40.477251000000003, -15.406294000000001], [40.089264, -16.100774000000001], [39.452559000000001, -16.720891000000002], [38.538350999999999, -17.101023000000001], [37.411133, -17.586368], [36.281278999999998, -18.659687999999999], [35.896496999999997, -18.84226], [35.198399999999999, -19.552810999999998], [34.786383000000001, -19.784012000000001], [34.701892999999998, -20.497043000000001], [35.176127000000001, -21.254360999999999], [35.373427999999997, -21.840837000000001], [35.385848000000003, -22.140000000000001], [35.562545999999998, -22.09], [35.533935, -23.070788], [35.371774000000002, -23.535359], [35.607469999999999, -23.706562999999999], [35.458745999999998, -24.122610000000002], [35.040734999999998, -24.478351], [34.215823999999998, -24.816313999999998], [33.013210000000001, -25.357572999999999], [32.574632000000001, -25.727318], [32.660362999999997, -26.148584], [32.915954999999997, -26.215866999999999], [32.830120000000001, -26.742191999999999], [32.071665000000003, -26.733820000000001], [31.985779000000001, -26.291779999999999], [31.837778, -25.843332], [31.752407999999999, -25.484283999999999], [31.930589000000001, -24.369416999999999], [31.670397999999999, -23.658968999999999], [31.191409, -22.25151], [32.244987999999999, -21.116489000000001], [32.508693000000001, -20.395292000000001], [32.659742999999999, -20.304290000000002], [32.772708000000002, -19.715592000000001], [32.611994000000003, -19.419383], [32.654885999999998, -18.672090000000001], [32.849860999999997, -17.979057000000001], [32.847639000000001, -16.713398000000002], [32.328239000000004, -16.392074000000001], [31.852041, -16.319417000000001], [31.636498, -16.07199], [31.173064, -15.860944], [30.338954999999999, -15.880839], [30.274256000000001, -15.507787], [30.179480999999999, -14.796099], [33.214024999999999, -13.97186], [33.789700000000003, -14.451831], [34.064824999999999, -14.35995], [34.459632999999997, -14.613009999999999], [34.517665999999998, -15.013709], [34.307290999999999, -15.478641], [34.381292000000002, -16.18356], [35.033810000000003, -16.801300000000001], [35.339063000000003, -16.10744], [35.771904999999997, -15.896858999999999], [35.686844999999998, -14.611046], [35.267955999999998, -13.887834], [34.907150999999999, -13.565424999999999], [34.559989000000002, -13.579998], [34.280006, -12.280025], [34.559989000000002, -11.520020000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u043e\u0437\u0430\u043c\u0431\u0438\u043a", "fr": "Mozambique", "en": "Mozambique", "nl": "Mozambique", "pt": "Mo\u00e7ambique", "no": "Mosambik", "de": "Mosambik", "it": "Mozambico", "sv": "Mo\u00e7ambique", "pl": "Mozambik", "fi": "Mosambik", "zh": "\u83ab\u6851\u6bd4\u514b", "ja": "\u30e2\u30b6\u30f3\u30d3\u30fc\u30af", "es": "Mozambique"}, "label_fr": "Mozambique", "name": "Mozambique", "dbpedia_uri": "http://dbpedia.org/resource/Mozambique"}, "id": "MOZ"}, {"geometry": {"type": "Polygon", "coordinates": [[[-12.17075, 14.616834000000001], [-12.830658, 15.303692], [-13.435738000000001, 16.039383000000001], [-14.099520999999999, 16.304302], [-14.577348000000001, 16.598264], [-15.135737000000001, 16.587281999999998], [-15.623666, 16.369337000000002], [-16.12069, 16.455663000000001], [-16.463097999999999, 16.135035999999999], [-16.549707999999999, 16.673891999999999], [-16.270551999999999, 17.166962999999999], [-16.146346999999999, 18.108481999999999], [-16.256882999999998, 19.096716000000001], [-16.377651, 19.593817000000001], [-16.277837999999999, 20.092521000000001], [-16.536324, 20.567865999999999], [-17.063423, 20.999752000000001], [-16.845193999999999, 21.333323], [-12.929102, 21.327071], [-13.118753999999999, 22.77122], [-12.874222, 23.284832000000002], [-11.937224000000001, 23.374593999999998], [-11.969419, 25.933353], [-8.6872939999999996, 25.881056000000001], [-8.6844000000000001, 27.395744000000001], [-4.9233370000000001, 24.974574], [-6.4537870000000002, 24.956591], [-5.9711290000000004, 20.640833000000001], [-5.4885229999999998, 16.325102000000001], [-5.315277, 16.201854000000001], [-5.537744, 15.50169], [-9.5502380000000002, 15.486497], [-9.7002550000000003, 15.264106999999999], [-10.086846, 15.330486000000001], [-10.650791, 15.132745999999999], [-11.349095, 15.411256], [-11.666078000000001, 15.388208000000001], [-11.834208, 14.799097], [-12.17075, 14.616834000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0430\u0432\u0440\u0438\u0442\u0430\u043d\u0438\u044f", "fr": "Mauritanie", "en": "Mauritania", "nl": "Mauritani\u00eb", "pt": "Maurit\u00e2nia", "no": "Mauritania", "de": "Mauretanien", "it": "Mauritania", "sv": "Mauretanien", "pl": "Mauretania", "fi": "Mauritania", "zh": "\u6bdb\u91cc\u5854\u5c3c\u4e9a", "ja": "\u30e2\u30fc\u30ea\u30bf\u30cb\u30a2", "es": "Mauritania"}, "label_fr": "Mauritanie", "name": "Mauritania", "dbpedia_uri": "http://dbpedia.org/resource/Mauritania"}, "id": "MRT"}, {"geometry": {"type": "Polygon", "coordinates": [[[34.559989000000002, -11.520020000000001], [34.280006, -12.280025], [34.559989000000002, -13.579998], [34.907150999999999, -13.565424999999999], [35.267955999999998, -13.887834], [35.686844999999998, -14.611046], [35.771904999999997, -15.896858999999999], [35.339063000000003, -16.10744], [35.033810000000003, -16.801300000000001], [34.381292000000002, -16.18356], [34.307290999999999, -15.478641], [34.517665999999998, -15.013709], [34.459632999999997, -14.613009999999999], [34.064824999999999, -14.35995], [33.789700000000003, -14.451831], [33.214024999999999, -13.97186], [32.688164999999998, -13.712858000000001], [32.991764000000003, -12.783871], [33.306421999999998, -12.435778000000001], [33.114288999999999, -11.607198], [33.315309999999997, -10.79655], [33.485688000000003, -10.525558999999999], [33.231388000000003, -9.6767219999999998], [32.759374999999999, -9.2305989999999998], [33.739728999999997, -9.4171510000000005], [33.940837999999999, -9.6936739999999997], [34.280006, -10.16], [34.559989000000002, -11.520020000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0430\u043b\u0430\u0432\u0438", "fr": "Malawi", "en": "Malawi", "nl": "Malawi", "pt": "Malawi", "no": "Malawi", "de": "Malawi", "it": "Malawi", "sv": "Malawi", "pl": "Malawi", "fi": "Malawi", "zh": "\u9a6c\u62c9\u7ef4", "ja": "\u30de\u30e9\u30a6\u30a4", "es": "Malaui"}, "label_fr": "Malawi", "name": "Malawi", "dbpedia_uri": "http://dbpedia.org/resource/Malawi"}, "id": "MWI"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[101.07551599999999, 6.2048670000000001], [101.154219, 5.6913840000000002], [101.81428200000001, 5.8108079999999998], [102.141187, 6.2216360000000002], [102.37114699999999, 6.1282050000000003], [102.96170499999999, 5.5244949999999999], [103.381215, 4.8550009999999997], [103.438575, 4.1816060000000004], [103.332122, 3.7266979999999998], [103.429429, 3.3828689999999999], [103.502448, 2.7910189999999999], [103.854674, 2.5154540000000001], [104.24793200000001, 1.631141], [104.22881099999999, 1.293048], [103.519707, 1.226334], [102.573615, 1.9671149999999999], [101.390638, 2.7608139999999999], [101.27354, 3.270292], [100.695435, 3.9391400000000001], [100.557408, 4.7672800000000004], [100.19670600000001, 5.3124929999999999], [100.30625999999999, 6.0405620000000004], [100.085757, 6.4644890000000004], [100.259596, 6.6428250000000002], [101.07551599999999, 6.2048670000000001]]], [[[118.61832099999999, 4.4782019999999996], [117.882035, 4.1375510000000002], [117.015214, 4.3060939999999999], [115.865517, 4.306559], [115.51907799999999, 3.169238], [115.13403700000001, 2.821482], [114.62135499999999, 1.430688], [113.80585000000001, 1.217549], [112.859809, 1.49779], [112.380252, 1.410121], [111.79754800000001, 0.90444100000000005], [111.159138, 0.97647799999999996], [110.514061, 0.77313100000000001], [109.83022699999999, 1.338136], [109.66325999999999, 2.0064669999999998], [110.396135, 1.663775], [111.168853, 1.8506370000000001], [111.370081, 2.6973029999999998], [111.79692799999999, 2.8858969999999999], [112.995615, 3.102395], [113.712935, 3.8935089999999999], [114.20401699999999, 4.525874], [114.65959599999999, 4.0076369999999999], [114.869557, 4.3483140000000002], [115.347461, 4.3166359999999999], [115.4057, 4.955228], [115.45071, 5.44773], [116.220741, 6.1431909999999998], [116.725103, 6.9247709999999998], [117.129626, 6.9280530000000002], [117.643393, 6.4221659999999998], [117.689075, 5.9874900000000002], [118.347691, 5.7086959999999998], [119.181904, 5.4078359999999996], [119.110694, 5.0161280000000001], [118.439727, 4.9665189999999999], [118.61832099999999, 4.4782019999999996]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0430\u043b\u0430\u0439\u0437\u0438\u044f", "fr": "Malaisie", "en": "Malaysia", "nl": "Maleisi\u00eb", "pt": "Mal\u00e1sia", "no": "Malaysia", "de": "Malaysia", "it": "Malesia", "sv": "Malaysia", "pl": "Malezja", "fi": "Malesia", "zh": "\u9a6c\u6765\u897f\u4e9a", "ja": "\u30de\u30ec\u30fc\u30b7\u30a2", "es": "Malasia"}, "label_fr": "Malaisie", "name": "Malaysia", "dbpedia_uri": "http://dbpedia.org/resource/Malaysia"}, "id": "MYS"}, {"geometry": {"type": "Polygon", "coordinates": [[[16.344977, -28.576705], [15.601818, -27.821247], [15.210471999999999, -27.090955999999998], [14.989711, -26.117372], [14.743214, -25.39292], [14.408144, -23.853014000000002], [14.385717, -22.656652999999999], [14.257714, -22.111208000000001], [13.868641999999999, -21.699037000000001], [13.352498000000001, -20.872834000000001], [12.826845, -19.673165999999998], [12.608563999999999, -19.045349000000002], [11.794919, -18.069129], [11.734199, -17.301888999999999], [12.215460999999999, -17.111668000000002], [12.814081, -16.941343], [13.462362000000001, -16.971212000000001], [14.058501, -17.423380999999999], [14.209707, -17.353100999999999], [18.263309, -17.309951000000002], [18.956187, -17.789095], [21.377175999999999, -17.930636], [23.215047999999999, -17.523116000000002], [24.033861999999999, -17.295843000000001], [24.682348999999999, -17.353411000000001], [25.07695, -17.578823], [25.084443, -17.661816000000002], [24.520705, -17.887125000000001], [24.217365000000001, -17.889347000000001], [23.579006, -18.281261000000001], [23.196857999999999, -17.869038], [21.65504, -18.219145999999999], [20.910640999999998, -18.252219], [20.881133999999999, -21.814326999999999], [19.895458000000001, -21.849157000000002], [19.895768, -24.767790000000002], [19.894734, -28.461105], [19.002127000000002, -28.972442999999998], [18.464898999999999, -29.045462000000001], [17.836151999999998, -28.856377999999999], [17.387497, -28.783514], [17.218928999999999, -28.355943], [16.824017000000001, -28.082162], [16.344977, -28.576705]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u0430\u043c\u0438\u0431\u0438\u044f", "fr": "Namibie", "en": "Namibia", "nl": "Namibi\u00eb", "pt": "Nam\u00edbia", "no": "Namibia", "de": "Namibia", "it": "Namibia", "sv": "Namibia", "pl": "Namibia", "fi": "Namibia", "zh": "\u7eb3\u7c73\u6bd4\u4e9a", "ja": "\u30ca\u30df\u30d3\u30a2", "es": "Namibia"}, "label_fr": "Namibie", "name": "Namibia", "dbpedia_uri": "http://dbpedia.org/resource/Namibia"}, "id": "NAM"}, {"geometry": {"type": "Polygon", "coordinates": [[[165.77999, -21.080005], [166.59999099999999, -21.700019000000001], [167.12001100000001, -22.159991000000002], [166.74003500000001, -22.399975999999999], [166.18973199999999, -22.129708000000001], [165.47437500000001, -21.679607000000001], [164.829815, -21.149819999999998], [164.16799499999999, -20.444747], [164.029606, -20.105646], [164.45996700000001, -20.120011999999999], [165.020036, -20.459990999999999], [165.46000900000001, -20.800021999999998], [165.77999, -21.080005]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u043e\u0432\u0430\u044f \u041a\u0430\u043b\u0435\u0434\u043e\u043d\u0438\u044f", "fr": "Nouvelle-Cal\u00e9donie", "en": "New Caledonia", "nl": "Nieuw-Caledoni\u00eb (eiland)", "pt": "Nova Caled\u00f3nia", "no": "Ny-Caledonia", "de": "Neukaledonien", "it": "Nuova Caledonia", "sv": "Nya Kaledonien", "pl": "Nowa Kaledonia", "fi": "Uusi-Kaledonia", "zh": "\u65b0\u5580\u91cc\u591a\u5c3c\u4e9e", "ja": "\u30cb\u30e5\u30fc\u30ab\u30ec\u30c9\u30cb\u30a2", "es": "Nueva Caledonia"}, "label_fr": "Nouvelle-Cal\u00e9donie", "name": "New Caledonia", "dbpedia_uri": "http://dbpedia.org/resource/New_Caledonia"}, "id": "NCL"}, {"geometry": {"type": "Polygon", "coordinates": [[[2.154474, 11.940149999999999], [2.177108, 12.625018000000001], [1.024103, 12.851826000000001], [0.99304599999999998, 13.335750000000001], [0.42992799999999998, 13.988733], [0.29564600000000002, 14.444235000000001], [0.374892, 14.928908], [1.0157830000000001, 14.968182000000001], [1.3855280000000001, 15.323561], [2.7499929999999999, 15.409525], [3.6382590000000001, 15.56812], [3.7234219999999998, 16.184284000000002], [4.2702099999999996, 16.852226999999999], [4.2674190000000003, 19.155265], [5.6775659999999997, 19.601206999999999], [8.5728930000000005, 21.565660999999999], [11.999506, 23.471668000000001], [13.581424999999999, 23.040506000000001], [14.143871000000001, 22.491288999999998], [14.8513, 22.862950000000001], [15.096888, 21.308519], [15.471076999999999, 21.048456999999999], [15.487147999999999, 20.730415000000001], [15.903247, 20.387619000000001], [15.685741, 19.957180000000001], [15.300440999999999, 17.927949999999999], [15.247731, 16.627306000000001], [13.972201999999999, 15.684366000000001], [13.540393999999999, 14.367134], [13.956699, 13.996691], [13.954477000000001, 13.353448999999999], [14.595781000000001, 13.330427], [14.495787, 12.859396], [14.213531, 12.802035], [14.181336, 12.483656999999999], [13.995353, 12.461565], [13.318702, 13.556355999999999], [13.083987, 13.596147], [12.302071, 13.037189], [11.527803, 13.32898], [10.989592999999999, 13.387323], [10.701032, 13.246918000000001], [10.114814000000001, 13.277252000000001], [9.5249279999999992, 12.851101999999999], [9.0149329999999992, 12.826658999999999], [7.8046709999999999, 13.343527], [7.3307469999999997, 13.098038000000001], [6.8204419999999999, 13.115091], [6.4454260000000003, 13.492768], [5.4430579999999997, 13.865924], [4.3683439999999996, 13.747482], [4.1079460000000001, 13.531216000000001], [3.9672830000000001, 12.956109], [3.680634, 12.552903000000001], [3.6111800000000001, 11.660167], [2.848643, 12.235636], [2.490164, 12.233052000000001], [2.154474, 11.940149999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u0438\u0433\u0435\u0440", "fr": "Niger", "en": "Niger", "nl": "Niger (land)", "pt": "N\u00edger", "no": "Niger", "de": "Niger", "it": "Niger", "sv": "Niger", "pl": "Niger", "fi": "Niger", "zh": "\u5c3c\u65e5\u5c14", "ja": "\u30cb\u30b8\u30a7\u30fc\u30eb", "es": "N\u00edger"}, "label_fr": "Niger", "name": "Niger", "dbpedia_uri": "http://dbpedia.org/resource/Niger"}, "id": "NER"}, {"geometry": {"type": "Polygon", "coordinates": [[[8.5002879999999994, 4.7719829999999996], [7.4621079999999997, 4.4121079999999999], [7.0825959999999997, 4.4646889999999999], [6.6980719999999998, 4.2405939999999998], [5.8981729999999999, 4.2624529999999998], [5.3628049999999998, 4.8879710000000003], [5.0335739999999998, 5.611802], [4.3256069999999998, 6.270651], [3.5741800000000001, 6.2583000000000002], [2.6917019999999998, 6.2588169999999996], [2.749063, 7.8707339999999997], [2.7237930000000001, 8.5068450000000002], [2.9123079999999999, 9.1376080000000002], [3.2203520000000001, 9.444153], [3.705438, 10.06321], [3.6000700000000001, 10.332186], [3.7971119999999998, 10.734745999999999], [3.5722160000000001, 11.327939000000001], [3.6111800000000001, 11.660167], [3.680634, 12.552903000000001], [3.9672830000000001, 12.956109], [4.1079460000000001, 13.531216000000001], [4.3683439999999996, 13.747482], [5.4430579999999997, 13.865924], [6.4454260000000003, 13.492768], [6.8204419999999999, 13.115091], [7.3307469999999997, 13.098038000000001], [7.8046709999999999, 13.343527], [9.0149329999999992, 12.826658999999999], [9.5249279999999992, 12.851101999999999], [10.114814000000001, 13.277252000000001], [10.701032, 13.246918000000001], [10.989592999999999, 13.387323], [11.527803, 13.32898], [12.302071, 13.037189], [13.083987, 13.596147], [13.318702, 13.556355999999999], [13.995353, 12.461565], [14.181336, 12.483656999999999], [14.577178, 12.085361000000001], [14.468192, 11.904752], [14.415379, 11.572369], [13.572950000000001, 10.798565999999999], [13.308676, 10.160361999999999], [13.1676, 9.6406259999999993], [12.955468, 9.4177719999999994], [12.753672, 8.7177629999999997], [12.218871999999999, 8.3058239999999994], [12.063946, 7.7998079999999996], [11.839309, 7.3970419999999999], [11.745774000000001, 6.9813830000000001], [11.058788, 6.6444270000000003], [10.497375, 7.055358], [10.118277000000001, 7.0387700000000004], [9.5227059999999994, 6.4534820000000002], [9.2331629999999993, 6.4444910000000002], [8.7575330000000005, 5.4796659999999999], [8.5002879999999994, 4.7719829999999996]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u0438\u0433\u0435\u0440\u0438\u044f", "fr": "Nigeria", "en": "Nigeria", "nl": "Nigeria", "pt": "Nig\u00e9ria", "no": "Nigeria", "de": "Nigeria", "it": "Nigeria", "sv": "Nigeria", "pl": "Nigeria", "fi": "Nigeria", "zh": "\u5948\u53ca\u5229\u4e9e", "ja": "\u30ca\u30a4\u30b8\u30a7\u30ea\u30a2", "es": "Nigeria"}, "label_fr": "Nigeria", "name": "Nigeria", "dbpedia_uri": "http://dbpedia.org/resource/Nigeria"}, "id": "NGA"}, {"geometry": {"type": "Polygon", "coordinates": [[[-85.712540000000004, 11.088445], [-86.058487999999997, 11.403439000000001], [-86.525850000000005, 11.806877], [-86.745992000000001, 12.143962], [-87.167516000000006, 12.458258000000001], [-87.668492999999998, 12.90991], [-87.557467000000003, 13.064552000000001], [-87.392386000000002, 12.914018], [-87.316654, 12.984686], [-87.005769000000001, 13.025793999999999], [-86.880556999999996, 13.254204], [-86.733822000000004, 13.263093], [-86.755087000000003, 13.754845], [-86.520707999999999, 13.778487], [-86.312141999999994, 13.771356000000001], [-86.096264000000005, 14.038187000000001], [-85.801294999999996, 13.836055], [-85.698665000000005, 13.960077999999999], [-85.514413000000005, 14.079012000000001], [-85.165364999999994, 14.354369999999999], [-85.148751000000004, 14.560197000000001], [-85.052786999999995, 14.551541], [-84.924501000000006, 14.790493], [-84.820036999999999, 14.819587], [-84.649581999999995, 14.666805], [-84.449336000000002, 14.621613999999999], [-84.228341999999998, 14.748764], [-83.975720999999993, 14.749435999999999], [-83.628585000000001, 14.880074], [-83.489988999999994, 15.016266999999999], [-83.147219000000007, 14.995829000000001], [-83.233233999999996, 14.899865999999999], [-83.284161999999995, 14.676624], [-83.182125999999997, 14.310703], [-83.412499999999994, 13.970078000000001], [-83.519831999999994, 13.567698999999999], [-83.552206999999996, 13.127053999999999], [-83.498514999999998, 12.869292], [-83.473322999999993, 12.419086999999999], [-83.626103999999998, 12.32085], [-83.719612999999995, 11.893124], [-83.650857999999999, 11.629032], [-83.855469999999997, 11.373310999999999], [-83.808936000000003, 11.103044000000001], [-83.655612000000005, 10.938764000000001], [-83.895054000000002, 10.726839], [-84.190179000000001, 10.79345], [-84.355930999999998, 10.999226], [-84.673068999999998, 11.082656999999999], [-84.903002999999998, 10.952303000000001], [-85.561852000000002, 11.217119], [-85.712540000000004, 11.088445]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u0438\u043a\u0430\u0440\u0430\u0433\u0443\u0430", "fr": "Nicaragua", "en": "Nicaragua", "nl": "Nicaragua", "pt": "Nicar\u00e1gua", "no": "Nicaragua", "de": "Nicaragua", "it": "Nicaragua", "sv": "Nicaragua", "pl": "Nikaragua", "fi": "Nicaragua", "zh": "\u5c3c\u52a0\u62c9\u74dc", "ja": "\u30cb\u30ab\u30e9\u30b0\u30a2", "es": "Nicaragua"}, "label_fr": "Nicaragua", "name": "Nicaragua", "dbpedia_uri": "http://dbpedia.org/resource/Nicaragua"}, "id": "NIC"}, {"geometry": {"type": "Polygon", "coordinates": [[[6.0741829999999997, 53.510402999999997], [6.9051400000000003, 53.482162000000002], [7.0920529999999999, 53.144043000000003], [6.8428699999999996, 52.228439999999999], [6.5893969999999999, 51.852029000000002], [5.988658, 51.851616], [6.1566580000000002, 50.803721000000003], [5.6069760000000004, 51.037298], [4.9739909999999998, 51.475023999999998], [4.0470709999999999, 51.267259000000003], [3.3149709999999999, 51.345754999999997], [3.8302890000000001, 51.620545], [4.705997, 53.091797999999997], [6.0741829999999997, 53.510402999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u0438\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u044b", "fr": "Pays-Bas", "en": "Netherlands", "nl": "Nederland", "pt": "Pa\u00edses Baixos", "no": "Nederland", "de": "Niederlande", "it": "Paesi Bassi", "sv": "Nederl\u00e4nderna", "pl": "Holandia", "fi": "Alankomaat", "zh": "\u8377\u5170", "ja": "\u30aa\u30e9\u30f3\u30c0", "es": "Pa\u00edses Bajos"}, "label_fr": "Pays-Bas", "name": "Netherlands", "dbpedia_uri": "http://dbpedia.org/resource/Netherlands"}, "id": "NLD"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[28.165547, 71.185473999999999], [31.293417999999999, 70.453788000000003], [30.005434999999999, 70.186259000000007], [31.101078999999999, 69.558080000000004], [29.399581000000001, 69.156915999999995], [28.591930000000001, 69.064777000000007], [29.015573, 69.766491000000002], [27.732292000000001, 70.164192999999997], [26.179621999999998, 69.825299000000001], [25.689212999999999, 69.092113999999995], [24.735679000000001, 68.649557000000001], [23.662050000000001, 68.891247000000007], [22.356238000000001, 68.841740999999999], [21.244935999999999, 69.370442999999995], [20.645593000000002, 69.106246999999996], [20.025269000000002, 69.065139000000002], [19.87856, 68.407194000000004], [17.993867999999999, 68.567391000000001], [17.729182000000002, 68.010552000000004], [16.768878999999998, 68.013936999999999], [16.108712000000001, 67.302456000000006], [15.108411, 66.193866999999997], [13.55569, 64.787028000000007], [13.919905, 64.445420999999996], [13.571916, 64.049114000000003], [12.579935000000001, 64.066219000000004], [11.930569, 63.128318], [11.992063999999999, 61.800362], [12.631147, 61.293571999999998], [12.300366, 60.117933000000001], [11.468272000000001, 59.432392999999998], [11.027369, 58.856149000000002], [10.356557, 59.469807000000003], [8.3819999999999997, 58.313288], [7.0487479999999998, 58.078884000000002], [5.6658350000000004, 58.588155], [5.3082339999999997, 59.663232000000001], [4.9920780000000002, 61.970998000000002], [5.9128999999999996, 62.614472999999997], [8.5534110000000005, 63.454008000000002], [10.527709, 64.486037999999994], [12.358347, 65.879726000000005], [14.761146, 67.810642000000001], [16.435927, 68.563204999999996], [19.184028000000001, 69.817443999999995], [21.378416000000001, 70.255168999999995], [23.023741999999999, 70.202072000000001], [24.546543, 71.030496999999997], [26.370049999999999, 70.986261999999996], [28.165547, 71.185473999999999]]], [[[24.724119999999999, 77.853849999999994], [22.490320000000001, 77.444929999999999], [20.726009999999999, 77.677040000000005], [21.41611, 77.935040000000001], [20.811900000000001, 78.254630000000006], [22.884260000000001, 78.454939999999993], [23.28134, 78.079539999999994], [24.724119999999999, 77.853849999999994]]], [[[18.251830000000002, 79.701750000000004], [21.54383, 78.956109999999995], [19.027370000000001, 78.562600000000003], [18.471720000000001, 77.826689999999999], [17.59441, 77.637960000000007], [17.118200000000002, 76.80941], [15.91315, 76.770449999999997], [13.762589999999999, 77.380350000000007], [14.669560000000001, 77.735650000000007], [13.1706, 78.024929999999998], [11.22231, 78.869299999999996], [10.44453, 79.652389999999997], [13.170769999999999, 80.010459999999995], [13.71852, 79.660390000000007], [15.14282, 79.674310000000006], [15.522550000000001, 80.016080000000002], [16.990849999999998, 80.05086], [18.251830000000002, 79.701750000000004]]], [[[25.447624999999999, 80.407340000000005], [27.407506000000001, 80.056405999999996], [25.924651000000001, 79.517833999999993], [23.024466, 79.400012000000004], [20.075188000000001, 79.566822999999999], [19.897265999999998, 79.842361999999994], [18.462264000000001, 79.859880000000004], [17.368015, 80.318895999999995], [20.455991999999998, 80.598156000000003], [21.907945000000002, 80.357679000000005], [22.919253000000001, 80.657144000000002], [25.447624999999999, 80.407340000000005]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u043e\u0440\u0432\u0435\u0433\u0438\u044f", "fr": "Norv\u00e8ge", "en": "Norway", "nl": "Noorwegen", "pt": "Noruega", "no": "Norge", "de": "Norwegen", "it": "Norvegia", "sv": "Norge", "pl": "Norwegia", "fi": "Norja", "zh": "\u632a\u5a01", "ja": "\u30ce\u30eb\u30a6\u30a7\u30fc", "es": "Noruega"}, "label_fr": "Norv\u00e8ge", "name": "Norway", "dbpedia_uri": "http://dbpedia.org/resource/Norway"}, "id": "NOR"}, {"geometry": {"type": "Polygon", "coordinates": [[[88.120441, 27.876542000000001], [88.043132999999997, 27.445819], [88.174803999999995, 26.810404999999999], [88.060237999999998, 26.414615000000001], [87.227472000000006, 26.397898000000001], [86.024393000000003, 26.630984999999999], [85.251778999999999, 26.726198], [84.675017999999994, 27.234901000000001], [83.304248999999999, 27.364505999999999], [81.999987000000004, 27.925478999999999], [81.057203000000001, 28.416094999999999], [80.088425000000001, 28.79447], [80.476720999999998, 29.729865], [81.111255999999997, 30.183481], [81.525803999999994, 30.422716999999999], [82.327512999999996, 30.115268], [83.337114999999997, 29.463732], [83.898993000000004, 29.320226000000002], [84.234579999999994, 28.839894000000001], [85.011638000000005, 28.642773999999999], [85.823319999999995, 28.203576000000002], [86.954516999999996, 27.974262], [88.120441, 27.876542000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u0435\u043f\u0430\u043b", "fr": "N\u00e9pal", "en": "Nepal", "nl": "Nepal", "pt": "Nepal", "no": "Nepal", "de": "Nepal", "it": "Nepal", "sv": "Nepal", "pl": "Nepal", "fi": "Nepal", "zh": "\u5c3c\u6cca\u5c14", "ja": "\u30cd\u30d1\u30fc\u30eb", "es": "Nepal"}, "label_fr": "N\u00e9pal", "name": "Nepal", "dbpedia_uri": "http://dbpedia.org/resource/Nepal"}, "id": "NPL"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[173.020375, -40.919052000000001], [173.24723399999999, -41.331999000000003], [173.958405, -40.926701000000001], [174.24758700000001, -41.349155000000003], [174.24851699999999, -41.770007999999997], [173.87644700000001, -42.233184000000001], [173.22273999999999, -42.970038000000002], [172.71124599999999, -43.372287999999998], [173.08011300000001, -43.853344], [172.308584, -43.865693999999998], [171.45292499999999, -44.242519000000001], [171.18513799999999, -44.897103999999999], [170.61669699999999, -45.908929000000001], [169.831422, -46.355775000000001], [169.33233100000001, -46.641235000000002], [168.41135399999999, -46.619945000000001], [167.763745, -46.290196999999999], [166.676886, -46.219917000000002], [166.50914399999999, -45.852705], [167.046424, -45.110940999999997], [168.303763, -44.123972999999999], [168.949409, -43.935819000000002], [169.66781499999999, -43.555326000000001], [170.52492000000001, -43.031688000000003], [171.12509, -42.512754000000001], [171.569714, -41.767423999999998], [171.94870900000001, -41.514417000000002], [172.097227, -40.956104000000003], [172.79857999999999, -40.493962000000003], [173.020375, -40.919052000000001]]], [[[174.612009, -36.156396999999998], [175.33661599999999, -37.209097999999997], [175.357596, -36.526193999999997], [175.808887, -36.798941999999997], [175.95849000000001, -37.555382000000002], [176.763195, -37.881253000000001], [177.43881300000001, -37.961247999999998], [178.01035400000001, -37.579825], [178.51709399999999, -37.695372999999996], [178.274731, -38.582813000000002], [177.97046, -39.166342999999998], [177.20699300000001, -39.145775999999998], [176.93998099999999, -39.449736000000001], [177.03294600000001, -39.879942999999997], [176.88582400000001, -40.065978000000001], [176.508017, -40.604807999999998], [176.01244, -41.289624000000003], [175.23956699999999, -41.688307999999999], [175.06789800000001, -41.425894999999997], [174.65097299999999, -41.281821000000001], [175.22763, -40.459235999999997], [174.90015700000001, -39.908932999999998], [173.82404700000001, -39.508853999999999], [173.852262, -39.146602000000001], [174.57480200000001, -38.797682999999999], [174.74347399999999, -38.027808], [174.69701699999999, -37.381129000000001], [174.29202799999999, -36.711092000000001], [174.31900400000001, -36.534824], [173.84099699999999, -36.121980999999998], [173.054171, -35.237124999999999], [172.63600500000001, -34.529107000000003], [173.00704200000001, -34.450662000000001], [173.551298, -35.006183], [174.32938999999999, -35.265495999999999], [174.612009, -36.156396999999998]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u043e\u0432\u0430\u044f \u0417\u0435\u043b\u0430\u043d\u0434\u0438\u044f", "fr": "Nouvelle-Z\u00e9lande", "en": "New Zealand", "nl": "Nieuw-Zeeland", "pt": "Nova Zel\u00e2ndia", "no": "New Zealand", "de": "Neuseeland", "it": "Nuova Zelanda", "sv": "Nya Zeeland", "pl": "Nowa Zelandia", "fi": "Uusi-Seelanti", "zh": "\u65b0\u897f\u5170", "ja": "\u30cb\u30e5\u30fc\u30b8\u30fc\u30e9\u30f3\u30c9", "es": "Nueva Zelanda"}, "label_fr": "Nouvelle-Z\u00e9lande", "name": "New Zealand", "dbpedia_uri": "http://dbpedia.org/resource/New_Zealand"}, "id": "NZL"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[58.861141000000003, 21.114035000000001], [58.487985999999999, 20.428985999999998], [58.034317999999999, 20.481437], [57.826372999999997, 20.243002000000001], [57.665762000000001, 19.736004999999999], [57.788699999999999, 19.06757], [57.694391000000003, 18.944710000000001], [57.234264000000003, 18.947990999999998], [56.609650999999999, 18.574266999999999], [56.512188999999999, 18.087112999999999], [56.283521, 17.876066999999999], [55.661492000000003, 17.884128], [55.269939000000001, 17.632308999999999], [55.274900000000002, 17.228354], [54.791001999999999, 16.950697000000002], [54.239252999999998, 17.044981], [53.570507999999997, 16.707663], [53.108573, 16.651050999999999], [52.782184000000001, 17.349741999999999], [52.000010000000003, 19.000003], [54.999982000000003, 19.999994000000001], [55.666659000000003, 22.000001000000001], [55.208340999999997, 22.70833], [55.234489000000004, 23.110993000000001], [55.525841, 23.524868999999999], [55.528632000000002, 23.933603999999999], [55.981214000000001, 24.130542999999999], [55.804119, 24.269604000000001], [55.886232999999997, 24.920831], [56.396847000000001, 24.924731999999999], [56.845140000000001, 24.241672999999999], [57.403452999999999, 23.878594], [58.136947999999997, 23.747931000000001], [58.729210999999999, 23.565667999999999], [59.180501999999997, 22.992394999999998], [59.450097999999997, 22.660271000000002], [59.808059999999998, 22.533612000000002], [59.806148, 22.310524999999998], [59.442191000000001, 21.714541000000001], [59.282407999999997, 21.433886000000001], [58.861141000000003, 21.114035000000001]]], [[[56.391421000000001, 25.895990999999999], [56.261042000000003, 25.714606], [56.070821000000002, 26.055464000000001], [56.362017000000002, 26.395934], [56.485678999999998, 26.309118000000002], [56.391421000000001, 25.895990999999999]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041e\u043c\u0430\u043d", "fr": "Oman", "en": "Oman", "nl": "Oman", "pt": "Om\u00e3", "no": "Oman", "de": "Oman", "it": "Oman", "sv": "Oman", "pl": "Oman", "fi": "Oman", "zh": "\u963f\u66fc", "ja": "\u30aa\u30de\u30fc\u30f3", "es": "Om\u00e1n"}, "label_fr": "Oman", "name": "Oman", "dbpedia_uri": "http://dbpedia.org/resource/Oman"}, "id": "OMN"}, {"geometry": {"type": "Polygon", "coordinates": [[[75.158028000000002, 37.133031000000003], [75.896896999999996, 36.666806000000001], [76.192847999999998, 35.898403000000002], [77.837451000000001, 35.494010000000003], [76.871722000000005, 34.653543999999997], [75.757060999999993, 34.504922999999998], [74.240202999999994, 34.748887000000003], [73.749948000000003, 34.317698999999998], [74.104293999999996, 33.441473000000002], [74.451559000000003, 32.764899999999997], [75.258641999999995, 32.271104999999999], [74.405929, 31.692639], [74.421379999999999, 30.979814999999999], [73.450637999999998, 29.976413000000001], [72.823751999999999, 28.961592], [71.777665999999996, 27.913180000000001], [70.616495999999998, 27.989196], [69.514392999999998, 26.940966], [70.168926999999996, 26.491872000000001], [70.282872999999995, 25.722228999999999], [70.844699000000006, 25.215102000000002], [71.043239999999997, 24.356524], [68.842599000000007, 24.359134000000001], [68.176644999999994, 23.691965], [67.443667000000005, 23.944844], [67.145442000000003, 24.663611], [66.372827999999998, 25.425141], [64.530407999999994, 25.237038999999999], [62.905701000000001, 25.218409000000001], [61.497363, 25.078237000000001], [61.874186999999999, 26.239975000000001], [63.316631999999998, 26.756532], [63.233898000000003, 27.217047000000001], [62.755426, 27.378923], [62.727829999999997, 28.259644999999999], [61.771867999999998, 28.699334], [61.369309000000001, 29.303276], [60.874248000000001, 29.829239000000001], [62.549857000000003, 29.318572], [63.550260999999999, 29.468330999999999], [64.148002000000005, 29.340819], [64.350419000000002, 29.560030999999999], [65.046862000000004, 29.472180999999999], [66.346473000000003, 29.887943], [66.381457999999995, 30.738899], [66.938890999999998, 31.304911000000001], [67.683394000000007, 31.303153999999999], [67.792688999999996, 31.582930000000001], [68.556932000000003, 31.71331], [68.926676999999998, 31.620189], [69.317763999999997, 31.901412000000001], [69.262522000000004, 32.501944000000002], [69.687146999999996, 33.105499000000002], [70.323594, 33.358533000000001], [69.930543, 34.020119999999999], [70.881803000000005, 33.988855999999998], [71.156773000000001, 34.348911000000001], [71.115019000000004, 34.733125999999999], [71.613076000000007, 35.153202999999998], [71.498767999999998, 35.650562999999998], [71.262348000000003, 36.074387999999999], [71.846292000000005, 36.509942000000002], [72.920024999999995, 36.720007000000003], [74.067552000000006, 36.836176000000002], [74.575892999999994, 37.020840999999997], [75.158028000000002, 37.133031000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u0430\u043a\u0438\u0441\u0442\u0430\u043d", "fr": "Pakistan", "en": "Pakistan", "nl": "Pakistan", "pt": "Paquist\u00e3o", "no": "Pakistan", "de": "Pakistan", "it": "Pakistan", "sv": "Pakistan", "pl": "Pakistan", "fi": "Pakistan", "zh": "\u5df4\u57fa\u65af\u5766", "ja": "\u30d1\u30ad\u30b9\u30bf\u30f3", "es": "Pakist\u00e1n"}, "label_fr": "Pakistan", "name": "Pakistan", "dbpedia_uri": "http://dbpedia.org/resource/Pakistan"}, "id": "PAK"}, {"geometry": {"type": "Polygon", "coordinates": [[[-77.881570999999994, 7.2237710000000002], [-78.214935999999994, 7.5122549999999997], [-78.429160999999993, 8.0520409999999991], [-78.182096000000001, 8.3191819999999996], [-78.435464999999994, 8.3877050000000004], [-78.622121000000007, 8.7181239999999995], [-79.120306999999997, 8.9960920000000009], [-79.557877000000005, 8.9323750000000004], [-79.760577999999995, 8.5845149999999997], [-80.164480999999995, 8.3333159999999999], [-80.382659000000004, 8.2984089999999995], [-80.480688999999998, 8.0903080000000003], [-80.003690000000006, 7.5475240000000001], [-80.276670999999993, 7.4197540000000002], [-80.421158000000005, 7.2715719999999999], [-80.886401000000006, 7.2205409999999999], [-81.059543000000005, 7.8179210000000001], [-81.189716000000004, 7.6479059999999999], [-81.519514999999998, 7.7066100000000004], [-81.721311, 8.1089629999999993], [-82.131440999999995, 8.1753929999999997], [-82.390934000000001, 8.2923620000000007], [-82.820081000000002, 8.2908639999999991], [-82.850958000000006, 8.0738230000000009], [-82.965783000000002, 8.225028], [-82.913176000000007, 8.4235170000000004], [-82.829770999999994, 8.6262950000000007], [-82.868656999999999, 8.8072660000000003], [-82.719183000000001, 8.9257089999999994], [-82.927154999999999, 9.0743299999999998], [-82.932890999999998, 9.4768120000000007], [-82.546195999999995, 9.5661349999999992], [-82.187123, 9.2074490000000004], [-82.207586000000006, 8.9955750000000005], [-81.808566999999996, 8.9506169999999994], [-81.714153999999994, 9.031955], [-81.439286999999993, 8.7862340000000003], [-80.947301999999993, 8.8585039999999999], [-80.521901, 9.1110720000000001], [-79.914599999999993, 9.3127650000000006], [-79.573302999999996, 9.6116100000000007], [-79.021191999999999, 9.5529309999999992], [-79.058449999999993, 9.4545650000000006], [-78.500888000000003, 9.4204589999999993], [-78.055927999999994, 9.2477300000000007], [-77.729513999999995, 8.9468440000000005], [-77.353361000000007, 8.6705050000000004], [-77.474722999999997, 8.524286], [-77.242565999999997, 7.9352780000000003], [-77.431107999999995, 7.6380610000000004], [-77.753414000000006, 7.7098399999999998], [-77.881570999999994, 7.2237710000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u0430\u043d\u0430\u043c\u0430", "fr": "Panam\u00e1", "en": "Panama", "nl": "Panama (land)", "pt": "Panam\u00e1", "no": "Panama", "de": "Panama", "it": "Panam\u00e1", "sv": "Panama", "pl": "Panama", "fi": "Panama", "zh": "\u5df4\u62ff\u9a6c", "ja": "\u30d1\u30ca\u30de", "es": "Panam\u00e1"}, "label_fr": "Panam\u00e1", "name": "Panama", "dbpedia_uri": "http://dbpedia.org/resource/Panama"}, "id": "PAN"}, {"geometry": {"type": "Polygon", "coordinates": [[[-69.590423999999999, -17.580012], [-69.858444000000006, -18.092694000000002], [-70.372572000000005, -18.347975000000002], [-71.375249999999994, -17.773799], [-71.462040999999999, -17.363488], [-73.44453, -16.359362999999998], [-75.237882999999997, -15.265682999999999], [-76.009204999999994, -14.649286], [-76.423468999999997, -13.823187000000001], [-76.259242, -13.535038999999999], [-77.106191999999993, -12.222716], [-78.092152999999996, -10.377712000000001], [-79.036952999999997, -8.3865680000000005], [-79.445920000000001, -7.9308329999999998], [-79.760577999999995, -7.1943409999999997], [-80.537481999999997, -6.5416679999999996], [-81.249995999999996, -6.1368340000000003], [-80.926347000000007, -5.6905570000000001], [-81.410943000000003, -4.7367650000000001], [-81.099670000000003, -4.0363939999999996], [-80.302560999999997, -3.4048560000000001], [-80.184015000000002, -3.8211620000000002], [-80.469295000000002, -4.0592870000000003], [-80.442241999999993, -4.4257239999999998], [-80.028908000000001, -4.3460910000000004], [-79.624978999999996, -4.4541979999999999], [-79.205288999999993, -4.9591289999999999], [-78.639897000000005, -4.547784], [-78.450683999999995, -3.873097], [-77.837905000000006, -3.0030209999999999], [-76.635394000000005, -2.6086779999999998], [-75.544995999999998, -1.5616099999999999], [-75.233722999999998, -0.91141700000000003], [-75.373222999999996, -0.152032], [-75.106624999999994, -0.057204999999999999], [-74.441601000000006, -0.53081999999999996], [-74.122394999999997, -1.0028330000000001], [-73.659503999999998, -1.260491], [-73.070391999999998, -2.308954], [-72.325787000000005, -2.434218], [-71.774760999999998, -2.1697899999999999], [-71.413646, -2.3428019999999998], [-70.813475999999994, -2.2568649999999999], [-70.047708999999998, -2.7251560000000001], [-70.692682000000005, -3.7428720000000002], [-70.394043999999994, -3.766591], [-69.893635000000003, -4.2981870000000004], [-70.794769000000002, -4.2512650000000001], [-70.928843000000001, -4.4015909999999998], [-71.748406000000003, -4.5939829999999997], [-72.891927999999993, -5.2745610000000003], [-72.964506999999998, -5.7412510000000001], [-73.219711000000004, -6.0891890000000002], [-73.120026999999993, -6.629931], [-73.724486999999996, -6.9185949999999998], [-73.723400999999996, -7.3409990000000001], [-73.987234999999998, -7.5238300000000002], [-73.571059000000005, -8.4244470000000007], [-73.015383, -9.0328330000000001], [-73.226713000000004, -9.4622130000000002], [-72.563033000000004, -9.520194], [-72.184890999999993, -10.053597999999999], [-71.302412000000004, -10.079435999999999], [-70.481893999999997, -9.4901180000000007], [-70.548686000000004, -11.009147], [-70.093751999999995, -11.123972], [-69.529678000000004, -10.951734], [-68.665080000000003, -12.561299999999999], [-68.880080000000007, -12.899729000000001], [-68.929224000000005, -13.602684], [-68.948886999999999, -14.453639000000001], [-69.339534999999998, -14.953194999999999], [-69.160347000000002, -15.323974], [-69.389764, -15.660129], [-68.959635000000006, -16.500698], [-69.590423999999999, -17.580012]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u0435\u0440\u0443", "fr": "P\u00e9rou", "en": "Peru", "nl": "Peru", "pt": "Peru", "no": "Peru", "de": "Peru", "it": "Per\u00f9", "sv": "Peru", "pl": "Peru", "fi": "Peru", "zh": "\u79d8\u9c81", "ja": "\u30da\u30eb\u30fc", "es": "Per\u00fa"}, "label_fr": "P\u00e9rou", "name": "Peru", "dbpedia_uri": "http://dbpedia.org/resource/Peru"}, "id": "PER"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[126.376814, 8.4147060000000007], [126.47851300000001, 7.7503539999999997], [126.537424, 7.189381], [126.19677299999999, 6.2742940000000003], [125.83142100000001, 7.2937149999999997], [125.36385199999999, 6.7864849999999999], [125.683161, 6.0496569999999998], [125.396512, 5.5810029999999999], [124.21978799999999, 6.1613550000000004], [123.93872, 6.8851360000000001], [124.243662, 7.3606100000000003], [123.610212, 7.8335270000000001], [123.296071, 7.418876], [122.825506, 7.4573749999999999], [122.085499, 6.8994239999999998], [121.919928, 7.1921189999999999], [122.312359, 8.0349620000000002], [122.942398, 8.3162369999999992], [123.48768800000001, 8.6930099999999992], [123.841154, 8.2403239999999993], [124.60147000000001, 8.5141580000000001], [124.764612, 8.9604090000000003], [125.471391, 8.9869970000000006], [125.41211800000001, 9.7603349999999995], [126.222714, 9.2860739999999993], [126.30663699999999, 8.7824869999999997], [126.376814, 8.4147060000000007]]], [[[123.982438, 10.278779], [123.623183, 9.9500910000000005], [123.309921, 9.3182690000000008], [122.99588300000001, 9.0221889999999991], [122.380055, 9.7133610000000008], [122.586089, 9.9810449999999999], [122.837081, 10.261157000000001], [122.947411, 10.881868000000001], [123.49885, 10.940624], [123.337774, 10.267384], [124.07793599999999, 11.232726], [123.982438, 10.278779]]], [[[118.504581, 9.3163830000000001], [117.17427499999999, 8.3674999999999997], [117.66447700000001, 9.0668889999999998], [118.386914, 9.6844999999999999], [118.987342, 10.376291999999999], [119.51149599999999, 11.369668000000001], [119.689677, 10.554290999999999], [119.02945800000001, 10.003653], [118.504581, 9.3163830000000001]]], [[[121.883548, 11.891755], [122.48382100000001, 11.582186999999999], [123.120217, 11.58366], [123.100838, 11.165934], [122.637714, 10.741308], [122.00261, 10.441017], [121.967367, 10.905690999999999], [122.03837, 11.415841], [121.883548, 11.891755]]], [[[125.50255199999999, 12.162694999999999], [125.78346500000001, 11.046122], [125.01188399999999, 11.311455], [125.03276099999999, 10.975816], [125.277449, 10.358722], [124.80181899999999, 10.134679], [124.76016799999999, 10.837994999999999], [124.459101, 10.88993], [124.302522, 11.495371], [124.891013, 11.415583], [124.87799, 11.79419], [124.266762, 12.557760999999999], [125.227116, 12.535721000000001], [125.50255199999999, 12.162694999999999]]], [[[121.527394, 13.06959], [121.26219, 12.20556], [120.833896, 12.704496000000001], [120.323436, 13.466412999999999], [121.180128, 13.429697000000001], [121.527394, 13.06959]]], [[[121.321308, 18.504065000000001], [121.937601, 18.218551999999999], [122.24600599999999, 18.478950000000001], [122.336957, 18.224882999999998], [122.174279, 17.810282999999998], [122.515654, 17.093505], [122.25231100000001, 16.262443999999999], [121.662786, 15.931018], [121.50507, 15.124814000000001], [121.728829, 14.328376], [122.258925, 14.218202], [122.70127599999999, 14.336541], [123.950295, 13.782131], [123.855107, 13.237771], [124.18128900000001, 12.997527], [124.07741900000001, 12.536676999999999], [123.298035, 13.027526], [122.928652, 13.55292], [122.67135500000001, 13.185836], [122.03465, 13.784482000000001], [121.126385, 13.636687], [120.628637, 13.857656], [120.679384, 14.271015999999999], [120.99181900000001, 14.525392999999999], [120.693336, 14.756671000000001], [120.564145, 14.396279], [120.070429, 14.970869], [119.920929, 15.406347], [119.88377300000001, 16.363703999999998], [120.28648800000001, 16.034628999999999], [120.390047, 17.599081000000002], [120.715867, 18.505227000000001], [121.321308, 18.504065000000001]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0424\u0438\u043b\u0438\u043f\u043f\u0438\u043d\u044b", "fr": "Philippines", "en": "Philippines", "nl": "Filipijnen", "pt": "Filipinas", "no": "Filippinene", "de": "Philippinen", "it": "Filippine", "sv": "Filippinerna", "pl": "Filipiny", "fi": "Filippiinit", "ja": "\u30d5\u30a3\u30ea\u30d4\u30f3", "es": "Filipinas"}, "label_fr": "Philippines", "name": "Philippines", "dbpedia_uri": "http://dbpedia.org/resource/Philippines"}, "id": "PHL"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[155.88002599999999, -6.8199969999999999], [155.59999099999999, -6.9199909999999996], [155.16699399999999, -6.5359309999999997], [154.72919200000001, -5.9008279999999997], [154.51411400000001, -5.1391179999999999], [154.65250399999999, -5.0424309999999997], [154.75999100000001, -5.3399840000000003], [155.062918, -5.5667920000000004], [155.54774599999999, -6.2006550000000002], [156.01996500000001, -6.5400140000000002], [155.88002599999999, -6.8199969999999999]]], [[[151.98279600000001, -5.4780629999999997], [151.45910699999999, -5.5602799999999997], [151.30139, -5.8407280000000004], [150.754447, -6.0837630000000003], [150.241197, -6.3177539999999999], [149.70996299999999, -6.3165129999999996], [148.89006499999999, -6.0260400000000001], [148.31893700000001, -5.7471420000000002], [148.401826, -5.4377560000000003], [149.29841200000001, -5.583742], [149.845562, -5.505503], [149.99625, -5.0261009999999997], [150.13975600000001, -5.0013480000000001], [150.236908, -5.5322199999999997], [150.807467, -5.4558419999999996], [151.08967200000001, -5.1136929999999996], [151.64788100000001, -4.7570740000000002], [151.53786199999999, -4.1678069999999998], [152.13679200000001, -4.14879], [152.33874299999999, -4.3129660000000003], [152.318693, -4.867661], [151.98279600000001, -5.4780629999999997]]], [[[147.19187400000001, -7.3880239999999997], [148.08463599999999, -8.0441079999999996], [148.734105, -9.1046639999999996], [149.30683500000001, -9.0714360000000003], [149.26663099999999, -9.5144059999999993], [150.03872799999999, -9.6843179999999993], [149.738798, -9.8729370000000003], [150.80162799999999, -10.293687], [150.690575, -10.582713], [150.02839299999999, -10.652476], [149.78231, -10.393267], [148.92313799999999, -10.280923], [147.91301799999999, -10.130440999999999], [147.13544300000001, -9.4924440000000008], [146.567881, -8.9425550000000005], [146.04848100000001, -8.0674139999999994], [144.744168, -7.630128], [143.897088, -7.91533], [143.28637599999999, -8.2454909999999995], [143.41391300000001, -8.9830690000000004], [142.62843100000001, -9.3268210000000007], [142.06825900000001, -9.1595960000000005], [141.033852, -9.1178930000000005], [141.01705699999999, -5.8590220000000004], [141.00021000000001, -2.6001509999999999], [142.73524699999999, -3.2891530000000002], [144.58397099999999, -3.861418], [145.27318, -4.3737380000000003], [145.82978600000001, -4.8764979999999998], [145.981922, -5.4656089999999997], [147.64807300000001, -6.0836589999999999], [147.891108, -6.6140150000000002], [146.97090499999999, -6.7216570000000004], [147.19187400000001, -7.3880239999999997]]], [[[153.140038, -4.4999830000000003], [152.827292, -4.7664270000000002], [152.63867300000001, -4.1761270000000001], [152.406026, -3.7897430000000001], [151.953237, -3.462062], [151.38427899999999, -3.0354220000000001], [150.66204999999999, -2.7414860000000001], [150.939965, -2.5000019999999998], [151.479984, -2.7799849999999999], [151.82001500000001, -2.9999720000000001], [152.23998900000001, -3.2400090000000001], [152.640017, -3.659983], [153.019994, -3.9800149999999999], [153.140038, -4.4999830000000003]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u0430\u043f\u0443\u0430 \u2014 \u041d\u043e\u0432\u0430\u044f \u0413\u0432\u0438\u043d\u0435\u044f", "fr": "Papouasie-Nouvelle-Guin\u00e9e", "en": "Papua New Guinea", "nl": "Papoea-Nieuw-Guinea", "pt": "Papua-Nova Guin\u00e9", "no": "Papua Ny-Guinea", "de": "Papua-Neuguinea", "it": "Papua Nuova Guinea", "sv": "Papua Nya Guinea", "pl": "Papua-Nowa Gwinea", "fi": "Papua-Uusi-Guinea", "zh": "\u5df4\u5e03\u4e9a\u65b0\u51e0\u5185\u4e9a", "ja": "\u30d1\u30d7\u30a2\u30cb\u30e5\u30fc\u30ae\u30cb\u30a2", "es": "Pap\u00faa Nueva Guinea"}, "label_fr": "Papouasie-Nouvelle-Guin\u00e9e", "name": "Papua New Guinea", "dbpedia_uri": "http://dbpedia.org/resource/Papua_New_Guinea"}, "id": "PNG"}, {"geometry": {"type": "Polygon", "coordinates": [[[15.016996000000001, 51.106673999999998], [14.607098000000001, 51.745187999999999], [14.685026000000001, 52.089947000000002], [14.4376, 52.624850000000002], [14.074521000000001, 52.981262999999998], [14.353315, 53.248170999999999], [14.119686, 53.757029000000003], [14.802899999999999, 54.050705999999998], [16.363477, 54.513159000000002], [17.622831999999999, 54.851536000000003], [18.620858999999999, 54.682606], [18.696255000000001, 54.438718999999999], [19.660640000000001, 54.426084000000003], [20.892244999999999, 54.312525000000001], [22.731099, 54.327537], [23.243987000000001, 54.220567000000003], [23.484127999999998, 53.912497999999999], [23.527536000000001, 53.470122000000003], [23.804935, 53.089731], [23.799199000000002, 52.691099000000001], [23.199494000000001, 52.486977000000003], [23.508002000000001, 52.023646999999997], [23.527070999999999, 51.578454000000001], [24.029986000000001, 50.705407000000001], [23.922757000000001, 50.424880999999999], [23.426507999999998, 50.308506000000001], [22.518450000000001, 49.476773999999999], [22.776419000000001, 49.027394999999999], [22.558138, 49.085737999999999], [21.607807999999999, 49.470106999999999], [20.887955000000002, 49.328772000000001], [20.415838999999998, 49.431452999999998], [19.825023000000002, 49.217125000000003], [19.320713000000001, 49.571573999999998], [18.909575, 49.435845999999998], [18.853144, 49.496229999999997], [18.392914000000001, 49.988629000000003], [17.649445, 50.049038000000003], [17.554566999999999, 50.362146000000003], [16.868769, 50.473973999999998], [16.719476, 50.215747], [16.176252999999999, 50.422606999999999], [16.238627000000001, 50.697732999999999], [15.490971999999999, 50.784730000000003], [15.016996000000001, 51.106673999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u043e\u043b\u044c\u0448\u0430", "fr": "Pologne", "en": "Poland", "nl": "Polen", "pt": "Pol\u00f3nia", "no": "Polen", "de": "Polen", "it": "Polonia", "sv": "Polen", "pl": "Polska", "fi": "Puola", "zh": "\u6ce2\u5170", "ja": "\u30dd\u30fc\u30e9\u30f3\u30c9", "es": "Polonia"}, "label_fr": "Pologne", "name": "Poland", "dbpedia_uri": "http://dbpedia.org/resource/Poland"}, "id": "POL"}, {"geometry": {"type": "Polygon", "coordinates": [[[-66.282433999999995, 18.514762000000001], [-65.771303000000003, 18.426679], [-65.591003999999998, 18.228034999999998], [-65.847164000000006, 17.975905999999998], [-66.599934000000005, 17.981822999999999], [-67.184162000000001, 17.946553000000002], [-67.242428000000004, 18.374459999999999], [-67.100679, 18.520600999999999], [-66.282433999999995, 18.514762000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u0443\u044d\u0440\u0442\u043e-\u0420\u0438\u043a\u043e", "fr": "Porto Rico", "en": "Puerto Rico", "nl": "Puerto Rico", "pt": "Porto Rico", "no": "Puerto Rico", "de": "Puerto Rico", "it": "Porto Rico", "sv": "Puerto Rico", "pl": "Portoryko", "fi": "Puerto Rico", "zh": "\u6ce2\u591a\u9ece\u5404", "ja": "\u30d7\u30a8\u30eb\u30c8\u30ea\u30b3", "es": "Puerto Rico"}, "label_fr": "Porto Rico", "name": "Puerto Rico", "dbpedia_uri": "http://dbpedia.org/resource/Puerto_Rico"}, "id": "PRI"}, {"geometry": {"type": "Polygon", "coordinates": [[[130.640016, 42.395009000000002], [130.78000700000001, 42.220007000000003], [130.40003100000001, 42.280003999999998], [129.96594899999999, 41.941367999999997], [129.667362, 41.601103999999999], [129.70518899999999, 40.882828000000003], [129.18811500000001, 40.661808000000001], [129.0104, 40.485436], [128.63336799999999, 40.189847], [127.96741400000001, 40.025413], [127.53343599999999, 39.75685], [127.50212000000001, 39.323931000000002], [127.385434, 39.213472000000003], [127.783343, 39.050897999999997], [128.349716, 38.612242999999999], [128.205746, 38.370396999999997], [127.780035, 38.304535999999999], [127.07330899999999, 38.256115000000001], [126.68371999999999, 37.804772999999997], [126.23733900000001, 37.840378000000001], [126.17475899999999, 37.749685999999997], [125.689104, 37.940010000000001], [125.568439, 37.752088999999998], [125.27533, 37.669071000000002], [125.240087, 37.857224000000002], [124.981033, 37.948821000000002], [124.71216099999999, 38.108345999999997], [124.98599400000001, 38.548473999999999], [125.221949, 38.665857000000003], [125.132859, 38.848559000000002], [125.38659, 39.387957999999998], [125.321116, 39.551385000000003], [124.737482, 39.660344000000002], [124.265625, 39.928493000000003], [125.079942, 40.569823999999997], [126.182045, 41.107335999999997], [126.869083, 41.816569000000001], [127.343783, 41.503152], [128.20843300000001, 41.466771999999999], [128.05221499999999, 41.994284999999998], [129.59666899999999, 42.424982], [129.99426700000001, 42.985387000000003], [130.640016, 42.395009000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u043e\u0440\u0435\u0439\u0441\u043a\u0430\u044f \u041d\u0430\u0440\u043e\u0434\u043d\u043e-\u0414\u0435\u043c\u043e\u043a\u0440\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430", "fr": "Cor\u00e9e du Nord", "en": "North Korea", "nl": "Noord-Korea", "pt": "Coreia do Norte", "no": "Nord-Korea", "de": "Nordkorea", "it": "Corea del Nord", "sv": "Nordkorea", "pl": "Korea P\u00f3\u0142nocna", "fi": "Korean demokraattinen kansantasavalta", "zh": "\u671d\u9c9c\u6c11\u4e3b\u4e3b\u4e49\u4eba\u6c11\u5171\u548c\u56fd", "ja": "\u671d\u9bae\u6c11\u4e3b\u4e3b\u7fa9\u4eba\u6c11\u5171\u548c\u56fd", "es": "Corea del Norte"}, "label_fr": "Cor\u00e9e du Nord", "name": "North Korea", "dbpedia_uri": "http://dbpedia.org/resource/North_Korea"}, "id": "PRK"}, {"geometry": {"type": "Polygon", "coordinates": [[[-9.0348179999999996, 41.880571000000003], [-8.6719460000000002, 42.134689000000002], [-8.2638569999999998, 42.280468999999997], [-8.0131750000000004, 41.790886], [-7.4225130000000004, 41.792074999999997], [-7.251309, 41.918346], [-6.6686059999999996, 41.883386999999999], [-6.3890880000000001, 41.381815000000003], [-6.851127, 41.111083000000001], [-6.86402, 40.330871999999999], [-7.0264129999999998, 40.184524000000003], [-7.066592, 39.711891999999999], [-7.4986319999999997, 39.629570999999999], [-7.0980369999999997, 39.030073000000002], [-7.3740920000000001, 38.373058999999998], [-7.0292810000000001, 38.075763999999999], [-7.1665080000000003, 37.803894], [-7.5371050000000004, 37.428904000000003], [-7.4537259999999996, 37.097788000000001], [-7.855613, 36.838268999999997], [-8.382816, 36.978879999999997], [-8.8988569999999996, 36.868808999999999], [-8.7461009999999995, 37.651345999999997], [-8.8399979999999996, 38.266243000000003], [-9.2874639999999999, 38.358485999999999], [-9.5265710000000006, 38.737428999999999], [-9.4469890000000003, 39.392066], [-9.0483049999999992, 39.755093000000002], [-8.9773530000000008, 40.159306000000001], [-8.7686840000000004, 40.760638999999998], [-8.7908530000000003, 41.184334], [-8.9907889999999995, 41.543458999999999], [-9.0348179999999996, 41.880571000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u0438\u044f", "fr": "Portugal", "en": "Portugal", "nl": "Portugal", "pt": "Portugal", "no": "Portugal", "de": "Portugal", "it": "Portogallo", "sv": "Portugal", "pl": "Portugalia", "fi": "Portugali", "zh": "\u8461\u8404\u7259", "ja": "\u30dd\u30eb\u30c8\u30ac\u30eb", "es": "Portugal"}, "label_fr": "Portugal", "name": "Portugal", "dbpedia_uri": "http://dbpedia.org/resource/Portugal"}, "id": "PRT"}, {"geometry": {"type": "Polygon", "coordinates": [[[-62.685057, -22.249029], [-62.291179, -21.051635000000001], [-62.265960999999997, -20.513735], [-61.786326000000003, -19.633737], [-60.043565000000001, -19.342746999999999], [-59.115042000000003, -19.356905999999999], [-58.183470999999997, -19.868399], [-58.166392000000002, -20.176701000000001], [-57.870674000000001, -20.732688], [-57.937156000000002, -22.090176], [-56.881509999999999, -22.282153999999998], [-56.473317000000002, -22.086300000000001], [-55.797958000000001, -22.356929999999998], [-55.610683000000002, -22.655619000000002], [-55.517639000000003, -23.571998000000001], [-55.400747000000003, -23.956935000000001], [-55.027901999999997, -24.001273999999999], [-54.652833999999999, -23.839577999999999], [-54.292960000000001, -24.021014000000001], [-54.293475999999998, -24.570799999999998], [-54.428946000000003, -25.162185000000001], [-54.625290999999997, -25.739255], [-54.788795, -26.621786], [-55.695846000000003, -27.387837000000001], [-56.486702000000001, -27.548499], [-57.609760000000001, -27.395899], [-58.618174000000003, -27.123719000000001], [-57.633659999999999, -25.603656999999998], [-57.777217, -25.16234], [-58.807127999999999, -24.771459], [-60.028965999999997, -24.032796000000001], [-60.846564999999998, -23.880713], [-62.685057, -22.249029]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u0430\u0440\u0430\u0433\u0432\u0430\u0439", "fr": "Paraguay", "en": "Paraguay", "nl": "Paraguay", "pt": "Paraguai", "no": "Paraguay", "de": "Paraguay", "it": "Paraguay", "sv": "Paraguay", "pl": "Paragwaj", "fi": "Paraguay", "zh": "\u5df4\u62c9\u572d", "ja": "\u30d1\u30e9\u30b0\u30a2\u30a4", "es": "Paraguay"}, "label_fr": "Paraguay", "name": "Paraguay", "dbpedia_uri": "http://dbpedia.org/resource/Paraguay"}, "id": "PRY"}, {"geometry": {"type": "Polygon", "coordinates": [[[50.810108, 24.754743000000001], [50.743910999999997, 25.482424000000002], [51.013351999999998, 26.006992], [51.286462, 26.114581999999999], [51.589078999999998, 25.801113000000001], [51.606699999999996, 25.215669999999999], [51.389608000000003, 24.627386000000001], [51.112414999999999, 24.556331], [50.810108, 24.754743000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0430\u0442\u0430\u0440", "fr": "Qatar", "en": "Qatar", "nl": "Qatar", "pt": "Qatar", "no": "Qatar", "de": "Katar", "it": "Qatar", "sv": "Qatar", "pl": "Katar", "fi": "Qatar", "zh": "\u5361\u5854\u5c14", "ja": "\u30ab\u30bf\u30fc\u30eb", "es": "Catar"}, "label_fr": "Qatar", "name": "Qatar", "dbpedia_uri": "http://dbpedia.org/resource/Qatar"}, "id": "QAT"}, {"geometry": {"type": "Polygon", "coordinates": [[[22.710531, 47.882193999999998], [23.142236, 48.096341000000002], [23.760957999999999, 47.985598000000003], [24.402056000000002, 47.981878000000002], [24.866316999999999, 47.737526000000003], [25.207743000000001, 47.891055999999999], [25.945941000000001, 47.987149000000002], [26.19745, 48.220880999999999], [26.619337000000002, 48.220725999999999], [26.924175999999999, 48.123263999999999], [27.233872999999999, 47.826771000000001], [27.551165999999998, 47.405116999999997], [28.128029999999999, 46.810476000000001], [28.160018000000001, 46.371563000000002], [28.054442999999999, 45.944586000000001], [28.233554000000002, 45.488283000000003], [28.679779, 45.304031000000002], [29.149725, 45.464925000000001], [29.603289, 45.293308000000003], [29.626543000000002, 45.035390999999997], [29.141611999999999, 44.820210000000003], [28.837858000000001, 44.913874], [28.558081000000001, 43.707462], [27.970106999999999, 43.812468000000003], [27.2424, 44.175986000000002], [26.065159000000001, 43.943494000000001], [25.569272000000002, 43.688445000000002], [24.100679, 43.741050999999999], [23.332301999999999, 43.897010999999999], [22.944832000000002, 43.823785000000001], [22.657150000000001, 44.234923000000002], [22.474008000000001, 44.409227999999999], [22.705725999999999, 44.578003000000002], [22.459022000000001, 44.702517], [22.145088000000001, 44.478422000000002], [21.562023, 44.768946999999997], [21.483526000000001, 45.181170000000002], [20.874313000000001, 45.416375000000002], [20.762174999999999, 45.734572999999997], [20.220192000000001, 46.127468999999998], [21.021951999999999, 46.316088000000001], [21.626515000000001, 46.994238000000003], [22.099768000000001, 47.672438999999997], [22.710531, 47.882193999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0420\u0443\u043c\u044b\u043d\u0438\u044f", "fr": "Roumanie", "en": "Romania", "nl": "Roemeni\u00eb", "pt": "Rom\u00e9nia", "no": "Romania", "de": "Rum\u00e4nien", "it": "Romania", "sv": "Rum\u00e4nien", "pl": "Rumunia", "fi": "Romania", "zh": "\u7f85\u99ac\u5c3c\u4e9e", "ja": "\u30eb\u30fc\u30de\u30cb\u30a2", "es": "Rumania"}, "label_fr": "Roumanie", "name": "Romania", "dbpedia_uri": "http://dbpedia.org/resource/Romania"}, "id": "ROU"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[143.64800700000001, 50.747599999999998], [144.65414799999999, 48.976391], [143.17392799999999, 49.306550999999999], [142.55866800000001, 47.861575000000002], [143.533492, 46.836728000000001], [143.50527700000001, 46.137908000000003], [142.74770100000001, 46.740765000000003], [142.09202999999999, 45.966754999999999], [141.906925, 46.805928999999999], [142.01844299999999, 47.780132999999999], [141.90444500000001, 48.859189000000001], [142.13579999999999, 49.615163000000003], [142.17998299999999, 50.952342000000002], [141.594076, 51.935434999999998], [141.682546, 53.301966], [142.606934, 53.762144999999997], [142.20974899999999, 54.225476], [142.654786, 54.365881000000002], [142.914616, 53.704577999999998], [143.26084800000001, 52.740760000000002], [143.23526799999999, 51.756659999999997], [143.64800700000001, 50.747599999999998]]], [[[22.731099, 54.327537], [20.892244999999999, 54.312525000000001], [19.660640000000001, 54.426084000000003], [19.888480999999999, 54.866160000000001], [21.268449, 55.190482000000003], [22.315723999999999, 55.015298999999999], [22.757764000000002, 54.856574000000002], [22.651052, 54.582740999999999], [22.731099, 54.327537]]], [[[-175.01425, 66.584350000000001], [-174.33983000000001, 66.335560000000001], [-174.57182, 67.062190000000001], [-171.85731000000001, 66.913079999999994], [-169.89957999999999, 65.977239999999995], [-170.89107000000001, 65.541390000000007], [-172.53025, 65.437910000000002], [-172.55500000000001, 64.460790000000003], [-172.95533, 64.252690000000001], [-173.89184, 64.282600000000002], [-174.65392, 64.631249999999994], [-175.98353, 64.922880000000006], [-176.20715999999999, 65.356669999999994], [-177.22265999999999, 65.520240000000001], [-178.35992999999999, 65.390519999999995], [-178.90332000000001, 65.740440000000007], [-178.68611000000001, 66.112110000000001], [-179.88377, 65.874560000000002], [-179.43268, 65.404110000000003], [-180, 64.979709], [-180, 68.963635999999994], [-177.55000000000001, 68.200000000000003], [-174.92824999999999, 67.205889999999997], [-175.01425, 66.584350000000001]]], [[[180, 70.832199000000003], [178.903425, 70.781139999999994], [178.7253, 71.098799999999997], [180, 71.515714000000003], [180, 70.832199000000003]]], [[[-178.69378, 70.893020000000007], [-180, 70.832199000000003], [-180, 71.515714000000003], [-179.87187499999999, 71.55762], [-179.02432999999999, 71.555530000000005], [-177.577945, 71.269480000000001], [-177.66357500000001, 71.132769999999994], [-178.69378, 70.893020000000007]]], [[[143.60384999999999, 73.212440000000001], [142.08762999999999, 73.205439999999996], [140.03815499999999, 73.316919999999996], [139.86312000000001, 73.369829999999993], [140.81171000000001, 73.765060000000005], [142.06207000000001, 73.857579999999999], [143.48283000000001, 73.475250000000003], [143.60384999999999, 73.212440000000001]]], [[[150.73167000000001, 75.084059999999994], [149.57592500000001, 74.688919999999996], [147.977465, 74.778355000000005], [146.11919, 75.172979999999995], [146.358485, 75.49682], [148.22223, 75.345844999999997], [150.73167000000001, 75.084059999999994]]], [[[145.086285, 75.562624999999997], [144.30000000000001, 74.819999999999993], [140.61381, 74.847679999999997], [138.95544000000001, 74.61148], [136.97439, 75.261669999999995], [137.51176000000001, 75.949169999999995], [138.831075, 76.136759999999995], [141.47161500000001, 76.092889999999997], [145.086285, 75.562624999999997]]], [[[57.535693000000002, 70.720464000000007], [56.944978999999996, 70.632743000000005], [53.677374999999998, 70.762658000000002], [53.412016999999999, 71.206661999999994], [51.601894999999999, 71.474759000000006], [51.455753999999999, 72.014881000000003], [52.478274999999996, 72.229442000000006], [52.444169000000002, 72.774731000000003], [54.427613999999998, 73.627548000000004], [53.508290000000002, 73.749814000000001], [55.902459, 74.627486000000005], [55.631932999999997, 75.081412], [57.868644000000003, 75.609390000000005], [61.170043999999997, 76.251883000000007], [64.498367999999999, 76.439054999999996], [66.210977, 76.809781999999998], [68.157060000000001, 76.939696999999995], [68.852210999999997, 76.544810999999996], [68.180572999999995, 76.233642000000003], [64.637326000000002, 75.737755000000007], [61.583508000000002, 75.260885000000002], [58.477082000000003, 74.309055999999998], [56.986786000000002, 73.333044000000001], [55.419336000000001, 72.371268000000001], [55.622838000000002, 71.540594999999996], [57.535693000000002, 70.720464000000007]]], [[[106.97013, 76.974189999999993], [107.23999999999999, 76.480000000000004], [108.1538, 76.723349999999996], [111.07726, 76.709999999999994], [113.33150999999999, 76.222239999999999], [114.13417, 75.847639999999998], [113.88539, 75.327789999999993], [112.77918, 75.031859999999995], [110.15125, 74.476730000000003], [109.40000000000001, 74.180000000000007], [110.64, 74.040000000000006], [112.11919, 73.787739999999999], [113.01954000000001, 73.976929999999996], [113.52958, 73.335049999999995], [113.96881, 73.594880000000003], [115.56782, 73.752849999999995], [118.77633, 73.587720000000004], [119.02, 73.120000000000005], [123.20066, 72.971220000000002], [123.25776999999999, 73.735029999999995], [125.38, 73.560000000000002], [126.97644, 73.565489999999997], [128.59126000000001, 73.038709999999995], [129.05157, 72.398719999999997], [128.46000000000001, 71.980000000000004], [129.71599000000001, 71.193039999999996], [131.28858, 70.786990000000003], [132.2535, 71.836299999999994], [133.85766000000001, 71.386420000000001], [135.56192999999999, 71.655249999999995], [137.49754999999999, 71.347629999999995], [138.23409000000001, 71.628029999999995], [139.86983000000001, 71.487830000000002], [139.14791, 72.41619], [140.46816999999999, 72.849410000000006], [149.5, 72.200000000000003], [150.35118, 71.606430000000003], [152.96889999999999, 70.842219999999998], [157.00688, 71.031409999999994], [158.99779000000001, 70.866720000000001], [159.83031, 70.453239999999994], [159.70866000000001, 69.721980000000002], [160.94053, 69.437280000000001], [162.27906999999999, 69.642039999999994], [164.05248, 69.668229999999994], [165.94037, 69.471990000000005], [167.83566999999999, 69.582689999999999], [169.57763, 68.693799999999996], [170.81688, 69.013630000000006], [170.00819999999999, 69.652760000000001], [170.45345, 70.097030000000004], [173.64391000000001, 69.817430000000002], [175.72403, 69.877250000000004], [178.59999999999999, 69.400000000000006], [180, 68.963635999999994], [180, 64.979709], [179.99280999999999, 64.974329999999995], [178.7072, 64.534930000000003], [177.41128, 64.60821], [178.31299999999999, 64.07593], [178.90825000000001, 63.25197], [179.37034, 62.982619999999997], [179.48635999999999, 62.568939999999998], [179.22825, 62.304099999999998], [177.36429999999999, 62.521900000000002], [174.56929, 61.769150000000003], [173.68012999999999, 61.652610000000003], [172.15000000000001, 60.950000000000003], [170.6985, 60.336179999999999], [170.33085, 59.881770000000003], [168.90046000000001, 60.573549999999997], [166.29498000000001, 59.788550000000001], [165.84, 60.159999999999997], [164.87674000000001, 59.7316], [163.53928999999999, 59.86871], [163.21710999999999, 59.211010000000002], [162.01732999999999, 58.243279999999999], [162.05296999999999, 57.839120000000001], [163.19191000000001, 57.615029999999997], [163.05794, 56.159239999999997], [162.12958, 56.122190000000003], [161.70146, 55.285679999999999], [162.11749, 54.855139999999999], [160.36877000000001, 54.344329999999999], [160.02172999999999, 53.202570000000001], [158.53093999999999, 52.958680000000001], [158.23117999999999, 51.942689999999999], [156.78979000000001, 51.011049999999997], [156.41999999999999, 51.700000000000003], [155.99181999999999, 53.158949999999997], [155.43366, 55.381030000000003], [155.91442000000001, 56.767919999999997], [156.75815, 57.364699999999999], [156.81035, 57.832039999999999], [158.36433, 58.055750000000003], [160.15064000000001, 59.314770000000003], [161.87204, 60.343000000000004], [163.66969, 61.140900000000002], [164.47354999999999, 62.550609999999999], [163.25842, 62.466270000000002], [162.65790999999999, 61.642499999999998], [160.12147999999999, 60.544229999999999], [159.30232000000001, 61.773960000000002], [156.72067999999999, 61.434420000000003], [154.21806000000001, 59.758180000000003], [155.04374999999999, 59.144950000000001], [152.81184999999999, 58.883850000000002], [151.26572999999999, 58.780889999999999], [151.33815000000001, 59.503959999999999], [149.78371000000001, 59.655729999999998], [148.54481000000001, 59.164479999999998], [145.48722000000001, 59.336370000000002], [142.19782000000001, 59.03998], [138.95848000000001, 57.088050000000003], [135.12619000000001, 54.729590000000002], [136.70170999999999, 54.603549999999998], [137.19342, 53.977319999999999], [138.16470000000001, 53.755009999999999], [138.80463, 54.254550000000002], [139.90151, 54.189680000000003], [141.34531000000001, 53.089570000000002], [141.37923000000001, 52.238770000000002], [140.59742, 51.239669999999997], [140.51308, 50.045529999999999], [140.06192999999999, 48.446710000000003], [138.55472, 46.999650000000003], [138.21970999999999, 46.307949999999998], [136.86232000000001, 45.143500000000003], [135.51535000000001, 43.988999999999997], [134.86939000000001, 43.398209999999999], [133.53686999999999, 42.81147], [132.90627000000001, 42.798490000000001], [132.27807000000001, 43.284559999999999], [130.93586999999999, 42.55274], [130.78, 42.219999999999999], [130.63999999999999, 42.395000000000003], [130.63386600000001, 42.903015000000003], [131.144688, 42.929989999999997], [131.288555, 44.111519999999999], [131.02519000000001, 44.967959999999998], [131.883454, 45.321162000000001], [133.09711999999999, 45.144089999999998], [133.769644, 46.116926999999997], [134.11234999999999, 47.212479999999999], [134.50081, 47.578449999999997], [135.02631099999999, 48.478230000000003], [133.37359599999999, 48.183441999999999], [132.50668999999999, 47.788960000000003], [130.98725999999999, 47.790129999999998], [130.58229299999999, 48.729686999999998], [129.397818, 49.440600000000003], [127.6574, 49.760269999999998], [127.28745600000001, 50.739797000000003], [126.93915699999999, 51.353893999999997], [126.56439899999999, 51.784255000000002], [125.946349, 52.792799000000002], [125.06821100000001, 53.161045000000001], [123.57147000000001, 53.458799999999997], [122.24574800000001, 53.431725999999998], [121.003085, 53.251401000000001], [120.177089, 52.753886000000001], [120.72578900000001, 52.516226000000003], [120.73820000000001, 51.964109999999998], [120.18208, 51.643549999999998], [119.27939000000001, 50.582920000000001], [119.288461, 50.142882999999998], [117.879244, 49.510983000000003], [116.67880100000001, 49.888531], [115.48569500000001, 49.805177], [114.96211, 50.140247000000002], [114.36245599999999, 50.248303], [112.89774, 49.543565000000001], [111.581231, 49.377968000000003], [110.66201100000001, 49.130127999999999], [109.402449, 49.292960999999998], [108.475167, 49.282547999999998], [107.86817600000001, 49.793705000000003], [106.88880399999999, 50.274296], [105.886591, 50.406019000000001], [104.62157999999999, 50.275320000000001], [103.676545, 50.089965999999997], [102.25588999999999, 50.510559999999998], [102.06520999999999, 51.259909999999998], [100.88948000000001, 51.516855999999997], [99.981731999999994, 51.634005999999999], [98.861491000000001, 52.047365999999997], [97.825739999999996, 51.010995000000001], [98.231762000000003, 50.422401000000001], [97.25976, 49.726050000000001], [95.814019999999999, 49.977460000000001], [94.815949000000003, 50.013432999999999], [94.147565999999998, 50.480536999999998], [93.104209999999995, 50.495289999999997], [92.234712000000002, 50.802171000000001], [90.713667000000001, 50.331811999999999], [88.805566999999996, 49.470520999999998], [87.751264000000006, 49.297198000000002], [87.359970000000004, 49.214981000000002], [86.829357000000002, 49.826675000000002], [85.541269999999997, 49.692858999999999], [85.115560000000002, 50.117303], [84.416376999999997, 50.311399999999999], [83.935114999999996, 50.889246], [83.383004, 51.069183000000002], [81.945986000000005, 50.812196], [80.568447000000006, 51.388336000000002], [80.035560000000004, 50.864750999999998], [77.800916000000001, 53.404415], [76.525178999999994, 54.177002999999999], [76.891099999999994, 54.490524000000001], [74.384820000000005, 53.546849999999999], [73.425679000000002, 53.489809999999999], [73.508516, 54.035617000000002], [72.224149999999995, 54.376655], [71.180131000000003, 54.133285000000001], [70.865267000000003, 55.169733999999998], [69.068167000000003, 55.385249999999999], [68.1691, 54.970391999999997], [65.666870000000003, 54.60125], [65.178533999999999, 54.354227999999999], [61.436599999999999, 54.006250000000001], [60.978065999999998, 53.664993000000003], [61.699986000000003, 52.979996], [60.739992999999998, 52.719985999999999], [60.927269000000003, 52.447547999999998], [59.967534000000001, 51.960419999999999], [61.588003, 51.272658999999997], [61.337423999999999, 50.79907], [59.932806999999997, 50.842193999999999], [59.642282000000002, 50.545442000000001], [58.363320000000002, 51.063639999999999], [56.777979999999999, 51.043550000000003], [55.716940000000001, 50.62171], [54.532877999999997, 51.026240000000001], [52.328724000000001, 51.718651999999999], [50.766648000000004, 51.692762000000002], [48.702382, 50.605128000000001], [48.577840999999999, 49.874760000000002], [47.549480000000003, 50.454698], [46.751595999999999, 49.356006000000001], [47.043672000000001, 49.152039000000002], [46.466445999999998, 48.394151999999998], [47.315240000000003, 47.715850000000003], [48.057250000000003, 47.743769999999998], [48.694733999999997, 47.075628000000002], [48.593249999999998, 46.561039999999998], [49.10116, 46.399329999999999], [48.645409999999998, 45.806289999999997], [47.675910000000002, 45.641489999999997], [46.682009999999998, 44.609200000000001], [47.590940000000003, 43.660159999999998], [47.492519999999999, 42.986579999999996], [48.58437, 41.808880000000002], [47.987282999999998, 41.405819000000001], [47.815666, 41.151415999999998], [47.373314999999998, 41.219732], [46.686070999999998, 41.827137], [46.404950999999997, 41.860675000000001], [45.776400000000002, 42.092440000000003], [45.470278999999998, 42.502780999999999], [44.537623000000004, 42.711993], [43.93121, 42.554960000000001], [43.755989999999997, 42.740830000000003], [42.394399999999997, 43.220300000000002], [40.922190000000001, 43.382150000000003], [40.076965000000001, 43.553103999999998], [39.955008999999997, 43.434998], [38.68, 44.280000000000001], [37.539119999999997, 44.657209999999999], [36.675460000000001, 45.244689999999999], [37.403170000000003, 45.404510000000002], [38.232950000000002, 46.240870000000001], [37.673720000000003, 46.636569999999999], [39.147669999999998, 47.044750000000001], [39.121200000000002, 47.263359999999999], [38.223537999999998, 47.10219], [38.255111999999997, 47.546399999999998], [38.770569999999999, 47.825620000000001], [39.738278000000001, 47.898936999999997], [39.895620000000001, 48.232410000000002], [39.67465, 48.783819999999999], [40.080789000000003, 49.307429999999997], [40.069040000000001, 49.601050000000001], [38.594988000000001, 49.926462000000001], [38.010630999999997, 49.915661999999998], [37.393459999999997, 50.383952999999998], [36.626168, 50.225591000000001], [35.356116, 50.577196999999998], [35.37791, 50.773940000000003], [35.022182999999998, 51.207571999999999], [34.224815999999997, 51.255992999999997], [34.141978000000002, 51.566412999999997], [34.391731, 51.768881999999998], [33.752699999999997, 52.335075000000003], [32.715761000000001, 52.238464999999998], [32.412058000000002, 52.288694999999997], [32.159439999999996, 52.061250000000001], [31.785969999999999, 52.101680000000002], [31.540018, 52.742052000000001], [31.305201, 53.073996000000001], [31.497640000000001, 53.167430000000003], [32.304518999999999, 53.132725999999998], [32.693643000000002, 53.351421000000002], [32.405599000000002, 53.618045000000002], [31.731273000000002, 53.794029000000002], [31.791423999999999, 53.974639000000003], [31.384471999999999, 54.157055999999997], [30.757534, 54.811771], [30.971836, 55.081547999999998], [30.873909000000001, 55.550975999999999], [29.896294000000001, 55.789462999999998], [29.371572, 55.670090999999999], [29.229513000000001, 55.918343999999998], [28.176708999999999, 56.169130000000003], [27.855281999999999, 56.759326000000001], [27.770015999999998, 57.244258000000002], [27.288184999999999, 57.474527999999999], [27.716685999999999, 57.791899000000001], [27.42015, 58.72457], [28.131699000000001, 59.300825000000003], [27.981120000000001, 59.475369999999998], [29.117699999999999, 60.02805], [28.07, 60.503520000000002], [30.211106999999998, 61.780028000000001], [31.139990999999998, 62.357692999999998], [31.516092, 62.867686999999997], [30.035872000000001, 63.552813999999998], [30.444685, 64.204453000000001], [29.544429999999998, 64.948672000000002], [30.217649999999999, 65.805980000000005], [29.054589, 66.944286000000005], [29.977426000000001, 67.698296999999997], [28.445944000000001, 68.364613000000006], [28.591930000000001, 69.064777000000007], [29.399550000000001, 69.15692], [31.10108, 69.558109999999999], [32.132719999999999, 69.905950000000004], [33.775469999999999, 69.301419999999993], [36.513959999999997, 69.063419999999994], [40.292340000000003, 67.932400000000001], [41.059869999999997, 67.457130000000006], [41.125950000000003, 66.791579999999996], [40.015830000000001, 66.266180000000006], [38.382950000000001, 65.999529999999993], [33.918709999999997, 66.759609999999995], [33.184440000000002, 66.632530000000003], [34.814770000000003, 65.900149999999996], [34.878574, 65.436212999999995], [34.943910000000002, 64.414370000000005], [36.231290000000001, 64.109449999999995], [37.012729999999998, 63.849829999999997], [37.141970000000001, 64.334710000000001], [36.539579000000003, 64.76446], [37.17604, 65.143219999999999], [39.593449999999997, 64.520790000000005], [40.435600000000001, 64.76446], [39.762599999999999, 65.49682], [42.093089999999997, 66.476230000000001], [43.016039999999997, 66.418580000000006], [43.949750000000002, 66.06908], [44.532260000000001, 66.756339999999994], [43.698390000000003, 67.352450000000005], [44.187950000000001, 67.950509999999994], [43.452820000000003, 68.570790000000002], [46.25, 68.25], [46.821339999999999, 67.689970000000002], [45.555169999999997, 67.566519999999997], [45.562019999999997, 67.010050000000007], [46.349150000000002, 66.667670000000001], [47.894159999999999, 66.884550000000004], [48.138759999999998, 67.522379999999998], [50.22766, 67.998670000000004], [53.71743, 68.857380000000006], [54.471710000000002, 68.808149999999998], [53.485819999999997, 68.201310000000007], [54.726280000000003, 68.097020000000001], [55.442680000000003, 68.438659999999999], [57.317019999999999, 68.466279999999998], [58.802, 68.88082], [59.941420000000001, 68.278440000000003], [61.077840000000002, 68.940690000000004], [60.030000000000001, 69.519999999999996], [60.549999999999997, 69.849999999999994], [63.503999999999998, 69.547389999999993], [64.888114999999999, 69.234835000000004], [68.512159999999994, 68.092330000000004], [69.180679999999995, 68.615629999999996], [68.164439999999999, 69.144360000000006], [68.135220000000004, 69.356489999999994], [66.930080000000004, 69.454610000000002], [67.25976, 69.928730000000002], [66.724919999999997, 70.708889999999997], [66.694659999999999, 71.028970000000001], [68.540059999999997, 71.9345], [69.196359999999999, 72.843360000000004], [69.939999999999998, 73.040000000000006], [72.587540000000004, 72.776290000000003], [72.796030000000002, 72.220060000000004], [71.848110000000005, 71.40898], [72.470110000000005, 71.090190000000007], [72.791880000000006, 70.391139999999993], [72.564700000000002, 69.020849999999996], [73.667869999999994, 68.407899999999998], [73.238699999999994, 67.740399999999994], [71.280000000000001, 66.319999999999993], [72.423010000000005, 66.172669999999997], [72.820769999999996, 66.532669999999996], [73.920990000000003, 66.789460000000005], [74.186509999999998, 67.284289999999999], [75.052000000000007, 67.760469999999998], [74.469260000000006, 68.328990000000005], [74.935839999999999, 68.989180000000005], [73.842359999999999, 69.071460000000002], [73.601870000000005, 69.627629999999996], [74.399799999999999, 70.631749999999997], [73.101100000000002, 71.44717], [74.890820000000005, 72.121189999999999], [74.659260000000003, 72.832269999999994], [75.158010000000004, 72.854969999999994], [75.683509999999998, 72.300560000000004], [75.288979999999995, 71.335560000000001], [76.359110000000001, 71.152869999999993], [75.903130000000004, 71.874009999999998], [77.576650000000001, 72.267169999999993], [79.652019999999993, 72.32011], [81.5, 71.75], [80.610709999999997, 72.582849999999993], [80.511089999999996, 73.648200000000003], [82.25, 73.849999999999994], [84.655259999999998, 73.805909999999997], [86.822299999999998, 73.936880000000002], [86.009559999999993, 74.459670000000003], [87.166820000000001, 75.116429999999994], [88.315709999999996, 75.143929999999997], [90.260000000000005, 75.640000000000001], [92.900580000000005, 75.773330000000001], [93.234210000000004, 76.047200000000004], [95.859999999999999, 76.140000000000001], [96.678210000000007, 75.915480000000002], [98.922539999999998, 76.446889999999996], [100.75967, 76.430279999999996], [101.03532, 76.861890000000002], [101.99084000000001, 77.287540000000007], [104.3516, 77.697919999999996], [106.06664000000001, 77.373890000000003], [104.705, 77.127399999999994], [106.97013, 76.974189999999993]]], [[[105.07547, 78.306889999999996], [99.438140000000004, 77.921000000000006], [101.2649, 79.233990000000006], [102.08635, 79.346410000000006], [102.83781500000001, 79.281289999999998], [105.37242999999999, 78.713340000000002], [105.07547, 78.306889999999996]]], [[[51.136187, 80.547280000000001], [49.793685000000004, 80.415428000000006], [48.894410999999998, 80.339567000000002], [48.754936999999998, 80.175467999999995], [47.586118999999997, 80.010181000000003], [46.502825999999999, 80.247247000000002], [47.072454999999998, 80.559424000000007], [44.846958000000001, 80.58981], [46.799138999999997, 80.771917999999999], [48.318477000000001, 80.784009999999995], [48.522806000000003, 80.514568999999995], [49.097189999999998, 80.753985999999998], [50.039768000000002, 80.918885000000003], [51.522933000000002, 80.699725999999998], [51.136187, 80.547280000000001]]], [[[99.939760000000007, 78.880939999999995], [97.757940000000005, 78.756200000000007], [94.972589999999997, 79.044745000000006], [93.312880000000007, 79.426500000000004], [92.545400000000001, 80.143789999999996], [91.181070000000005, 80.341459999999998], [93.777659999999997, 81.024600000000007], [95.940894999999998, 81.250399999999999], [97.883849999999995, 80.746975000000006], [100.186655, 79.780135000000001], [99.939760000000007, 78.880939999999995]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0420\u043e\u0441\u0441\u0438\u044f", "fr": "Russie", "en": "Russia", "nl": "Rusland", "pt": "R\u00fassia", "no": "Russland", "de": "Russland", "it": "Russia", "sv": "Ryssland", "pl": "Rosja", "fi": "Ven\u00e4j\u00e4", "zh": "\u4fc4\u7f57\u65af", "ja": "\u30ed\u30b7\u30a2", "es": "Rusia"}, "label_fr": "Russie", "name": "Russia", "dbpedia_uri": "http://dbpedia.org/resource/Russia"}, "id": "RUS"}, {"geometry": {"type": "Polygon", "coordinates": [[[30.419104999999998, -1.1346590000000001], [30.816134999999999, -1.698914], [30.758309000000001, -2.2872499999999998], [30.469695999999999, -2.4138579999999998], [29.938358999999998, -2.348487], [29.632176000000001, -2.9178579999999998], [29.024926000000001, -2.8392580000000001], [29.117478999999999, -2.292211], [29.254835, -2.2151100000000001], [29.291886999999999, -1.6200559999999999], [29.579466, -1.341313], [29.821518999999999, -1.443322], [30.419104999999998, -1.1346590000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0420\u0443\u0430\u043d\u0434\u0430", "fr": "Rwanda", "en": "Rwanda", "nl": "Rwanda", "pt": "Ruanda", "no": "Rwanda", "de": "Ruanda", "it": "Ruanda", "sv": "Rwanda", "pl": "Rwanda", "fi": "Ruanda", "zh": "\u5362\u65fa\u8fbe", "ja": "\u30eb\u30ef\u30f3\u30c0", "es": "Ruanda"}, "label_fr": "Rwanda", "name": "Rwanda", "dbpedia_uri": "http://dbpedia.org/resource/Rwanda"}, "id": "RWA"}, {"geometry": {"type": "Polygon", "coordinates": [[[-8.7948839999999997, 27.120695999999999], [-8.8178280000000004, 27.656426], [-8.6655899999999999, 27.656426], [-8.6651240000000005, 27.589479000000001], [-8.6844000000000001, 27.395744000000001], [-8.6872939999999996, 25.881056000000001], [-11.969419, 25.933353], [-11.937224000000001, 23.374593999999998], [-12.874222, 23.284832000000002], [-13.118753999999999, 22.77122], [-12.929102, 21.327071], [-16.845193999999999, 21.333323], [-17.063423, 20.999752000000001], [-17.020427999999999, 21.42231], [-17.002962, 21.420733999999999], [-14.750954999999999, 21.500599999999999], [-14.630833000000001, 21.860939999999999], [-14.221168, 22.310162999999999], [-13.891109999999999, 23.691009000000001], [-12.500963, 24.770116000000002], [-12.030759, 26.030866], [-11.718220000000001, 26.104092000000001], [-11.392555, 26.883424000000002], [-10.551263000000001, 26.990808000000001], [-10.189424000000001, 26.860945000000001], [-9.7353430000000003, 26.860945000000001], [-9.4130369999999992, 27.088476], [-8.7948839999999997, 27.120695999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0417\u0430\u043f\u0430\u0434\u043d\u0430\u044f \u0421\u0430\u0445\u0430\u0440\u0430", "fr": "Sahara occidental", "en": "Western Sahara", "nl": "Westelijke Sahara", "pt": "Saara Ocidental", "no": "Vest-Sahara", "de": "Westsahara", "it": "Sahara Occidentale", "sv": "V\u00e4stsahara", "pl": "Sahara Zachodnia", "fi": "L\u00e4nsi-Sahara", "zh": "\u897f\u6492\u54c8\u62c9", "ja": "\u897f\u30b5\u30cf\u30e9", "es": "Sahara Occidental"}, "label_fr": "Sahara occidental", "name": "Western Sahara", "dbpedia_uri": "http://dbpedia.org/resource/Western_Sahara"}, "id": "ESH"}, {"geometry": {"type": "Polygon", "coordinates": [[[42.779331999999997, 16.347891000000001], [42.649572999999997, 16.774635], [42.347988999999998, 17.075806], [42.270887999999999, 17.474722], [41.754382, 17.833046], [41.221390999999997, 18.671600000000002], [40.939340999999999, 19.486484999999998], [40.247652000000002, 20.174634999999999], [39.801684999999999, 20.338861999999999], [39.139398999999997, 21.291905], [39.023696000000001, 21.986875000000001], [39.066329000000003, 22.579656], [38.492772000000002, 23.688451000000001], [38.023859999999999, 24.078686000000001], [37.483635, 24.285495000000001], [37.154817999999999, 24.858483], [37.209491, 25.084541999999999], [36.931626999999999, 25.602958999999998], [36.639603999999999, 25.826228], [36.249136999999997, 26.570136000000002], [35.640182000000003, 27.376519999999999], [35.130186999999999, 28.063351999999998], [34.632336000000002, 28.058546], [34.787779, 28.607427000000001], [34.83222, 28.957483], [34.956037000000002, 29.356555], [36.068941000000002, 29.197495], [36.501213999999997, 29.505254000000001], [36.740527999999998, 29.865283000000002], [37.503582000000002, 30.003775999999998], [37.668120000000002, 30.338664999999999], [37.998849, 30.508500000000002], [37.002166000000003, 31.508413000000001], [39.004885999999999, 32.010216999999997], [39.195467999999998, 32.161009], [40.399994, 31.889991999999999], [41.889980999999999, 31.190009], [44.709499000000001, 29.178891], [46.568713000000002, 29.099025000000001], [47.459822000000003, 29.002518999999999], [47.708851000000003, 28.526063000000001], [48.416094000000001, 28.552004], [48.807594999999999, 27.689627999999999], [49.299554000000001, 27.461217999999999], [49.470914, 27.109998999999998], [50.152422000000001, 26.689662999999999], [50.212935000000002, 26.277027], [50.113303000000002, 25.943971999999999], [50.239859000000003, 25.608049999999999], [50.527386999999997, 25.327808000000001], [50.660556999999997, 24.999896], [50.810108, 24.754743000000001], [51.112414999999999, 24.556331], [51.389608000000003, 24.627386000000001], [51.579518999999998, 24.245497], [51.617708, 24.014219000000001], [52.000732999999997, 23.001154], [55.006802999999998, 22.496948], [55.208340999999997, 22.70833], [55.666659000000003, 22.000001000000001], [54.999982000000003, 19.999994000000001], [52.000010000000003, 19.000003], [49.116672000000001, 18.616668000000001], [48.183343999999998, 18.166668999999999], [47.466695000000001, 17.116682000000001], [47.000005000000002, 16.949998999999998], [46.749994000000001, 17.283338000000001], [46.366658999999999, 17.233315000000001], [45.399999000000001, 17.333335000000002], [45.216650999999999, 17.433329000000001], [44.062612999999999, 17.410359], [43.791519000000001, 17.319977000000002], [43.380794000000002, 17.579986999999999], [43.115797999999998, 17.088439999999999], [43.218375000000002, 16.666889999999999], [42.779331999999997, 16.347891000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0430\u0443\u0434\u043e\u0432\u0441\u043a\u0430\u044f \u0410\u0440\u0430\u0432\u0438\u044f", "fr": "Arabie saoudite", "en": "Saudi Arabia", "nl": "Saoedi-Arabi\u00eb", "pt": "Ar\u00e1bia Saudita", "no": "Saudi-Arabia", "de": "Saudi-Arabien", "it": "Arabia Saudita", "sv": "Saudiarabien", "pl": "Arabia Saudyjska", "fi": "Saudi-Arabia", "zh": "\u6c99\u7279\u963f\u62c9\u4f2f", "ja": "\u30b5\u30a6\u30b8\u30a2\u30e9\u30d3\u30a2", "es": "Arabia Saudita"}, "label_fr": "Arabie saoudite", "name": "Saudi Arabia", "dbpedia_uri": "http://dbpedia.org/resource/Saudi_Arabia"}, "id": "SAU"}, {"geometry": {"type": "Polygon", "coordinates": [[[33.963393000000003, 9.4642850000000003], [33.824962999999997, 9.4840610000000005], [33.842131000000002, 9.9819150000000008], [33.721958999999998, 10.325262], [33.206938000000001, 10.720112], [33.086765999999997, 11.441141], [33.206938000000001, 12.179338], [32.743419000000003, 12.248008], [32.674750000000003, 12.024832], [32.073892000000001, 11.973330000000001], [32.314234999999996, 11.681483999999999], [32.400072000000002, 11.080626000000001], [31.850715999999998, 10.531271], [31.352861999999998, 9.8102409999999995], [30.837841000000001, 9.7072369999999992], [29.996638999999998, 10.290927], [29.618957000000002, 10.084918999999999], [29.515953, 9.7930740000000007], [29.000931999999999, 9.6042319999999997], [28.966597, 9.3982240000000008], [27.970890000000001, 9.3982240000000008], [27.833551, 9.6042319999999997], [27.112521000000001, 9.6385670000000001], [26.752006000000002, 9.4668930000000007], [26.477328, 9.5527300000000004], [25.962306999999999, 10.136421], [25.790633, 10.411099], [25.069604000000002, 10.273759999999999], [24.794926, 9.8102409999999995], [24.537414999999999, 8.9175380000000004], [24.194068000000001, 8.7286959999999993], [23.886980000000001, 8.6197300000000006], [23.805813000000001, 8.6663189999999997], [23.459012999999999, 8.9542859999999997], [23.394779, 9.2650679999999994], [23.55725, 9.6812179999999994], [23.554303999999998, 10.089255], [22.977544000000002, 10.714463], [22.864165, 11.142395], [22.87622, 11.38461], [22.508690000000001, 11.679360000000001], [22.497620000000001, 12.26024], [22.28801, 12.646050000000001], [21.936810000000001, 12.588179999999999], [22.037590000000002, 12.95546], [22.296579999999999, 13.37232], [22.18329, 13.786479999999999], [22.51202, 14.09318], [22.303509999999999, 14.32682], [22.56795, 14.944290000000001], [23.02459, 15.680720000000001], [23.886890000000001, 15.61084], [23.83766, 19.580469999999998], [23.850000000000001, 20], [25, 20.003039999999999], [25, 22], [29.02, 22], [32.899999999999999, 22], [36.866230000000002, 22], [37.188720000000004, 21.01885], [36.969410000000003, 20.837440000000001], [37.114699999999999, 19.807960000000001], [37.481789999999997, 18.614090000000001], [37.862760000000002, 18.36786], [38.410089999999997, 17.998307], [37.904000000000003, 17.42754], [37.167470000000002, 17.26314], [36.852530000000002, 16.95655], [36.753889999999998, 16.29186], [36.323219999999999, 14.82249], [36.429510000000001, 14.42211], [36.270220000000002, 13.563330000000001], [35.863630000000001, 12.578279999999999], [35.260489999999997, 12.08286], [34.831629999999997, 11.318960000000001], [34.73115, 10.910170000000001], [34.257449999999999, 10.630089999999999], [33.961620000000003, 9.5835799999999995], [33.963393000000003, 9.4642850000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0443\u0434\u0430\u043d", "fr": "Soudan", "en": "Sudan", "nl": "Soedan", "pt": "Sud\u00e3o", "no": "Sudan", "de": "Sudan", "it": "Sudan", "sv": "Sudan", "pl": "Sudan", "fi": "Sudan", "zh": "\u82cf\u4e39\u5171\u548c\u56fd", "ja": "\u30b9\u30fc\u30c0\u30f3", "es": "Sud\u00e1n"}, "label_fr": "Soudan", "name": "Sudan", "dbpedia_uri": "http://dbpedia.org/resource/Sudan"}, "id": "SDN"}, {"geometry": {"type": "Polygon", "coordinates": [[[33.963393000000003, 9.4642850000000003], [33.974980000000002, 8.6845599999999994], [33.825499999999998, 8.3791600000000006], [33.294800000000002, 8.3545800000000003], [32.954180000000001, 7.7849700000000004], [33.568289999999998, 7.7133399999999996], [34.075099999999999, 7.2259500000000001], [34.250320000000002, 6.8260699999999996], [34.70702, 6.59422], [35.298006999999998, 5.5060000000000002], [34.620196, 4.8471229999999998], [34.005000000000003, 4.2498849999999999], [33.390000000000001, 3.79], [32.686419999999998, 3.7923200000000001], [31.881450000000001, 3.5582699999999998], [31.245560000000001, 3.7818999999999998], [30.833850000000002, 3.5091700000000001], [29.953489999999999, 4.1737000000000002], [29.715994999999999, 4.6008050000000003], [29.159078000000001, 4.3892670000000003], [28.696677999999999, 4.4550770000000002], [28.428993999999999, 4.2871550000000003], [27.979977000000002, 4.4084130000000004], [27.374226, 5.2339440000000002], [27.213408999999999, 5.5509529999999998], [26.465909, 5.9467169999999996], [26.213418000000001, 6.5466030000000002], [25.796648000000001, 6.9793159999999999], [25.124130999999998, 7.5000850000000003], [25.114932, 7.8251039999999996], [24.567368999999999, 8.2291880000000006], [23.886980000000001, 8.6197300000000006], [24.194068000000001, 8.7286959999999993], [24.537414999999999, 8.9175380000000004], [24.794926, 9.8102409999999995], [25.069604000000002, 10.273759999999999], [25.790633, 10.411099], [25.962306999999999, 10.136421], [26.477328, 9.5527300000000004], [26.752006000000002, 9.4668930000000007], [27.112521000000001, 9.6385670000000001], [27.833551, 9.6042319999999997], [27.970890000000001, 9.3982240000000008], [28.966597, 9.3982240000000008], [29.000931999999999, 9.6042319999999997], [29.515953, 9.7930740000000007], [29.618957000000002, 10.084918999999999], [29.996638999999998, 10.290927], [30.837841000000001, 9.7072369999999992], [31.352861999999998, 9.8102409999999995], [31.850715999999998, 10.531271], [32.400072000000002, 11.080626000000001], [32.314234999999996, 11.681483999999999], [32.073892000000001, 11.973330000000001], [32.674750000000003, 12.024832], [32.743419000000003, 12.248008], [33.206938000000001, 12.179338], [33.086765999999997, 11.441141], [33.206938000000001, 10.720112], [33.721958999999998, 10.325262], [33.842131000000002, 9.9819150000000008], [33.824962999999997, 9.4840610000000005], [33.963393000000003, 9.4642850000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042e\u0436\u043d\u044b\u0439 \u0421\u0443\u0434\u0430\u043d", "fr": "Soudan du Sud", "en": "South Sudan", "nl": "Zuid-Soedan", "pt": "Sud\u00e3o do Sul", "no": "S\u00f8r-Sudan", "de": "S\u00fcdsudan", "it": "Sudan del Sud", "sv": "Sydsudan", "pl": "Sudan Po\u0142udniowy", "fi": "Etel\u00e4-Sudan", "zh": "\u5357\u8607\u4e39", "ja": "\u5357\u30b9\u30fc\u30c0\u30f3", "es": "Sud\u00e1n del Sur"}, "label_fr": "Soudan du Sud", "name": "South Sudan", "dbpedia_uri": "http://dbpedia.org/resource/South_Sudan"}, "id": "SDS"}, {"geometry": {"type": "Polygon", "coordinates": [[[-16.713729000000001, 13.594958999999999], [-17.126107000000001, 14.373516], [-17.625043000000002, 14.729540999999999], [-17.185172999999999, 14.919477000000001], [-16.700706, 15.621527], [-16.463097999999999, 16.135035999999999], [-16.12069, 16.455663000000001], [-15.623666, 16.369337000000002], [-15.135737000000001, 16.587281999999998], [-14.577348000000001, 16.598264], [-14.099520999999999, 16.304302], [-13.435738000000001, 16.039383000000001], [-12.830658, 15.303692], [-12.17075, 14.616834000000001], [-12.124886999999999, 13.994726999999999], [-11.927716, 13.422075], [-11.553398, 13.141214], [-11.467898999999999, 12.754519], [-11.513942999999999, 12.442988], [-11.658301, 12.386583], [-12.203564999999999, 12.465648], [-12.278599, 12.35444], [-12.499051, 12.332090000000001], [-13.217817999999999, 12.575874000000001], [-13.700476, 12.586183], [-15.548477, 12.628170000000001], [-15.816573999999999, 12.515567000000001], [-16.147717, 12.547762000000001], [-16.677451999999999, 12.384852], [-16.841525000000001, 13.151394], [-15.931296, 13.130284], [-15.691001, 13.270353], [-15.511813, 13.27857], [-15.141163000000001, 13.509512000000001], [-14.712197, 13.298207], [-14.277702, 13.280585], [-13.844963, 13.505042], [-14.046991999999999, 13.794067999999999], [-14.376714, 13.625679999999999], [-14.687030999999999, 13.630357], [-15.081735, 13.876492000000001], [-15.398770000000001, 13.860369], [-15.624596, 13.623587000000001], [-16.713729000000001, 13.594958999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0435\u043d\u0435\u0433\u0430\u043b", "fr": "S\u00e9n\u00e9gal", "en": "Senegal", "nl": "Senegal", "pt": "Senegal", "no": "Senegal", "de": "Senegal", "it": "Senegal", "sv": "Senegal", "pl": "Senegal", "fi": "Senegal", "zh": "\u585e\u5185\u52a0\u5c14", "ja": "\u30bb\u30cd\u30ac\u30eb", "es": "Senegal"}, "label_fr": "S\u00e9n\u00e9gal", "name": "Senegal", "dbpedia_uri": "http://dbpedia.org/resource/Senegal"}, "id": "SEN"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[162.11902499999999, -10.482718999999999], [162.39864600000001, -10.826366999999999], [161.70003199999999, -10.820010999999999], [161.31979699999999, -10.204751], [161.917383, -10.446700999999999], [162.11902499999999, -10.482718999999999]]], [[[160.85222899999999, -9.8729370000000003], [160.46258800000001, -9.8952100000000005], [159.849447, -9.7940269999999998], [159.64000300000001, -9.6399799999999995], [159.702945, -9.2429500000000004], [160.362956, -9.4003040000000002], [160.68851799999999, -9.6101620000000008], [160.85222899999999, -9.8729370000000003]]], [[[161.679982, -9.5999820000000007], [161.52939699999999, -9.7843119999999999], [160.788253, -8.9175430000000002], [160.57999699999999, -8.3200090000000007], [160.920028, -8.3200090000000007], [161.28000599999999, -9.1200109999999999], [161.679982, -9.5999820000000007]]], [[[159.87502699999999, -8.3373200000000001], [159.91740200000001, -8.5382899999999999], [159.13367700000001, -8.1141810000000003], [158.58611400000001, -7.7548240000000002], [158.21115, -7.4218719999999996], [158.35997800000001, -7.3200180000000001], [158.82000099999999, -7.560003], [159.64000300000001, -8.0200270000000007], [159.87502699999999, -8.3373200000000001]]], [[[157.53842599999999, -7.3478199999999996], [157.33941999999999, -7.4047669999999997], [156.90203, -7.1768739999999998], [156.49135799999999, -6.765943], [156.54282799999999, -6.5993380000000004], [157.13999999999999, -7.0216380000000003], [157.53842599999999, -7.3478199999999996]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u043e\u043b\u043e\u043c\u043e\u043d\u043e\u0432\u044b \u041e\u0441\u0442\u0440\u043e\u0432\u0430", "fr": "Salomon (pays)", "en": "Solomon Islands", "nl": "Salomonseilanden", "pt": "Ilhas Salom\u00e3o", "no": "Salomon\u00f8yene", "de": "Salomonen", "it": "Isole Salomone", "sv": "Salomon\u00f6arna", "pl": "Wyspy Salomona", "fi": "Salomonsaaret", "zh": "\u6240\u7f57\u95e8\u7fa4\u5c9b", "ja": "\u30bd\u30ed\u30e2\u30f3\u8af8\u5cf6", "es": "Islas Salom\u00f3n"}, "label_fr": "Salomon (pays)", "name": "Solomon Islands", "dbpedia_uri": "http://dbpedia.org/resource/Solomon_Islands"}, "id": "SLB"}, {"geometry": {"type": "Polygon", "coordinates": [[[-11.438779, 6.7859170000000004], [-11.708195, 6.8600979999999998], [-12.428099, 7.2629419999999998], [-12.949049, 7.7986459999999997], [-13.124025, 8.1639459999999993], [-13.246549999999999, 8.9030489999999993], [-12.711957999999999, 9.3427120000000006], [-12.596719, 9.6201880000000006], [-12.425929, 9.8358340000000002], [-12.150338, 9.8585720000000006], [-11.917277, 10.046984], [-11.117481, 10.045873], [-10.839152, 9.6882459999999995], [-10.622394999999999, 9.2679100000000005], [-10.654769999999999, 8.9771780000000003], [-10.494315, 8.715541], [-10.505477000000001, 8.3488959999999999], [-10.230093999999999, 8.4062059999999992], [-10.695595000000001, 7.9394640000000001], [-11.146704, 7.396706], [-11.199802, 7.1058459999999997], [-11.438779, 6.7859170000000004]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u044c\u0435\u0440\u0440\u0430-\u041b\u0435\u043e\u043d\u0435", "fr": "Sierra Leone", "en": "Sierra Leone", "nl": "Sierra Leone", "pt": "Serra Leoa", "no": "Sierra Leone", "de": "Sierra Leone", "it": "Sierra Leone", "sv": "Sierra Leone", "pl": "Sierra Leone", "fi": "Sierra Leone", "zh": "\u585e\u62c9\u5229\u6602", "ja": "\u30b7\u30a8\u30e9\u30ec\u30aa\u30cd", "es": "Sierra Leona"}, "label_fr": "Sierra Leone", "name": "Sierra Leone", "dbpedia_uri": "http://dbpedia.org/resource/Sierra_Leone"}, "id": "SLE"}, {"geometry": {"type": "Polygon", "coordinates": [[[-87.793110999999996, 13.38448], [-87.904111999999998, 13.149017000000001], [-88.483301999999995, 13.163951000000001], [-88.843227999999996, 13.259734], [-89.256743, 13.458532999999999], [-89.812393999999998, 13.520621999999999], [-90.095555000000004, 13.735338], [-90.064678000000001, 13.881970000000001], [-89.721934000000005, 14.134228], [-89.534218999999993, 14.244816], [-89.587343000000004, 14.362586], [-89.353325999999996, 14.424132999999999], [-89.058511999999993, 14.340028999999999], [-88.843073000000004, 14.140506999999999], [-88.541230999999996, 13.980155], [-88.503997999999996, 13.845485999999999], [-88.065342999999999, 13.964626000000001], [-87.859515000000002, 13.893312], [-87.723502999999994, 13.78505], [-87.793110999999996, 13.38448]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0430\u043b\u044c\u0432\u0430\u0434\u043e\u0440", "fr": "Salvador", "en": "El Salvador", "nl": "El Salvador", "pt": "El Salvador", "no": "El Salvador", "de": "El Salvador", "it": "El Salvador", "sv": "El Salvador", "pl": "Salwador", "fi": "El Salvador", "zh": "\u8428\u5c14\u74e6\u591a", "ja": "\u30a8\u30eb\u30b5\u30eb\u30d0\u30c9\u30eb", "es": "El Salvador"}, "label_fr": "Salvador", "name": "El Salvador", "dbpedia_uri": "http://dbpedia.org/resource/El_Salvador"}, "id": "SLV"}, {"geometry": {"type": "Polygon", "coordinates": [[[48.938130000000001, 9.4517489999999995], [48.486736000000001, 8.8376260000000002], [47.78942, 8.0030000000000001], [46.948327999999997, 7.9968769999999996], [43.678750000000001, 9.1835799999999992], [43.296975000000003, 9.5404769999999992], [42.92812, 10.021940000000001], [42.558759999999999, 10.57258], [42.776851999999998, 10.926879], [43.145305, 11.46204], [43.470660000000002, 11.277710000000001], [43.666668000000001, 10.864169], [44.117804, 10.445538000000001], [44.614258999999997, 10.442205], [45.556941000000002, 10.698029], [46.645401, 10.816549], [47.525658, 11.127228000000001], [48.021596000000002, 11.193064], [48.378784000000003, 11.375482], [48.948205999999999, 11.410622], [48.942005000000002, 11.394266], [48.938490999999999, 10.982327], [48.938232999999997, 9.9734999999999996], [48.938130000000001, 9.4517489999999995]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u043e\u043c\u0430\u043b\u0438\u043b\u0435\u043d\u0434", "fr": "Somaliland", "en": "Somaliland", "nl": "Somaliland", "pt": "Somalil\u00e2ndia", "no": "Somaliland", "de": "Somaliland", "it": "Somaliland", "sv": "Somaliland", "pl": "Somaliland", "fi": "Somalimaa", "zh": "\u7d22\u9a6c\u91cc\u5170", "ja": "\u30bd\u30de\u30ea\u30e9\u30f3\u30c9", "es": "Somalilandia"}, "label_fr": "Somaliland", "name": "Somaliland", "dbpedia_uri": "http://dbpedia.org/resource/Somaliland"}, "id": "-99"}, {"geometry": {"type": "Polygon", "coordinates": [[[49.728619999999999, 11.578900000000001], [50.258780000000002, 11.67957], [50.732019999999999, 12.0219], [51.111199999999997, 12.02464], [51.133870000000002, 11.748150000000001], [51.041530000000002, 11.166510000000001], [51.045310000000001, 10.6409], [50.834180000000003, 10.279719999999999], [50.552390000000003, 9.1987400000000008], [50.070920000000001, 8.0817300000000003], [49.4527, 6.8046600000000002], [48.594549999999998, 5.3391099999999998], [47.740789999999997, 4.2194000000000003], [46.56476, 2.8552900000000001], [45.563989999999997, 2.04576], [44.068150000000003, 1.0528299999999999], [43.13597, 0.29220000000000002], [42.04157, -0.91915999999999998], [41.810949999999998, -1.4464699999999999], [41.585129999999999, -1.6832499999999999], [40.993000000000002, -0.85829], [40.981050000000003, 2.7845200000000001], [41.855083, 3.9189120000000002], [42.128610000000002, 4.2341300000000004], [42.769669999999998, 4.2525899999999996], [43.660870000000003, 4.9575500000000003], [44.9636, 5.00162], [47.78942, 8.0030000000000001], [48.486736000000001, 8.8376260000000002], [48.938130000000001, 9.4517489999999995], [48.938232999999997, 9.9734999999999996], [48.938490999999999, 10.982327], [48.942005000000002, 11.394266], [48.948205000000002, 11.410617], [49.267760000000003, 11.43033], [49.728619999999999, 11.578900000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u043e\u043c\u0430\u043b\u0438", "fr": "Somalie", "en": "Somalia", "nl": "Somali\u00eb", "pt": "Som\u00e1lia", "no": "Somalia", "de": "Somalia", "it": "Somalia", "sv": "Somalia", "pl": "Somalia", "fi": "Somalia", "zh": "\u7d22\u9a6c\u91cc", "ja": "\u30bd\u30de\u30ea\u30a2", "es": "Somalia"}, "label_fr": "Somalie", "name": "Somalia", "dbpedia_uri": "http://dbpedia.org/resource/Somalia"}, "id": "SOM"}, {"geometry": {"type": "Polygon", "coordinates": [[[20.874313000000001, 45.416375000000002], [21.483526000000001, 45.181170000000002], [21.562023, 44.768946999999997], [22.145088000000001, 44.478422000000002], [22.459022000000001, 44.702517], [22.705725999999999, 44.578003000000002], [22.474008000000001, 44.409227999999999], [22.657150000000001, 44.234923000000002], [22.410446, 44.008063], [22.500157000000002, 43.642814000000001], [22.986018999999999, 43.211160999999997], [22.604800999999998, 42.898519], [22.436595000000001, 42.580320999999998], [22.545012, 42.461362000000001], [22.380526, 42.320259999999998], [21.917079999999999, 42.303640000000001], [21.576636000000001, 42.245224], [21.543320000000001, 42.320250000000001], [21.66292, 42.439219999999999], [21.77505, 42.682699999999997], [21.633019999999998, 42.677169999999997], [21.438659999999999, 42.862549999999999], [21.27421, 42.909590000000001], [21.143395000000002, 43.068685000000002], [20.956510000000002, 43.130940000000002], [20.81448, 43.27205], [20.635079999999999, 43.216709999999999], [20.496790000000001, 42.884689999999999], [20.257580000000001, 42.812750000000001], [20.3398, 42.898519999999998], [19.958570000000002, 43.10604], [19.629999999999999, 43.21378], [19.483889999999999, 43.352290000000004], [19.218520000000002, 43.52384], [19.454000000000001, 43.568100000000001], [19.59976, 44.038469999999997], [19.117609999999999, 44.423070000000003], [19.368030000000001, 44.863], [19.005479999999999, 44.860230000000001], [19.390476, 45.236516000000002], [19.072769000000001, 45.521510999999997], [18.829820000000002, 45.908880000000003], [19.596045, 46.171729999999997], [20.220192000000001, 46.127468999999998], [20.762174999999999, 45.734572999999997], [20.874313000000001, 45.416375000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0435\u0440\u0431\u0438\u044f", "fr": "Serbie", "en": "Serbia", "nl": "Servi\u00eb", "pt": "S\u00e9rvia", "no": "Serbia", "de": "Serbien", "it": "Serbia", "sv": "Serbien", "pl": "Serbia", "fi": "Serbia", "zh": "\u585e\u5c14\u7ef4\u4e9a", "ja": "\u30bb\u30eb\u30d3\u30a2", "es": "Serbia"}, "label_fr": "Serbie", "name": "Republic of Serbia", "dbpedia_uri": "http://dbpedia.org/resource/Serbia"}, "id": "SRB"}, {"geometry": {"type": "Polygon", "coordinates": [[[-57.147435999999999, 5.9731500000000004], [-55.949317999999998, 5.7728780000000004], [-55.84178, 5.953125], [-55.033250000000002, 6.0252910000000002], [-53.958044999999998, 5.7565480000000004], [-54.478633000000002, 4.8967559999999999], [-54.399541999999997, 4.2126109999999999], [-54.006931000000002, 3.6200380000000001], [-54.181725999999998, 3.1897799999999998], [-54.269705000000002, 2.7323919999999999], [-54.524754000000001, 2.311849], [-55.097586999999997, 2.5237479999999999], [-55.569755000000001, 2.4215059999999999], [-55.973322000000003, 2.510364], [-56.073341999999997, 2.2207949999999999], [-55.9056, 2.0219960000000001], [-55.995697999999997, 1.8176669999999999], [-56.539386, 1.8995230000000001], [-57.150098, 2.7689270000000001], [-57.281433, 3.3334920000000001], [-57.601568999999998, 3.3346550000000001], [-58.044694, 4.0608639999999996], [-57.860210000000002, 4.5768009999999997], [-57.914288999999997, 4.8126259999999998], [-57.307245999999999, 5.0735669999999997], [-57.147435999999999, 5.9731500000000004]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0443\u0440\u0438\u043d\u0430\u043c", "fr": "Suriname", "en": "Suriname", "nl": "Suriname", "pt": "Suriname", "no": "Surinam", "de": "Suriname", "it": "Suriname", "sv": "Surinam", "pl": "Surinam", "fi": "Suriname", "zh": "\u8607\u5229\u5357", "ja": "\u30b9\u30ea\u30ca\u30e0", "es": "Surinam"}, "label_fr": "Suriname", "name": "Suriname", "dbpedia_uri": "http://dbpedia.org/resource/Suriname"}, "id": "SUR"}, {"geometry": {"type": "Polygon", "coordinates": [[[18.853144, 49.496229999999997], [18.909575, 49.435845999999998], [19.320713000000001, 49.571573999999998], [19.825023000000002, 49.217125000000003], [20.415838999999998, 49.431452999999998], [20.887955000000002, 49.328772000000001], [21.607807999999999, 49.470106999999999], [22.558138, 49.085737999999999], [22.280842, 48.825392000000001], [22.085608000000001, 48.422263999999998], [21.872236000000001, 48.319971000000002], [20.801293999999999, 48.623854000000001], [20.473562000000001, 48.562849999999997], [20.239053999999999, 48.327567000000002], [19.769470999999999, 48.202691000000002], [19.661363999999999, 48.266615000000002], [19.174365000000002, 48.111378999999999], [18.777024999999998, 48.081767999999997], [18.696512999999999, 47.880954000000003], [17.857133000000001, 47.758429], [17.488472999999999, 47.867466], [16.979666999999999, 48.123497], [16.879982999999999, 48.470013000000002], [16.960287999999998, 48.596981999999997], [17.101984999999999, 48.816969], [17.545006999999998, 48.800018999999999], [17.886485, 48.903475], [17.913512000000001, 48.996493000000001], [18.104973000000001, 49.043982999999997], [18.170497999999998, 49.271515000000001], [18.399994, 49.315001000000002], [18.554970999999998, 49.495015000000002], [18.853144, 49.496229999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u043b\u043e\u0432\u0430\u043a\u0438\u044f", "fr": "Slovaquie", "en": "Slovakia", "nl": "Slowakije", "pt": "Eslov\u00e1quia", "no": "Slovakia", "de": "Slowakei", "it": "Slovacchia", "sv": "Slovakien", "pl": "S\u0142owacja", "fi": "Slovakia", "zh": "\u65af\u6d1b\u4f10\u514b", "ja": "\u30b9\u30ed\u30d0\u30ad\u30a2", "es": "Eslovaquia"}, "label_fr": "Slovaquie", "name": "Slovakia", "dbpedia_uri": "http://dbpedia.org/resource/Slovakia"}, "id": "SVK"}, {"geometry": {"type": "Polygon", "coordinates": [[[13.806475000000001, 46.509306000000002], [14.632472, 46.431817000000002], [15.137092000000001, 46.658703000000003], [16.011664, 46.683610999999999], [16.202297999999999, 46.852386000000003], [16.370505000000001, 46.841327], [16.564807999999999, 46.503751000000001], [15.768732999999999, 46.238107999999997], [15.671530000000001, 45.834153999999998], [15.323954000000001, 45.731783], [15.327674999999999, 45.452316000000003], [14.935244000000001, 45.471694999999997], [14.595109000000001, 45.634940999999998], [14.411968, 45.466166000000001], [13.715059999999999, 45.500323999999999], [13.93763, 45.591016000000003], [13.69811, 46.016778000000002], [13.806475000000001, 46.509306000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u043b\u043e\u0432\u0435\u043d\u0438\u044f", "fr": "Slov\u00e9nie", "en": "Slovenia", "nl": "Sloveni\u00eb", "pt": "Eslov\u00e9nia", "no": "Slovenia", "de": "Slowenien", "it": "Slovenia", "sv": "Slovenien", "pl": "S\u0142owenia", "fi": "Slovenia", "zh": "\u65af\u6d1b\u6587\u5c3c\u4e9a", "ja": "\u30b9\u30ed\u30d9\u30cb\u30a2", "es": "Eslovenia"}, "label_fr": "Slov\u00e9nie", "name": "Slovenia", "dbpedia_uri": "http://dbpedia.org/resource/Slovenia"}, "id": "SVN"}, {"geometry": {"type": "Polygon", "coordinates": [[[22.183173, 65.723741000000004], [21.213517, 65.026004999999998], [21.369630999999998, 64.413588000000004], [19.778876, 63.609554000000003], [17.847778999999999, 62.749400000000001], [17.119554999999998, 61.341166000000001], [17.831346, 60.636583000000002], [18.787721999999999, 60.081913999999998], [17.869225, 58.953766000000002], [16.829184999999999, 58.719827000000002], [16.447710000000001, 57.041117999999997], [15.879785999999999, 56.104301999999997], [14.666681000000001, 56.200885], [14.100721, 55.407781], [12.942911, 55.361736999999998], [12.625101000000001, 56.307079999999999], [11.787941999999999, 57.441817], [11.027369, 58.856149000000002], [11.468272000000001, 59.432392999999998], [12.300366, 60.117933000000001], [12.631147, 61.293571999999998], [11.992063999999999, 61.800362], [11.930569, 63.128318], [12.579935000000001, 64.066219000000004], [13.571916, 64.049114000000003], [13.919905, 64.445420999999996], [13.55569, 64.787028000000007], [15.108411, 66.193866999999997], [16.108712000000001, 67.302456000000006], [16.768878999999998, 68.013936999999999], [17.729182000000002, 68.010552000000004], [17.993867999999999, 68.567391000000001], [19.87856, 68.407194000000004], [20.025269000000002, 69.065139000000002], [20.645593000000002, 69.106246999999996], [21.978535000000001, 68.616845999999995], [23.539473000000001, 67.936008999999999], [23.56588, 66.396051], [23.903379000000001, 66.006927000000005], [22.183173, 65.723741000000004]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0428\u0432\u0435\u0446\u0438\u044f", "fr": "Su\u00e8de", "en": "Sweden", "nl": "Zweden", "pt": "Su\u00e9cia", "no": "Sverige", "de": "Schweden", "it": "Svezia", "sv": "Sverige", "pl": "Szwecja", "fi": "Ruotsi", "zh": "\u745e\u5178", "ja": "\u30b9\u30a6\u30a7\u30fc\u30c7\u30f3", "es": "Suecia"}, "label_fr": "Su\u00e8de", "name": "Sweden", "dbpedia_uri": "http://dbpedia.org/resource/Sweden"}, "id": "SWE"}, {"geometry": {"type": "Polygon", "coordinates": [[[32.071665000000003, -26.733820000000001], [31.86806, -27.177927], [31.282772999999999, -27.285879000000001], [30.685962, -26.743845], [30.676608999999999, -26.398078000000002], [30.949667000000002, -26.022649000000001], [31.044080000000001, -25.731452000000001], [31.333158000000001, -25.660191000000001], [31.837778, -25.843332], [31.985779000000001, -26.291779999999999], [32.071665000000003, -26.733820000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0432\u0430\u0437\u0438\u043b\u0435\u043d\u0434", "fr": "Swaziland", "en": "Swaziland", "nl": "Swaziland", "pt": "Suazil\u00e2ndia", "no": "Swaziland", "de": "Swasiland", "it": "Swaziland", "sv": "Swaziland", "pl": "Suazi", "fi": "Swazimaa", "zh": "\u65af\u5a01\u58eb\u5170", "ja": "\u30b9\u30ef\u30b8\u30e9\u30f3\u30c9", "es": "Suazilandia"}, "label_fr": "Swaziland", "name": "Swaziland", "dbpedia_uri": "http://dbpedia.org/resource/Swaziland"}, "id": "SWZ"}, {"geometry": {"type": "Polygon", "coordinates": [[[38.792341, 33.378686000000002], [36.834062000000003, 32.312938000000003], [35.719918, 32.709192000000002], [35.700797999999999, 32.716014000000001], [35.836396999999998, 32.868122999999997], [35.821100999999999, 33.277425999999998], [36.066459999999999, 33.824911999999998], [36.611750000000001, 34.201788999999998], [36.448194000000001, 34.593935000000002], [35.998403000000003, 34.644914], [35.905023, 35.410009000000002], [36.149763, 35.821534999999997], [36.417549999999999, 36.040616999999997], [36.685389000000001, 36.259698999999998], [36.739494000000001, 36.817520000000002], [37.066761, 36.623035999999999], [38.167726999999999, 36.901209999999999], [38.699891000000001, 36.712927000000001], [39.522579999999998, 36.716054], [40.673259000000002, 37.091276000000001], [41.212088999999999, 37.074351999999998], [42.349590999999997, 37.229872999999998], [41.837063999999998, 36.605854000000001], [41.289707, 36.358815], [41.383965000000003, 35.628317000000003], [41.006158999999997, 34.419372000000003], [38.792341, 33.378686000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0438\u0440\u0438\u044f", "fr": "Syrie", "en": "Syria", "nl": "Syri\u00eb", "pt": "S\u00edria", "no": "Syria", "de": "Syrien", "it": "Siria", "sv": "Syrien", "pl": "Syria", "fi": "Syyria", "zh": "\u53d9\u5229\u4e9a", "ja": "\u30b7\u30ea\u30a2", "es": "Siria"}, "label_fr": "Syrie", "name": "Syria", "dbpedia_uri": "http://dbpedia.org/resource/Syria"}, "id": "SYR"}, {"geometry": {"type": "Polygon", "coordinates": [[[14.495787, 12.859396], [14.595781000000001, 13.330427], [13.954477000000001, 13.353448999999999], [13.956699, 13.996691], [13.540393999999999, 14.367134], [13.97217, 15.684369999999999], [15.247731, 16.627306000000001], [15.300440999999999, 17.927949999999999], [15.685741, 19.957180000000001], [15.903247, 20.387619000000001], [15.487147999999999, 20.730415000000001], [15.47106, 21.048449999999999], [15.096888, 21.308519], [14.8513, 22.862950000000001], [15.860849999999999, 23.40972], [19.849260000000001, 21.495090000000001], [23.83766, 19.580469999999998], [23.886890000000001, 15.61084], [23.02459, 15.680720000000001], [22.56795, 14.944290000000001], [22.303509999999999, 14.32682], [22.51202, 14.09318], [22.18329, 13.786479999999999], [22.296579999999999, 13.37232], [22.037590000000002, 12.95546], [21.936810000000001, 12.588179999999999], [22.28801, 12.646050000000001], [22.497620000000001, 12.26024], [22.508690000000001, 11.679360000000001], [22.87622, 11.38461], [22.864165, 11.142395], [22.231128999999999, 10.971888999999999], [21.723821999999998, 10.567055999999999], [21.000868000000001, 9.4759849999999997], [20.059685000000002, 9.0127059999999997], [19.094007999999999, 9.0748470000000001], [18.812010000000001, 8.9829150000000002], [18.911021999999999, 8.6308950000000006], [18.389555000000001, 8.2813040000000004], [17.964929999999999, 7.8909140000000004], [16.705988000000001, 7.5083279999999997], [16.456185000000001, 7.7347739999999998], [16.290562000000001, 7.7543069999999998], [16.106231999999999, 7.4970879999999998], [15.27946, 7.4219249999999999], [15.436092, 7.692812], [15.120865999999999, 8.3821499999999993], [14.979996, 8.7961039999999997], [14.544466999999999, 8.9658610000000003], [13.954217999999999, 9.5494950000000003], [14.171466000000001, 10.021378], [14.627200999999999, 9.9209189999999996], [14.909354, 9.9921290000000003], [15.467873000000001, 9.9823369999999993], [14.923565, 10.891325], [14.960152000000001, 11.555574], [14.893359999999999, 12.219049999999999], [14.495787, 12.859396]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0427\u0430\u0434", "fr": "Tchad", "en": "Chad", "nl": "Tsjaad", "pt": "Chade", "no": "Tsjad", "de": "Tschad", "it": "Ciad", "sv": "Tchad", "pl": "Czad", "fi": "T\u0161ad", "zh": "\u4e4d\u5f97", "ja": "\u30c1\u30e3\u30c9", "es": "Chad"}, "label_fr": "Tchad", "name": "Chad", "dbpedia_uri": "http://dbpedia.org/resource/Chad"}, "id": "TCD"}, {"geometry": {"type": "Polygon", "coordinates": [[[1.8652409999999999, 6.1421580000000002], [1.060122, 5.9288369999999997], [0.83693099999999998, 6.279979], [0.570384, 6.9143590000000001], [0.49095699999999998, 7.4117439999999997], [0.71202900000000002, 8.3124649999999995], [0.46119199999999999, 8.6772229999999997], [0.36590099999999998, 9.4650040000000004], [0.36758000000000002, 10.191212999999999], [-0.049785000000000003, 10.706918], [0.023803000000000001, 11.018682], [0.899563, 10.997339], [0.77233600000000002, 10.470808], [1.0777950000000001, 10.175606999999999], [1.4250609999999999, 9.8253950000000003], [1.4630430000000001, 9.3346239999999998], [1.6644779999999999, 9.1285900000000009], [1.618951, 6.8320379999999998], [1.8652409999999999, 6.1421580000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u043e\u0433\u043e", "fr": "Togo", "en": "Togo", "nl": "Togo", "pt": "Togo", "no": "Togo", "de": "Togo", "it": "Togo", "sv": "Togo", "pl": "Togo", "fi": "Togo", "zh": "\u591a\u54e5", "ja": "\u30c8\u30fc\u30b4", "es": "Togo"}, "label_fr": "Togo", "name": "Togo", "dbpedia_uri": "http://dbpedia.org/resource/Togo"}, "id": "TGO"}, {"geometry": {"type": "Polygon", "coordinates": [[[102.58493199999999, 12.186595000000001], [101.687158, 12.64574], [100.83181, 12.627084999999999], [100.97846699999999, 13.412722], [100.097797, 13.406855999999999], [100.018733, 12.307001], [99.478921, 10.846367000000001], [99.153772000000004, 9.9630609999999997], [99.222398999999996, 9.239255], [99.873831999999993, 9.2078620000000004], [100.279647, 8.2951530000000009], [100.45927399999999, 7.4295730000000004], [101.01732800000001, 6.8568689999999997], [101.623079, 6.7406220000000001], [102.141187, 6.2216360000000002], [101.81428200000001, 5.8108079999999998], [101.154219, 5.6913840000000002], [101.07551599999999, 6.2048670000000001], [100.259596, 6.6428250000000002], [100.085757, 6.4644890000000004], [99.690691000000001, 6.8482130000000003], [99.519642000000005, 7.3434540000000004], [98.988253, 7.9079930000000003], [98.503786000000005, 8.3823050000000006], [98.339662000000004, 7.7945120000000001], [98.150008999999997, 8.3500069999999997], [98.259150000000005, 8.9739229999999992], [98.553550999999999, 9.9329599999999996], [99.038121000000004, 10.960546000000001], [99.587286000000006, 11.892763], [99.196353999999999, 12.804748], [99.212012000000001, 13.269294], [99.097755000000006, 13.827503], [98.430819, 14.622028], [98.192074000000005, 15.123703000000001], [98.537375999999995, 15.308496999999999], [98.903347999999994, 16.177824000000001], [98.493761000000006, 16.837835999999999], [97.859122999999997, 17.567945999999999], [97.375895999999997, 18.445437999999999], [97.797782999999995, 18.627079999999999], [98.253724000000005, 19.708203000000001], [98.959676000000002, 19.752980999999998], [99.543308999999994, 20.186598], [100.115988, 20.417850000000001], [100.54888099999999, 20.109238000000001], [100.60629400000001, 19.508344000000001], [101.282015, 19.462585000000001], [101.03593100000001, 18.408928], [101.05954800000001, 17.512497], [102.113592, 18.109102], [102.413005, 17.932782], [102.998706, 17.961694999999999], [103.200192, 18.309632000000001], [103.95647700000001, 18.240953999999999], [104.716947, 17.428858999999999], [104.779321, 16.441865], [105.589039, 15.570316], [105.544338, 14.723934], [105.218777, 14.273211999999999], [104.281418, 14.416743], [102.988422, 14.225721], [102.348099, 13.394247], [102.58493199999999, 12.186595000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0430\u0438\u043b\u0430\u043d\u0434", "fr": "Tha\u00eflande", "en": "Thailand", "nl": "Thailand", "pt": "Tail\u00e2ndia", "no": "Thailand", "de": "Thailand", "it": "Thailandia", "sv": "Thailand", "pl": "Tajlandia", "fi": "Thaimaa", "zh": "\u6cf0\u56fd", "ja": "\u30bf\u30a4\u738b\u56fd", "es": "Tailandia"}, "label_fr": "Tha\u00eflande", "name": "Thailand", "dbpedia_uri": "http://dbpedia.org/resource/Thailand"}, "id": "THA"}, {"geometry": {"type": "Polygon", "coordinates": [[[71.014197999999993, 40.244365999999999], [70.648019000000005, 39.935754000000003], [69.559610000000006, 40.103211000000002], [69.464887000000004, 39.526682999999998], [70.549161999999995, 39.604197999999997], [71.784694000000002, 39.279463], [73.675379000000007, 39.431237000000003], [73.928852000000006, 38.505814999999998], [74.257514, 38.606507000000001], [74.864816000000005, 38.378846000000003], [74.829986000000005, 37.990006999999999], [74.980001999999999, 37.419989999999999], [73.948695999999998, 37.421565999999999], [73.260056000000006, 37.495257000000002], [72.636889999999994, 37.047558000000002], [72.193040999999994, 36.948287999999998], [71.844638000000003, 36.738171000000001], [71.448693000000006, 37.065645000000004], [71.541917999999995, 37.905774000000001], [71.239403999999993, 37.953265000000002], [71.348130999999995, 38.258904999999999], [70.806820999999999, 38.486282000000003], [70.376304000000005, 38.138396], [70.270573999999996, 37.735165000000002], [70.116578000000004, 37.588222999999999], [69.518784999999994, 37.608997000000002], [69.196273000000005, 37.151144000000002], [68.859446000000005, 37.344335999999998], [68.135561999999993, 37.023114999999997], [67.829999999999998, 37.144993999999997], [68.392032999999998, 38.157024999999997], [68.176024999999996, 38.901553], [67.442220000000006, 39.140143999999999], [67.701429000000005, 39.580477999999999], [68.536416000000003, 39.533453000000002], [69.011633000000003, 40.086157999999998], [69.329494999999994, 40.727823999999998], [70.666622000000004, 40.960213000000003], [70.458160000000007, 40.496495000000003], [70.601406999999995, 40.218527000000002], [71.014197999999993, 40.244365999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0430\u0434\u0436\u0438\u043a\u0438\u0441\u0442\u0430\u043d", "fr": "Tadjikistan", "en": "Tajikistan", "nl": "Tadzjikistan", "pt": "Tadjiquist\u00e3o", "no": "Tadsjikistan", "de": "Tadschikistan", "it": "Tagikistan", "sv": "Tadzjikistan", "pl": "Tad\u017cykistan", "fi": "Tad\u017eikistan", "zh": "\u5854\u5409\u514b\u65af\u5766", "ja": "\u30bf\u30b8\u30ad\u30b9\u30bf\u30f3", "es": "Tayikist\u00e1n"}, "label_fr": "Tadjikistan", "name": "Tajikistan", "dbpedia_uri": "http://dbpedia.org/resource/Tajikistan"}, "id": "TJK"}, {"geometry": {"type": "Polygon", "coordinates": [[[61.210816999999999, 35.650072000000002], [61.123071000000003, 36.491596999999999], [60.377637999999997, 36.527383], [59.234762000000003, 37.412987999999999], [58.436154000000002, 37.522309], [57.330433999999997, 38.029229000000001], [56.619365999999999, 38.121394000000002], [56.180374999999998, 37.935127000000001], [55.511578, 37.964117000000002], [54.800303999999997, 37.392420999999999], [53.921598000000003, 37.198917999999999], [53.735511000000002, 37.906135999999996], [53.880929000000002, 38.952092999999998], [53.101027999999999, 39.290573999999999], [53.357807999999999, 39.975285999999997], [52.693973, 40.033628999999998], [52.915250999999998, 40.876522999999999], [53.858139000000001, 40.631034], [54.736845000000002, 40.951014999999998], [54.008310999999999, 41.551211000000002], [53.721713000000001, 42.123190999999998], [52.91675, 41.868116999999998], [52.814689000000001, 41.135370999999999], [52.502459999999999, 41.783315999999999], [52.944293000000002, 42.116033999999999], [54.079417999999997, 42.324109], [54.755344999999998, 42.043970999999999], [55.455250999999997, 41.259858999999999], [55.968190999999997, 41.308641999999999], [57.096390999999997, 41.322310000000002], [56.932214999999999, 41.826025999999999], [57.786529999999999, 42.170552999999998], [58.629010999999998, 42.751550999999999], [59.976421999999999, 42.223081999999998], [60.083340999999997, 41.425145999999998], [60.465952999999999, 41.220326999999997], [61.547179, 41.266370000000002], [61.882714, 41.084857], [62.37426, 40.053885999999999], [63.518014999999998, 39.363256999999997], [64.170222999999993, 38.892406999999999], [65.215998999999996, 38.402695000000001], [66.546149999999997, 37.974685000000001], [66.518607000000003, 37.362783999999998], [66.217384999999993, 37.393790000000003], [65.745631000000003, 37.661163999999999], [65.588948000000002, 37.305216999999999], [64.746105, 37.111818], [64.546479000000005, 36.312072999999998], [63.982895999999997, 36.007956999999998], [63.193537999999997, 35.857165999999999], [62.984662, 35.404040999999999], [62.230651000000002, 35.270663999999996], [61.210816999999999, 35.650072000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0443\u0440\u043a\u043c\u0435\u043d\u0438\u044f", "fr": "Turkm\u00e9nistan", "en": "Turkmenistan", "nl": "Turkmenistan", "pt": "Turquemenist\u00e3o", "no": "Turkmenistan", "de": "Turkmenistan", "it": "Turkmenistan", "sv": "Turkmenistan", "pl": "Turkmenistan", "fi": "Turkmenistan", "zh": "\u571f\u5e93\u66fc\u65af\u5766", "ja": "\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3", "es": "Turkmenist\u00e1n"}, "label_fr": "Turkm\u00e9nistan", "name": "Turkmenistan", "dbpedia_uri": "http://dbpedia.org/resource/Turkmenistan"}, "id": "TKM"}, {"geometry": {"type": "Polygon", "coordinates": [[[124.968682, -8.8927899999999998], [125.086246, -8.6568869999999993], [125.94707200000001, -8.4320950000000003], [126.644704, -8.3982469999999996], [126.95724300000001, -8.2733450000000008], [127.335928, -8.3973169999999993], [126.967992, -8.6682559999999995], [125.92588499999999, -9.106007], [125.08852, -9.3931730000000009], [125.07002, -9.0899870000000007], [124.968682, -8.8927899999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0412\u043e\u0441\u0442\u043e\u0447\u043d\u044b\u0439 \u0422\u0438\u043c\u043e\u0440", "fr": "Timor oriental", "en": "East Timor", "nl": "Oost-Timor", "pt": "Timor-Leste", "no": "\u00d8st-Timor", "de": "Osttimor", "it": "Timor Est", "sv": "\u00d6sttimor", "pl": "Timor Wschodni", "fi": "It\u00e4-Timor", "zh": "\u4e1c\u5e1d\u6c76", "ja": "\u6771\u30c6\u30a3\u30e2\u30fc\u30eb", "es": "Timor Oriental"}, "label_fr": "Timor oriental", "name": "East Timor", "dbpedia_uri": "http://dbpedia.org/resource/East_Timor"}, "id": "TLS"}, {"geometry": {"type": "Polygon", "coordinates": [[[-61.68, 10.76], [-61.104999999999997, 10.890000000000001], [-60.895000000000003, 10.855], [-60.935000000000002, 10.109999999999999], [-61.770000000000003, 10], [-61.950000000000003, 10.09], [-61.659999999999997, 10.365], [-61.68, 10.76]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0440\u0438\u043d\u0438\u0434\u0430\u0434 \u0438 \u0422\u043e\u0431\u0430\u0433\u043e", "fr": "Trinit\u00e9-et-Tobago", "en": "Trinidad and Tobago", "nl": "Trinidad en Tobago", "pt": "Trinidad e Tobago", "no": "Trinidad og Tobago", "de": "Trinidad und Tobago", "it": "Trinidad e Tobago", "sv": "Trinidad och Tobago", "pl": "Trynidad i Tobago", "fi": "Trinidad ja Tobago", "zh": "\u5343\u91cc\u9054\u53ca\u6258\u5df4\u54e5", "ja": "\u30c8\u30ea\u30cb\u30c0\u30fc\u30c9\u30fb\u30c8\u30d0\u30b4", "es": "Trinidad y Tobago"}, "label_fr": "Trinit\u00e9-et-Tobago", "name": "Trinidad and Tobago", "dbpedia_uri": "http://dbpedia.org/resource/Trinidad_and_Tobago"}, "id": "TTO"}, {"geometry": {"type": "Polygon", "coordinates": [[[9.4821399999999993, 30.307556000000002], [9.0556029999999996, 32.102691999999998], [8.4391029999999994, 32.506284999999998], [8.4304729999999992, 32.748336999999999], [7.6126420000000001, 33.344115000000002], [7.5244819999999999, 34.097375999999997], [8.140981, 34.655146000000002], [8.3763679999999994, 35.479875999999997], [8.2178240000000002, 36.433177000000001], [8.4209639999999997, 36.946427], [9.5099940000000007, 37.349994000000002], [10.210001999999999, 37.230001999999999], [10.18065, 36.724038], [11.028867, 37.092103000000002], [11.100026, 36.899996000000002], [10.600004999999999, 36.409999999999997], [10.593287, 35.947443999999997], [10.939519000000001, 35.698984000000003], [10.807847000000001, 34.833506999999997], [10.149592999999999, 34.330773000000001], [10.339658999999999, 33.785741999999999], [10.856835999999999, 33.768740000000001], [11.108501, 33.293343], [11.488787, 33.136996000000003], [11.432252999999999, 32.368903000000003], [10.944789999999999, 32.081814999999999], [10.636901, 31.761420999999999], [9.9502249999999997, 31.376069999999999], [10.056575, 30.961831], [9.9700170000000004, 30.539325000000002], [9.4821399999999993, 30.307556000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0443\u043d\u0438\u0441", "fr": "Tunisie", "en": "Tunisia", "nl": "Tunesi\u00eb", "pt": "Tun\u00edsia", "no": "Tunisia", "de": "Tunesien", "it": "Tunisia", "sv": "Tunisien", "pl": "Tunezja", "fi": "Tunisia", "zh": "\u7a81\u5c3c\u897f\u4e9e", "ja": "\u30c1\u30e5\u30cb\u30b8\u30a2", "es": "T\u00fanez"}, "label_fr": "Tunisie", "name": "Tunisia", "dbpedia_uri": "http://dbpedia.org/resource/Tunisia"}, "id": "TUN"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[36.913127000000003, 41.335357999999999], [38.347664999999999, 40.948585999999999], [39.512607000000003, 41.102763000000003], [40.373432999999999, 41.013672999999997], [41.554084000000003, 41.535656000000003], [42.619548999999999, 41.583173000000002], [43.582746, 41.092143], [43.752657999999997, 40.740200999999999], [43.656435999999999, 40.253563999999997], [44.400008999999997, 40.005000000000003], [44.793990000000001, 39.713003], [44.109225000000002, 39.428136000000002], [44.421402999999998, 38.281281], [44.225755999999997, 37.971584], [44.772699000000003, 37.170445000000001], [44.293452000000002, 37.001514], [43.942259, 37.256228], [42.779125999999998, 37.385263999999999], [42.349590999999997, 37.229872999999998], [41.212088999999999, 37.074351999999998], [40.673259000000002, 37.091276000000001], [39.522579999999998, 36.716054], [38.699891000000001, 36.712927000000001], [38.167726999999999, 36.901209999999999], [37.066761, 36.623035999999999], [36.739494000000001, 36.817520000000002], [36.685389000000001, 36.259698999999998], [36.417549999999999, 36.040616999999997], [36.149763, 35.821534999999997], [35.782085000000002, 36.274994999999997], [36.160822000000003, 36.650606000000003], [35.550936, 36.565443000000002], [34.714553000000002, 36.795532000000001], [34.026895000000003, 36.21996], [32.509157999999999, 36.107564000000004], [31.699594999999999, 36.644275], [30.621625000000002, 36.677864999999997], [30.391096000000001, 36.262981000000003], [29.699975999999999, 36.144356999999999], [28.732903, 36.676831], [27.641186999999999, 36.658822000000001], [27.048767999999999, 37.653360999999997], [26.318218000000002, 38.208132999999997], [26.8047, 38.985759999999999], [26.170784999999999, 39.463611999999998], [27.28002, 40.420014000000002], [28.819977999999999, 40.460011000000002], [29.240003999999999, 41.219991], [31.145934, 41.087622000000003], [32.347979000000002, 41.736263999999998], [33.513283000000001, 42.01896], [35.167704000000001, 42.040225], [36.913127000000003, 41.335357999999999]]], [[[27.192377, 40.690565999999997], [26.358008999999999, 40.151994000000002], [26.043351000000001, 40.617753999999998], [26.056941999999999, 40.824123], [26.294602000000001, 40.936261000000002], [26.604196000000002, 41.562114999999999], [26.117042000000001, 41.826904999999996], [27.135739000000001, 42.141485000000003], [27.99672, 42.007359000000001], [28.115525000000002, 41.622886000000001], [28.988443, 41.299934], [28.806438, 41.054962000000003], [27.619016999999999, 40.999822999999999], [27.192377, 40.690565999999997]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0443\u0440\u0446\u0438\u044f", "fr": "Turquie", "en": "Turkey", "nl": "Turkije", "pt": "Turquia", "no": "Tyrkia", "de": "T\u00fcrkei", "it": "Turchia", "sv": "Turkiet", "pl": "Turcja", "fi": "Turkki", "zh": "\u571f\u8033\u5176", "ja": "\u30c8\u30eb\u30b3", "es": "Turqu\u00eda"}, "label_fr": "Turquie", "name": "Turkey", "dbpedia_uri": "http://dbpedia.org/resource/Turkey"}, "id": "TUR"}, {"geometry": {"type": "Polygon", "coordinates": [[[121.777818, 24.394273999999999], [121.17563199999999, 22.790856999999999], [120.74708, 21.970571], [120.220083, 22.814861000000001], [120.106189, 23.556263000000001], [120.69468000000001, 24.538450999999998], [121.49504399999999, 25.295459000000001], [121.951244, 24.997596000000001], [121.777818, 24.394273999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0430\u0439\u0432\u0430\u043d\u044c", "fr": "Ta\u00efwan", "en": "Taiwan", "nl": "Taiwan", "pt": "Ilha Formosa", "no": "Taiwan", "de": "Taiwan", "it": "Isola di Taiwan", "sv": "Taiwan (\u00f6)", "pl": "Tajwan (wyspa)", "fi": "Taiwan", "zh": "\u53f0\u7063", "ja": "\u53f0\u6e7e", "es": "Isla de Taiw\u00e1n"}, "label_fr": "Ta\u00efwan", "name": "Taiwan", "dbpedia_uri": "http://dbpedia.org/resource/Taiwan"}, "id": "TWN"}, {"geometry": {"type": "Polygon", "coordinates": [[[33.903711000000001, -0.94999999999999996], [34.072620000000001, -1.05982], [37.698689999999999, -3.0969899999999999], [37.7669, -3.6771199999999999], [39.202219999999997, -4.6767700000000003], [38.740540000000003, -5.9089499999999999], [38.799770000000002, -6.4756600000000004], [39.439999999999998, -6.8399999999999999], [39.469999999999999, -7.0999999999999996], [39.194690000000001, -7.7039], [39.252029999999998, -8.0078099999999992], [39.186520000000002, -8.4855099999999997], [39.535739999999997, -9.1123700000000003], [39.949599999999997, -10.0984], [40.316589999999998, -10.3171], [39.521000000000001, -10.896879999999999], [38.427557, -11.285202], [37.827640000000002, -11.268789999999999], [37.471290000000003, -11.568759999999999], [36.775151000000001, -11.594537000000001], [36.514082000000002, -11.720938], [35.312398000000002, -11.439145999999999], [34.559989000000002, -11.520020000000001], [34.280000000000001, -10.16], [33.940837999999999, -9.6936739999999997], [33.739719999999998, -9.4171499999999995], [32.759374999999999, -9.2305989999999998], [32.191865, -8.9303589999999993], [31.556348, -8.7620489999999993], [31.157751000000001, -8.5945789999999995], [30.739999999999998, -8.3399999999999999], [30.199999999999999, -7.0800000000000001], [29.620000000000001, -6.5199999999999996], [29.419993000000002, -5.9399990000000003], [29.519987, -5.4199789999999997], [29.339998000000001, -4.4999830000000003], [29.753512000000001, -4.4523890000000002], [30.116320000000002, -4.0901199999999998], [30.50554, -3.5685799999999999], [30.75224, -3.3593099999999998], [30.743010000000002, -3.0343100000000001], [30.527660000000001, -2.80762], [30.469670000000001, -2.4138299999999999], [30.758309000000001, -2.2872499999999998], [30.816134999999999, -1.698914], [30.419104999999998, -1.1346590000000001], [30.769860000000001, -1.0145500000000001], [31.86617, -1.0273600000000001], [33.903711000000001, -0.94999999999999996]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0430\u043d\u0437\u0430\u043d\u0438\u044f", "fr": "Tanzanie", "en": "Tanzania", "nl": "Tanzania", "pt": "Tanz\u00e2nia", "no": "Tanzania", "de": "Tansania", "it": "Tanzania", "sv": "Tanzania", "pl": "Tanzania", "fi": "Tansania", "zh": "\u5766\u6851\u5c3c\u4e9a", "ja": "\u30bf\u30f3\u30b6\u30cb\u30a2", "es": "Tanzania"}, "label_fr": "Tanzanie", "name": "United Republic of Tanzania", "dbpedia_uri": "http://dbpedia.org/resource/Tanzania"}, "id": "TZA"}, {"geometry": {"type": "Polygon", "coordinates": [[[31.86617, -1.0273600000000001], [30.769860000000001, -1.0145500000000001], [30.419104999999998, -1.1346590000000001], [29.821518999999999, -1.443322], [29.579466, -1.341313], [29.587838000000001, -0.58740599999999998], [29.819500000000001, -0.20530000000000001], [29.875779000000001, 0.59738000000000002], [30.086154000000001, 1.0623130000000001], [30.468508, 1.5838049999999999], [30.85267, 1.849396], [31.174149, 2.2044649999999999], [30.773319999999998, 2.33989], [30.833850000000002, 3.5091700000000001], [31.245560000000001, 3.7818999999999998], [31.881450000000001, 3.5582699999999998], [32.686419999999998, 3.7923200000000001], [33.390000000000001, 3.79], [34.005000000000003, 4.2498849999999999], [34.479129999999998, 3.5556000000000001], [34.596069999999997, 3.0537399999999999], [35.035989999999998, 1.90584], [34.6721, 1.1769400000000001], [34.18, 0.51500000000000001], [33.893568999999999, 0.10981399999999999], [33.903711000000001, -0.94999999999999996], [31.86617, -1.0273600000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0423\u0433\u0430\u043d\u0434\u0430", "fr": "Ouganda", "en": "Uganda", "nl": "Oeganda", "pt": "Uganda", "no": "Uganda", "de": "Uganda", "it": "Uganda", "sv": "Uganda", "pl": "Uganda", "fi": "Uganda", "zh": "\u4e4c\u5e72\u8fbe", "ja": "\u30a6\u30ac\u30f3\u30c0", "es": "Uganda"}, "label_fr": "Ouganda", "name": "Uganda", "dbpedia_uri": "http://dbpedia.org/resource/Uganda"}, "id": "UGA"}, {"geometry": {"type": "Polygon", "coordinates": [[[31.785997999999999, 52.101678], [32.159412000000003, 52.061267000000001], [32.412058000000002, 52.288694999999997], [32.715761000000001, 52.238464999999998], [33.752699999999997, 52.335075000000003], [34.391731, 51.768881999999998], [34.141978000000002, 51.566412999999997], [34.224815999999997, 51.255992999999997], [35.022182999999998, 51.207571999999999], [35.377924, 50.773955000000001], [35.356116, 50.577196999999998], [36.626168, 50.225591000000001], [37.393459999999997, 50.383952999999998], [38.010630999999997, 49.915661999999998], [38.594988000000001, 49.926462000000001], [40.069057999999998, 49.601055000000002], [40.080789000000003, 49.307429999999997], [39.674664, 48.783817999999997], [39.895631999999999, 48.232405], [39.738278000000001, 47.898936999999997], [38.770584999999997, 47.825608000000003], [38.255111999999997, 47.546399999999998], [38.223537999999998, 47.10219], [37.425136999999999, 47.022221000000002], [36.759855000000002, 46.698700000000002], [35.823684999999998, 46.645963999999999], [34.962342, 46.273197000000003], [35.020788000000003, 45.651218999999998], [35.510008999999997, 45.409993], [36.529997999999999, 45.469990000000003], [36.334713000000001, 45.113216000000001], [35.239998999999997, 44.939996000000001], [33.882511000000001, 44.361479000000003], [33.326421000000003, 44.564877000000003], [33.546923999999997, 45.034770999999999], [32.454174000000002, 45.327466000000001], [32.630803999999998, 45.519185999999998], [33.588161999999997, 45.851568999999998], [33.298566999999998, 46.080598000000002], [31.744140000000002, 46.333348000000001], [31.675307, 46.706245000000003], [30.748749, 46.583100000000002], [30.377609, 46.032409999999999], [29.603289, 45.293308000000003], [29.149725, 45.464925000000001], [28.679779, 45.304031000000002], [28.233554000000002, 45.488283000000003], [28.485268999999999, 45.596907000000002], [28.659987000000001, 45.939987000000002], [28.933717000000001, 46.258830000000003], [28.862971999999999, 46.437888999999998], [29.072106999999999, 46.517677999999997], [29.170653999999999, 46.379261999999997], [29.759972000000001, 46.349988000000003], [30.024659, 46.423937000000002], [29.83821, 46.525326], [29.908852, 46.674360999999998], [29.559674000000001, 46.928583000000003], [29.415134999999999, 47.346645000000002], [29.050868000000001, 47.510227], [29.122698, 47.849094999999998], [28.670891000000001, 48.118149000000003], [28.259547000000001, 48.155562000000003], [27.522537, 48.467118999999997], [26.857824000000001, 48.368211000000002], [26.619337000000002, 48.220725999999999], [26.19745, 48.220880999999999], [25.945941000000001, 47.987149000000002], [25.207743000000001, 47.891055999999999], [24.866316999999999, 47.737526000000003], [24.402056000000002, 47.981878000000002], [23.760957999999999, 47.985598000000003], [23.142236, 48.096341000000002], [22.710531, 47.882193999999998], [22.640820000000001, 48.150239999999997], [22.085608000000001, 48.422263999999998], [22.280842, 48.825392000000001], [22.558138, 49.085737999999999], [22.776419000000001, 49.027394999999999], [22.518450000000001, 49.476773999999999], [23.426507999999998, 50.308506000000001], [23.922757000000001, 50.424880999999999], [24.029986000000001, 50.705407000000001], [23.527070999999999, 51.578454000000001], [24.005078000000001, 51.617443999999999], [24.553106, 51.888461], [25.327788000000002, 51.910656000000003], [26.337959000000001, 51.832289000000003], [27.454066000000001, 51.592303000000001], [28.241614999999999, 51.572226999999998], [28.617612999999999, 51.427714000000002], [28.992834999999999, 51.602043999999999], [29.254937999999999, 51.368234000000001], [30.157364000000001, 51.416137999999997], [30.555116999999999, 51.319502999999997], [30.619454000000001, 51.822806], [30.927548999999999, 52.042352999999999], [31.785997999999999, 52.101678]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0423\u043a\u0440\u0430\u0438\u043d\u0430", "fr": "Ukraine", "en": "Ukraine", "nl": "Oekra\u00efne", "pt": "Ucr\u00e2nia", "no": "Ukraina", "de": "Ukraine", "it": "Ucraina", "sv": "Ukraina", "pl": "Ukraina", "fi": "Ukraina", "zh": "\u4e4c\u514b\u5170", "ja": "\u30a6\u30af\u30e9\u30a4\u30ca", "es": "Ucrania"}, "label_fr": "Ukraine", "name": "Ukraine", "dbpedia_uri": "http://dbpedia.org/resource/Ukraine"}, "id": "UKR"}, {"geometry": {"type": "Polygon", "coordinates": [[[-57.625132999999998, -30.216294999999999], [-56.976025999999997, -30.109686], [-55.973244999999999, -30.883075999999999], [-55.601509999999998, -30.853878999999999], [-54.572451999999998, -31.494510999999999], [-53.787951999999997, -32.047243000000002], [-53.209589000000001, -32.727665999999999], [-53.650543999999996, -33.202004000000002], [-53.373662000000003, -33.768377999999998], [-53.806426000000002, -34.396814999999997], [-54.935865999999997, -34.952646999999999], [-55.67409, -34.752659000000001], [-56.215297, -34.859836000000001], [-57.139685, -34.430456], [-57.817861000000001, -34.462547000000001], [-58.427073999999998, -33.909453999999997], [-58.349611000000003, -33.263188999999997], [-58.132648000000003, -33.040567000000003], [-58.142440000000001, -32.044504000000003], [-57.874937000000003, -31.016556000000001], [-57.625132999999998, -30.216294999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0423\u0440\u0443\u0433\u0432\u0430\u0439", "fr": "Uruguay", "en": "Uruguay", "nl": "Uruguay", "pt": "Uruguai", "no": "Uruguay", "de": "Uruguay", "it": "Uruguay", "sv": "Uruguay", "pl": "Urugwaj", "fi": "Uruguay", "zh": "\u4e4c\u62c9\u572d", "ja": "\u30a6\u30eb\u30b0\u30a2\u30a4", "es": "Uruguay"}, "label_fr": "Uruguay", "name": "Uruguay", "dbpedia_uri": "http://dbpedia.org/resource/Uruguay"}, "id": "URY"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-155.54211000000001, 19.083480000000002], [-155.68817000000001, 18.91619], [-155.93664999999999, 19.05939], [-155.90806000000001, 19.33888], [-156.07346999999999, 19.702940000000002], [-156.02368000000001, 19.814219999999999], [-155.85007999999999, 19.97729], [-155.91907, 20.173950000000001], [-155.86107999999999, 20.267209999999999], [-155.78505000000001, 20.248699999999999], [-155.40214, 20.079750000000001], [-155.22452000000001, 19.993020000000001], [-155.06226000000001, 19.859100000000002], [-154.80741, 19.508710000000001], [-154.83147, 19.453279999999999], [-155.22217000000001, 19.239719999999998], [-155.54211000000001, 19.083480000000002]]], [[[-156.07926, 20.643969999999999], [-156.41444999999999, 20.572410000000001], [-156.58672999999999, 20.783000000000001], [-156.70167000000001, 20.8643], [-156.71055000000001, 20.926760000000002], [-156.61258000000001, 21.01249], [-156.25711000000001, 20.917449999999999], [-155.99565999999999, 20.764040000000001], [-156.07926, 20.643969999999999]]], [[[-156.75824, 21.176839999999999], [-156.78933000000001, 21.068729999999999], [-157.32521, 21.097770000000001], [-157.25027, 21.219580000000001], [-156.75824, 21.176839999999999]]], [[[-157.65282999999999, 21.32217], [-157.70703, 21.264420000000001], [-157.77860000000001, 21.277290000000001], [-158.12666999999999, 21.312439999999999], [-158.25380000000001, 21.539190000000001], [-158.29265000000001, 21.57912], [-158.02520000000001, 21.71696], [-157.94161, 21.652719999999999], [-157.65282999999999, 21.32217]]], [[[-159.34512000000001, 21.981999999999999], [-159.46372, 21.882989999999999], [-159.80051, 22.065329999999999], [-159.74877000000001, 22.138200000000001], [-159.59620000000001, 22.236180000000001], [-159.36569, 22.214939999999999], [-159.34512000000001, 21.981999999999999]]], [[[-94.817580000000007, 49.389049999999997], [-94.640000000000001, 48.840000000000003], [-94.329139999999995, 48.670740000000002], [-93.630870000000002, 48.609259999999999], [-92.609999999999999, 48.450000000000003], [-91.640000000000001, 48.140000000000001], [-90.829999999999998, 48.270000000000003], [-89.599999999999994, 48.009999999999998], [-89.272917000000007, 48.019807999999998], [-88.378113999999997, 48.302917999999998], [-87.439792999999995, 47.939999999999998], [-86.461990999999998, 47.553337999999997], [-85.652362999999994, 47.220219], [-84.876080000000002, 46.900083000000002], [-84.779238000000007, 46.637101999999999], [-84.543749000000005, 46.538684000000003], [-84.604900000000001, 46.439599999999999], [-84.336699999999993, 46.408769999999997], [-84.142120000000006, 46.512225999999998], [-84.091851000000005, 46.275418999999999], [-83.890765000000002, 46.116926999999997], [-83.616130999999996, 46.116926999999997], [-83.469550999999996, 45.994686000000002], [-83.592850999999996, 45.816893999999998], [-82.550925000000007, 45.347517000000003], [-82.337762999999995, 44.439999999999998], [-82.137642, 43.571088000000003], [-82.430000000000007, 42.979999999999997], [-82.900000000000006, 42.43], [-83.120000000000005, 42.079999999999998], [-83.141999999999996, 41.975681000000002], [-83.029809999999998, 41.832796000000002], [-82.690089, 41.675105000000002], [-82.439278000000002, 41.675105000000002], [-81.277747000000005, 42.209026000000001], [-80.247448000000006, 42.366199999999999], [-78.939362000000003, 42.863610999999999], [-78.920000000000002, 42.965000000000003], [-79.010000000000005, 43.270000000000003], [-79.171673999999996, 43.466338999999998], [-78.720280000000002, 43.625089000000003], [-77.737885000000006, 43.629055999999999], [-76.820034000000007, 43.628784000000003], [-76.5, 44.018459], [-76.375, 44.096310000000003], [-75.318209999999993, 44.816450000000003], [-74.867000000000004, 45.000480000000003], [-73.347830000000002, 45.007379999999998], [-71.50506, 45.008200000000002], [-71.405000000000001, 45.255000000000003], [-71.084819999999993, 45.305239999999998], [-70.659999999999997, 45.460000000000001], [-70.305000000000007, 45.914999999999999], [-69.999970000000005, 46.693069999999999], [-69.237216000000004, 47.447780999999999], [-68.905000000000001, 47.185000000000002], [-68.234440000000006, 47.354860000000002], [-67.790459999999996, 47.066360000000003], [-67.791340000000005, 45.702809999999999], [-67.137410000000003, 45.137529999999998], [-66.964659999999995, 44.809699999999999], [-68.032520000000005, 44.325200000000002], [-69.060000000000002, 43.979999999999997], [-70.116169999999997, 43.684049999999999], [-70.645476000000002, 43.090237999999999], [-70.814890000000005, 42.865299999999998], [-70.825000000000003, 42.335000000000001], [-70.495000000000005, 41.805], [-70.079999999999998, 41.780000000000001], [-70.185000000000002, 42.145000000000003], [-69.884969999999996, 41.922829999999998], [-69.965029999999999, 41.637169999999998], [-70.640000000000001, 41.475000000000001], [-71.12039, 41.494450000000001], [-71.859999999999999, 41.32], [-72.295000000000002, 41.270000000000003], [-72.876429999999999, 41.220649999999999], [-73.709999999999994, 40.931102000000003], [-72.241259999999997, 41.119480000000003], [-71.944999999999993, 40.93], [-73.344999999999999, 40.630000000000003], [-73.981999999999999, 40.628], [-73.952325000000002, 40.750749999999996], [-74.256709999999998, 40.473509999999997], [-73.962440000000001, 40.427630000000001], [-74.178380000000004, 39.70926], [-74.906040000000004, 38.939540000000001], [-74.980410000000006, 39.196399999999997], [-75.200019999999995, 39.248449999999998], [-75.528049999999993, 39.4985], [-75.319999999999993, 38.960000000000001], [-75.071834999999993, 38.782032000000001], [-75.056730000000002, 38.404119999999999], [-75.377470000000002, 38.015509999999999], [-75.94023, 37.216889999999999], [-76.031270000000006, 37.256599999999999], [-75.722049999999996, 37.937049999999999], [-76.232870000000005, 38.319215], [-76.349999999999994, 39.149999999999999], [-76.542725000000004, 38.717615000000002], [-76.329329999999999, 38.083260000000003], [-76.989998, 38.239992000000001], [-76.30162, 37.917945000000003], [-76.258740000000003, 36.9664], [-75.971800000000002, 36.897260000000003], [-75.868039999999993, 36.551250000000003], [-75.727490000000003, 35.550739999999998], [-76.36318, 34.808540000000001], [-77.397634999999994, 34.512009999999997], [-78.054959999999994, 33.925469999999997], [-78.554349999999999, 33.861330000000002], [-79.060670000000002, 33.493949999999998], [-79.203569999999999, 33.158389999999997], [-80.301325000000006, 32.509354999999999], [-80.864980000000003, 32.033299999999997], [-81.336290000000005, 31.44049], [-81.49042, 30.729990000000001], [-81.31371, 30.035520000000002], [-80.980000000000004, 29.18], [-80.535584999999998, 28.47213], [-80.530000000000001, 28.039999999999999], [-80.056539000000001, 26.879999999999999], [-80.088014999999999, 26.205765], [-80.131559999999993, 25.816775], [-80.381029999999996, 25.206160000000001], [-80.680000000000007, 25.079999999999998], [-81.172129999999996, 25.201260000000001], [-81.329999999999998, 25.640000000000001], [-81.709999999999994, 25.870000000000001], [-82.239999999999995, 26.73], [-82.705150000000003, 27.495039999999999], [-82.855260000000001, 27.886240000000001], [-82.650000000000006, 28.550000000000001], [-82.930000000000007, 29.100000000000001], [-83.709590000000006, 29.93656], [-84.099999999999994, 30.09], [-85.108819999999994, 29.636150000000001], [-85.287840000000003, 29.686119999999999], [-85.773099999999999, 30.152609999999999], [-86.400000000000006, 30.399999999999999], [-87.530360000000002, 30.274329999999999], [-88.417820000000006, 30.384899999999998], [-89.180490000000006, 30.31598], [-89.593830999999994, 30.159994000000001], [-89.413735000000003, 29.894189999999998], [-89.430000000000007, 29.48864], [-89.217669999999998, 29.291080000000001], [-89.408230000000003, 29.159610000000001], [-89.77928, 29.30714], [-90.154629999999997, 29.117429999999999], [-90.880224999999996, 29.148534999999999], [-91.626784999999998, 29.677], [-92.49906, 29.552299999999999], [-93.226370000000003, 29.783750000000001], [-93.848420000000004, 29.713629999999998], [-94.689999999999998, 29.48], [-95.600260000000006, 28.738630000000001], [-96.594040000000007, 28.307480000000002], [-97.140000000000001, 27.829999999999998], [-97.370000000000005, 27.379999999999999], [-97.379999999999995, 26.690000000000001], [-97.329999999999998, 26.210000000000001], [-97.140000000000001, 25.870000000000001], [-97.530000000000001, 25.84], [-98.239999999999995, 26.059999999999999], [-99.019999999999996, 26.370000000000001], [-99.299999999999997, 26.84], [-99.519999999999996, 27.539999999999999], [-100.11, 28.109999999999999], [-100.45583999999999, 28.696120000000001], [-100.9576, 29.380710000000001], [-101.66240000000001, 29.779299999999999], [-102.48, 29.760000000000002], [-103.11, 28.969999999999999], [-103.94, 29.27], [-104.45697, 29.571960000000001], [-104.70574999999999, 30.121729999999999], [-105.03737, 30.644020000000001], [-105.63159, 31.083829999999999], [-106.1429, 31.39995], [-106.50758999999999, 31.754519999999999], [-108.23999999999999, 31.754854000000002], [-108.24194, 31.342220000000001], [-109.035, 31.341940000000001], [-111.02361000000001, 31.334720000000001], [-113.30498, 32.039140000000003], [-114.815, 32.525280000000002], [-114.72139, 32.720829999999999], [-115.99135, 32.612389999999998], [-117.12775999999999, 32.535339999999998], [-117.29593800000001, 33.046225], [-117.944, 33.621236000000003], [-118.410602, 33.740909000000002], [-118.51989500000001, 34.027782000000002], [-119.081, 34.078000000000003], [-119.438841, 34.348477000000003], [-120.36778, 34.447110000000002], [-120.62286, 34.608550000000001], [-120.74433000000001, 35.156860000000002], [-121.71456999999999, 36.161529999999999], [-122.54747, 37.551760000000002], [-122.51201, 37.783389999999997], [-122.95319000000001, 38.113709999999998], [-123.7272, 38.951659999999997], [-123.86517000000001, 39.76699], [-124.39807, 40.313200000000002], [-124.17886, 41.142020000000002], [-124.2137, 41.999639999999999], [-124.53283999999999, 42.765990000000002], [-124.14214, 43.708379999999998], [-124.020535, 44.615895000000002], [-123.89892999999999, 45.523409999999998], [-124.079635, 46.864750000000001], [-124.39567, 47.720170000000003], [-124.68720999999999, 48.184432999999999], [-124.566101, 48.379714999999997], [-123.12, 48.039999999999999], [-122.58736, 47.095999999999997], [-122.34, 47.359999999999999], [-122.5, 48.18], [-122.84, 49], [-120, 49], [-117.03121, 49], [-116.04818, 49], [-113, 49], [-110.05, 49], [-107.05, 49], [-104.04826, 48.999859999999998], [-100.65000000000001, 49], [-97.228719999999996, 49.000700000000002], [-95.15907, 49], [-95.156090000000006, 49.384250000000002], [-94.817580000000007, 49.389049999999997]]], [[[-153.006314, 57.115842000000001], [-154.00509, 56.734676999999998], [-154.516403, 56.992749000000003], [-154.67099300000001, 57.461196000000001], [-153.76277999999999, 57.816575], [-153.22872899999999, 57.968967999999997], [-152.56479100000001, 57.901426999999998], [-152.14114699999999, 57.591059000000001], [-153.006314, 57.115842000000001]]], [[[-165.57916399999999, 59.909987000000001], [-166.19277, 59.754441], [-166.84833699999999, 59.941406000000001], [-167.455277, 60.213068999999997], [-166.467792, 60.384169999999997], [-165.67443, 60.293607000000002], [-165.57916399999999, 59.909987000000001]]], [[[-171.73165700000001, 63.782514999999997], [-171.11443399999999, 63.592191], [-170.49111199999999, 63.694974999999999], [-169.68250499999999, 63.431116000000003], [-168.68943899999999, 63.297505999999998], [-168.771941, 63.188597999999999], [-169.52943999999999, 62.976931], [-170.29055600000001, 63.194437999999998], [-170.67138600000001, 63.375821999999999], [-171.55306300000001, 63.317788999999998], [-171.791111, 63.405845999999997], [-171.73165700000001, 63.782514999999997]]], [[[-155.06779, 71.147775999999993], [-154.344165, 70.696409000000003], [-153.90000599999999, 70.889989], [-152.21000599999999, 70.829992000000004], [-152.27000200000001, 70.600005999999993], [-150.739992, 70.430017000000007], [-149.72000299999999, 70.530010000000004], [-147.613362, 70.214034999999996], [-145.68998999999999, 70.120009999999994], [-144.92001099999999, 69.989992000000001], [-143.58944600000001, 70.152513999999996], [-142.07250999999999, 69.851938000000004], [-140.98598799999999, 69.711997999999994], [-140.98598799999999, 69.711997999999994], [-140.99249900000001, 66.000028999999998], [-140.99777, 60.306396999999997], [-140.01299800000001, 60.276837999999998], [-139.03899999999999, 60.000006999999997], [-138.34089, 59.562109999999997], [-137.45249999999999, 58.905000000000001], [-136.47971999999999, 59.463889999999999], [-135.47583, 59.787779999999998], [-134.94499999999999, 59.270560000000003], [-134.27110999999999, 58.861109999999996], [-133.355549, 58.410285000000002], [-132.73042000000001, 57.692889999999998], [-131.70780999999999, 56.552120000000002], [-130.00778, 55.91583], [-129.979994, 55.284998000000002], [-130.53611000000001, 54.802753000000003], [-131.08581799999999, 55.178905999999998], [-131.96721099999999, 55.497776000000002], [-132.250011, 56.369996], [-133.53918100000001, 57.178887000000003], [-134.07806299999999, 58.123068000000004], [-135.03821099999999, 58.187714999999997], [-136.628062, 58.212209000000001], [-137.800006, 58.499994999999998], [-139.86778699999999, 59.537762000000001], [-140.82527400000001, 59.727516999999999], [-142.574444, 60.084446999999997], [-143.95888099999999, 59.999180000000003], [-145.925557, 60.45861], [-147.114374, 60.884656], [-148.22430600000001, 60.672989000000001], [-148.018066, 59.978329000000002], [-148.57082299999999, 59.914172999999998], [-149.727858, 59.705658], [-150.60824299999999, 59.368211000000002], [-151.71639300000001, 59.155821000000003], [-151.859433, 59.744984000000002], [-151.409719, 60.725802999999999], [-150.34694099999999, 61.033588000000002], [-150.62111100000001, 61.284424999999999], [-151.895839, 60.727198000000001], [-152.57832999999999, 60.061656999999997], [-154.019172, 59.350279], [-153.28751099999999, 58.864727999999999], [-154.23249200000001, 58.146374000000002], [-155.307491, 57.727795], [-156.308335, 57.422773999999997], [-156.55609699999999, 56.979984999999999], [-158.11721700000001, 56.463608000000001], [-158.43332100000001, 55.994154000000002], [-159.60332700000001, 55.566685999999997], [-160.28971999999999, 55.643580999999998], [-161.22304800000001, 55.364735000000003], [-162.23776599999999, 55.024186999999998], [-163.069447, 54.689737000000001], [-164.78556900000001, 54.404173], [-164.94222600000001, 54.572225000000003], [-163.84834000000001, 55.039431], [-162.870001, 55.348042999999997], [-161.80417499999999, 55.894986000000003], [-160.563605, 56.008054999999999], [-160.07056, 56.418055000000003], [-158.68444299999999, 57.016674999999999], [-158.461097, 57.216920999999999], [-157.72277, 57.570000999999998], [-157.550274, 58.328325999999997], [-157.041675, 58.918885000000003], [-158.19473099999999, 58.615802000000002], [-158.51721800000001, 58.787781000000003], [-159.058606, 58.424185999999999], [-159.71166700000001, 58.93139], [-159.981289, 58.572549000000002], [-160.35527099999999, 59.071123], [-161.35500300000001, 58.670838000000003], [-161.96889400000001, 58.671664999999997], [-162.05498700000001, 59.266925000000001], [-161.87417099999999, 59.633620999999998], [-162.51805899999999, 59.989724000000002], [-163.818341, 59.798056000000003], [-164.662218, 60.267484000000003], [-165.34638799999999, 60.507496000000003], [-165.350832, 61.073895], [-166.12137899999999, 61.500019000000002], [-165.734452, 62.074997000000003], [-164.91917900000001, 62.633076000000003], [-164.56250800000001, 63.146377999999999], [-163.753332, 63.219448999999997], [-163.06722400000001, 63.059458999999997], [-162.26055500000001, 63.541936], [-161.53444999999999, 63.455817000000003], [-160.77250699999999, 63.766108000000003], [-160.95833500000001, 64.222798999999995], [-161.518068, 64.402788000000001], [-160.77777800000001, 64.788604000000007], [-161.39192600000001, 64.777235000000005], [-162.45304999999999, 64.559444999999997], [-162.75778600000001, 64.338605000000001], [-163.54639399999999, 64.559160000000006], [-164.96082999999999, 64.446944999999999], [-166.42528799999999, 64.686672000000002], [-166.84500399999999, 65.088896000000005], [-168.11055999999999, 65.669996999999995], [-166.70527100000001, 66.088318000000001], [-164.47470999999999, 66.576660000000004], [-163.652512, 66.576660000000004], [-163.788602, 66.077207000000001], [-161.677774, 66.116119999999995], [-162.48971499999999, 66.735564999999994], [-163.719717, 67.116394999999997], [-164.43099100000001, 67.616337999999999], [-165.390287, 68.042771999999999], [-166.76444100000001, 68.358877000000007], [-166.20470700000001, 68.883031000000003], [-164.43081100000001, 68.915535000000006], [-163.16861399999999, 69.371115000000003], [-162.930566, 69.858062000000004], [-161.908897, 70.333330000000004], [-160.934797, 70.447689999999994], [-159.039176, 70.891642000000004], [-158.11972299999999, 70.824720999999997], [-156.580825, 71.357764000000003], [-155.06779, 71.147775999999993]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u043e\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0435 \u0428\u0442\u0430\u0442\u044b \u0410\u043c\u0435\u0440\u0438\u043a\u0438", "fr": "\u00c9tats-Unis", "en": "United States", "nl": "Verenigde Staten", "pt": "Estados Unidos", "no": "USA", "de": "Vereinigte Staaten", "it": "Stati Uniti d'America", "sv": "USA", "pl": "Stany Zjednoczone", "fi": "Yhdysvallat", "zh": "\u7f8e\u570b", "ja": "\u30a2\u30e1\u30ea\u30ab\u5408\u8846\u56fd", "es": "Estados Unidos"}, "label_fr": "\u00c9tats-Unis", "name": "United States of America", "dbpedia_uri": "http://dbpedia.org/resource/United_States"}, "id": "USA"}, {"geometry": {"type": "Polygon", "coordinates": [[[66.518607000000003, 37.362783999999998], [66.546149999999997, 37.974685000000001], [65.215998999999996, 38.402695000000001], [64.170222999999993, 38.892406999999999], [63.518014999999998, 39.363256999999997], [62.37426, 40.053885999999999], [61.882714, 41.084857], [61.547179, 41.266370000000002], [60.465952999999999, 41.220326999999997], [60.083340999999997, 41.425145999999998], [59.976421999999999, 42.223081999999998], [58.629010999999998, 42.751550999999999], [57.786529999999999, 42.170552999999998], [56.932214999999999, 41.826025999999999], [57.096390999999997, 41.322310000000002], [55.968190999999997, 41.308641999999999], [55.928916999999998, 44.995857999999998], [58.503126999999999, 45.586804000000001], [58.689988999999997, 45.500014], [60.239972000000002, 44.784036999999998], [61.058320000000002, 44.405816999999999], [62.013300000000001, 43.504477000000001], [63.185786999999998, 43.650075000000001], [64.900824, 43.728081000000003], [66.098011999999997, 42.997660000000003], [66.023392000000001, 41.994646000000003], [66.510649000000001, 41.987644000000003], [66.714046999999994, 41.168444000000001], [67.985855999999998, 41.135990999999997], [68.259895999999998, 40.662325000000003], [68.632482999999993, 40.668680999999999], [69.070026999999996, 41.384244000000002], [70.388964999999999, 42.081308], [70.962315000000004, 42.266154], [71.259247999999999, 42.167710999999997], [70.420022000000003, 41.519998000000001], [71.157859000000002, 41.143586999999997], [71.870114999999998, 41.392899999999997], [73.055417000000006, 40.866033000000002], [71.774874999999994, 40.145843999999997], [71.014197999999993, 40.244365999999999], [70.601406999999995, 40.218527000000002], [70.458160000000007, 40.496495000000003], [70.666622000000004, 40.960213000000003], [69.329494999999994, 40.727823999999998], [69.011633000000003, 40.086157999999998], [68.536416000000003, 39.533453000000002], [67.701429000000005, 39.580477999999999], [67.442220000000006, 39.140143999999999], [68.176024999999996, 38.901553], [68.392032999999998, 38.157024999999997], [67.829999999999998, 37.144993999999997], [67.075782000000004, 37.356144], [66.518607000000003, 37.362783999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0423\u0437\u0431\u0435\u043a\u0438\u0441\u0442\u0430\u043d", "fr": "Ouzb\u00e9kistan", "en": "Uzbekistan", "nl": "Oezbekistan", "pt": "Uzbequist\u00e3o", "no": "Usbekistan", "de": "Usbekistan", "it": "Uzbekistan", "sv": "Uzbekistan", "pl": "Uzbekistan", "fi": "Uzbekistan", "zh": "\u4e4c\u5179\u522b\u514b\u65af\u5766", "ja": "\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3", "es": "Uzbekist\u00e1n"}, "label_fr": "Ouzb\u00e9kistan", "name": "Uzbekistan", "dbpedia_uri": "http://dbpedia.org/resource/Uzbekistan"}, "id": "UZB"}, {"geometry": {"type": "Polygon", "coordinates": [[[-71.331584000000007, 11.776284], [-71.360005999999998, 11.539994], [-71.947050000000004, 11.423282], [-71.620868000000002, 10.96946], [-71.633064000000005, 10.446494], [-72.074173999999999, 9.8656509999999997], [-71.695644000000001, 9.0722629999999995], [-71.264559000000006, 9.1371950000000002], [-71.039998999999995, 9.8599929999999993], [-71.350083999999995, 10.211935], [-71.400622999999996, 10.968969], [-70.155298999999999, 11.375482], [-70.293842999999995, 11.846822], [-69.943245000000005, 12.162307], [-69.584299999999999, 11.459611000000001], [-68.882998999999998, 11.443384999999999], [-68.233271000000002, 10.885744000000001], [-68.194126999999995, 10.554653], [-67.296249000000003, 10.545868], [-66.227863999999997, 10.648626999999999], [-65.655237999999997, 10.200799], [-64.890451999999996, 10.077215000000001], [-64.329479000000006, 10.389599], [-64.318006999999994, 10.641418], [-63.079321999999998, 10.701724], [-61.880946000000002, 10.715624999999999], [-62.730119000000002, 10.420268999999999], [-62.388511999999999, 9.9482040000000005], [-61.588766999999997, 9.8730670000000007], [-60.830596999999997, 9.3813399999999998], [-60.671252000000003, 8.5801739999999995], [-60.150095999999998, 8.6027570000000004], [-59.758285000000001, 8.3670349999999996], [-60.550587999999998, 7.7796029999999998], [-60.637973000000002, 7.415], [-60.295667999999999, 7.0439109999999996], [-60.543998999999999, 6.8565839999999998], [-61.159336000000003, 6.6960769999999998], [-61.139415, 6.2342969999999998], [-61.410302999999999, 5.9590680000000003], [-60.733573999999997, 5.2002769999999998], [-60.601179000000002, 4.9180979999999996], [-60.966892999999999, 4.5364680000000002], [-62.085430000000002, 4.1621240000000004], [-62.804532999999999, 4.0069650000000001], [-63.093198000000001, 3.7705709999999999], [-63.888342999999999, 4.0205299999999999], [-64.628658999999999, 4.1484810000000003], [-64.816063999999997, 4.0564450000000001], [-64.368493999999998, 3.7972100000000002], [-64.408828, 3.1267860000000001], [-64.269998999999999, 2.4970059999999998], [-63.422866999999997, 2.4110680000000002], [-63.368788000000002, 2.2008999999999999], [-64.083084999999997, 1.916369], [-64.199306000000007, 1.492855], [-64.611012000000002, 1.3287310000000001], [-65.354713000000004, 1.0952820000000001], [-65.548266999999996, 0.78925400000000001], [-66.325765000000004, 0.72445199999999998], [-66.876326000000006, 1.2533609999999999], [-67.181293999999994, 2.2506379999999999], [-67.447091999999998, 2.6002809999999998], [-67.809938000000002, 2.8206549999999999], [-67.303173000000001, 3.318454], [-67.337564, 3.5423420000000001], [-67.621836000000002, 3.8394819999999998], [-67.823012000000006, 4.5039369999999996], [-67.744697000000002, 5.2211290000000004], [-67.521531999999993, 5.55687], [-67.341440000000006, 6.0954680000000003], [-67.695087000000001, 6.2673180000000004], [-68.265051999999997, 6.1532679999999997], [-68.985319000000004, 6.2068050000000001], [-69.389480000000006, 6.0998609999999998], [-70.093312999999995, 6.9603760000000001], [-70.674233999999998, 7.0877850000000002], [-71.960176000000004, 6.9916150000000004], [-72.198352, 7.3404309999999997], [-72.444486999999995, 7.4237849999999996], [-72.479679000000004, 7.6325060000000002], [-72.360900999999998, 8.0026379999999993], [-72.439862000000005, 8.4052749999999996], [-72.660494999999997, 8.6252879999999994], [-72.788730000000001, 9.0850270000000002], [-73.304952, 9.1519999999999992], [-73.027603999999997, 9.7367699999999999], [-72.905286000000004, 10.450343999999999], [-72.614658000000006, 10.821975], [-72.227575000000002, 11.108701999999999], [-71.973922000000002, 11.608672], [-71.331584000000007, 11.776284]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0412\u0435\u043d\u0435\u0441\u0443\u044d\u043b\u0430", "fr": "Venezuela", "en": "Venezuela", "nl": "Venezuela", "pt": "Venezuela", "no": "Venezuela", "de": "Venezuela", "it": "Venezuela", "sv": "Venezuela", "pl": "Wenezuela", "fi": "Venezuela", "zh": "\u59d4\u5167\u745e\u62c9", "ja": "\u30d9\u30cd\u30ba\u30a8\u30e9", "es": "Venezuela"}, "label_fr": "Venezuela", "name": "Venezuela", "dbpedia_uri": "http://dbpedia.org/resource/Venezuela"}, "id": "VEN"}, {"geometry": {"type": "Polygon", "coordinates": [[[108.05018, 21.552379999999999], [106.715068, 20.696850999999999], [105.881682, 19.752050000000001], [105.66200600000001, 19.058164999999999], [106.426817, 18.004121000000001], [107.361954, 16.697457], [108.26949500000001, 16.079742], [108.877107, 15.276691], [109.33526999999999, 13.426028000000001], [109.200136, 11.666859000000001], [108.36613, 11.008321], [107.220929, 10.364483999999999], [106.405113, 9.5308399999999995], [105.158264, 8.5997599999999998], [104.795185, 9.2410379999999996], [105.07620199999999, 9.9184909999999995], [104.334335, 10.486544], [105.199915, 10.88931], [106.24966999999999, 10.961812], [105.810524, 11.567615], [107.49140300000001, 12.337206], [107.614548, 13.535531000000001], [107.382727, 14.202441], [107.564525, 15.202173], [107.31270600000001, 15.908538], [106.55600800000001, 16.604284], [105.92576200000001, 17.485315], [105.094598, 18.666975000000001], [103.89653199999999, 19.265180999999998], [104.18338799999999, 19.624668], [104.822574, 19.886641999999998], [104.435, 20.758732999999999], [103.203861, 20.766562], [102.754896, 21.675136999999999], [102.170436, 22.464753000000002], [102.706992, 22.708794999999999], [103.504515, 22.703757], [104.47685799999999, 22.81915], [105.32920900000001, 23.352063000000001], [105.81124699999999, 22.976891999999999], [106.725403, 22.794267999999999], [106.567273, 22.218205000000001], [107.04342, 21.811899], [108.05018, 21.552379999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0412\u044c\u0435\u0442\u043d\u0430\u043c", "fr": "Vi\u00eat Nam", "en": "Vietnam", "nl": "Vietnam", "pt": "Vietname", "no": "Vietnam", "de": "Vietnam", "it": "Vietnam", "sv": "Vietnam", "pl": "Wietnam", "fi": "Vietnam", "zh": "\u8d8a\u5357", "ja": "\u30d9\u30c8\u30ca\u30e0", "es": "Vietnam"}, "label_fr": "Vi\u00eat Nam", "name": "Vietnam", "dbpedia_uri": "http://dbpedia.org/resource/Vietnam"}, "id": "VNM"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[167.844877, -16.466332999999999], [167.51518100000001, -16.597850000000001], [167.18000799999999, -16.159994999999999], [167.216801, -15.891845999999999], [167.844877, -16.466332999999999]]], [[[167.10771199999999, -14.933920000000001], [167.270028, -15.740021], [167.00120699999999, -15.614602], [166.79315800000001, -15.668811], [166.64985899999999, -15.392704], [166.62913699999999, -14.626497000000001], [167.10771199999999, -14.933920000000001]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0412\u0430\u043d\u0443\u0430\u0442\u0443", "fr": "Vanuatu", "en": "Vanuatu", "nl": "Vanuatu", "pt": "Vanuatu", "no": "Vanuatu", "de": "Vanuatu", "it": "Vanuatu", "sv": "Vanuatu", "pl": "Vanuatu", "fi": "Vanuatu", "zh": "\u74e6\u52aa\u963f\u56fe", "ja": "\u30d0\u30cc\u30a2\u30c4", "es": "Vanuatu"}, "label_fr": "Vanuatu", "name": "Vanuatu", "dbpedia_uri": "http://dbpedia.org/resource/Vanuatu"}, "id": "VUT"}, {"geometry": {"type": "Polygon", "coordinates": [[[35.545665, 32.393991999999997], [35.545251999999998, 31.782505], [35.397561000000003, 31.489086], [34.927408, 31.353435000000001], [34.970506999999998, 31.616778], [35.225892000000002, 31.754341], [34.974640999999998, 31.866582000000001], [35.183929999999997, 32.532511], [35.545665, 32.393991999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0417\u0430\u043f\u0430\u0434\u043d\u044b\u0439 \u0431\u0435\u0440\u0435\u0433 \u0440\u0435\u043a\u0438 \u0418\u043e\u0440\u0434\u0430\u043d", "fr": "Cisjordanie", "en": "West Bank", "nl": "Westelijke Jordaanoever", "pt": "Cisjord\u00e2nia", "no": "Vestbredden", "de": "Westjordanland", "it": "Cisgiordania", "sv": "V\u00e4stbanken", "pl": "Zachodni Brzeg", "fi": "L\u00e4nsiranta", "zh": "\u7d04\u65e6\u6cb3\u897f\u5cb8\u5730\u5340", "ja": "\u30e8\u30eb\u30c0\u30f3\u5ddd\u897f\u5cb8\u5730\u533a", "es": "Cisjordania"}, "label_fr": "Cisjordanie", "name": "West Bank", "dbpedia_uri": "http://dbpedia.org/resource/West_Bank"}, "id": "PSE"}, {"geometry": {"type": "Polygon", "coordinates": [[[53.108573, 16.651050999999999], [52.385205999999997, 16.382411000000001], [52.191729000000002, 15.938433], [52.168165000000002, 15.59742], [51.172514999999997, 15.17525], [49.574576, 14.708767], [48.679231000000001, 14.003202], [48.238947000000003, 13.948090000000001], [47.938913999999997, 14.007232999999999], [47.354453999999997, 13.592219999999999], [46.717075999999999, 13.399699], [45.877592999999997, 13.347764], [45.625050000000002, 13.290946], [45.406458999999998, 13.026904999999999], [45.144356000000002, 12.953938000000001], [44.989533000000002, 12.699586999999999], [44.494576000000002, 12.721653], [44.175113000000003, 12.58595], [43.482959000000001, 12.636799999999999], [43.222870999999998, 13.22095], [43.251448000000003, 13.767583999999999], [43.087944, 14.06263], [42.892245000000003, 14.802249], [42.604872999999998, 15.213335000000001], [42.805014999999997, 15.261963], [42.702438000000001, 15.718885999999999], [42.823670999999997, 15.911742], [42.779331999999997, 16.347891000000001], [43.218375000000002, 16.666889999999999], [43.115797999999998, 17.088439999999999], [43.380794000000002, 17.579986999999999], [43.791519000000001, 17.319977000000002], [44.062612999999999, 17.410359], [45.216650999999999, 17.433329000000001], [45.399999000000001, 17.333335000000002], [46.366658999999999, 17.233315000000001], [46.749994000000001, 17.283338000000001], [47.000005000000002, 16.949998999999998], [47.466695000000001, 17.116682000000001], [48.183343999999998, 18.166668999999999], [49.116672000000001, 18.616668000000001], [52.000010000000003, 19.000003], [52.782184000000001, 17.349741999999999], [53.108573, 16.651050999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0419\u0435\u043c\u0435\u043d", "fr": "Y\u00e9men", "en": "Yemen", "nl": "Jemen", "pt": "I\u00e9men", "no": "Jemen", "de": "Jemen", "it": "Yemen", "sv": "Jemen", "pl": "Jemen", "fi": "Jemen", "zh": "\u4e5f\u95e8", "ja": "\u30a4\u30a8\u30e1\u30f3", "es": "Yemen"}, "label_fr": "Y\u00e9men", "name": "Yemen", "dbpedia_uri": "http://dbpedia.org/resource/Yemen"}, "id": "YEM"}, {"geometry": {"type": "Polygon", "coordinates": [[[31.521000999999998, -29.257387000000001], [31.325561, -29.401978], [30.901762999999999, -29.909956999999999], [30.622813000000001, -30.423776], [30.055716, -31.140269], [28.925553000000001, -32.172041], [28.219756, -32.771953000000003], [27.464607999999998, -33.226964000000002], [26.419452, -33.61495], [25.909663999999999, -33.66704], [25.780628, -33.944645999999999], [25.172861999999999, -33.796850999999997], [24.677852999999999, -33.987175999999998], [23.594042999999999, -33.794474000000001], [22.988188999999998, -33.916431000000003], [22.574157, -33.864083000000001], [21.542798999999999, -34.258839000000002], [20.689053000000001, -34.417175], [20.071261, -34.795136999999997], [19.616405, -34.819166000000003], [19.193277999999999, -34.462598999999997], [18.855315000000001, -34.444305999999997], [18.424643, -33.997872999999998], [18.377410999999999, -34.136521000000002], [18.244499000000001, -33.867752000000003], [18.250080000000001, -33.281430999999998], [17.925190000000001, -32.611291000000001], [18.247910000000001, -32.429130999999998], [18.221761999999998, -31.661632999999998], [17.566918000000001, -30.725721], [17.064416000000001, -29.878640999999998], [17.062918, -29.875954], [16.344977, -28.576705], [16.824017000000001, -28.082162], [17.218928999999999, -28.355943], [17.387497, -28.783514], [17.836151999999998, -28.856377999999999], [18.464898999999999, -29.045462000000001], [19.002127000000002, -28.972442999999998], [19.894734, -28.461105], [19.895768, -24.767790000000002], [20.165725999999999, -24.917961999999999], [20.758609, -25.868136], [20.66647, -26.477453000000001], [20.889609, -26.828543], [21.605896000000001, -26.726534000000001], [22.105969000000002, -26.280256000000001], [22.579532, -25.979448000000001], [22.824271, -25.500458999999999], [23.312097000000001, -25.268689999999999], [23.73357, -25.390129000000002], [24.211266999999999, -25.670216], [25.025171, -25.719670000000001], [25.664666, -25.486816000000001], [25.765848999999999, -25.174845000000001], [25.941652000000001, -24.696373000000001], [26.485752999999999, -24.616326999999998], [26.786407000000001, -24.240691000000002], [27.119409999999998, -23.574323], [28.017236, -22.827753999999999], [29.432188, -22.091313], [29.839037000000001, -22.102215999999999], [30.322883000000001, -22.271612000000001], [30.659865, -22.151567], [31.191409, -22.25151], [31.670397999999999, -23.658968999999999], [31.930589000000001, -24.369416999999999], [31.752407999999999, -25.484283999999999], [31.837778, -25.843332], [31.333158000000001, -25.660191000000001], [31.044080000000001, -25.731452000000001], [30.949667000000002, -26.022649000000001], [30.676608999999999, -26.398078000000002], [30.685962, -26.743845], [31.282772999999999, -27.285879000000001], [31.86806, -27.177927], [32.071665000000003, -26.733820000000001], [32.830120000000001, -26.742191999999999], [32.580264999999997, -27.470158000000001], [32.462133000000001, -28.301010999999999], [32.203389000000001, -28.752405], [31.521000999999998, -29.257387000000001]], [[28.978262999999998, -28.955597000000001], [28.541699999999999, -28.647501999999999], [28.074338000000001, -28.851469000000002], [27.532511, -29.242711], [26.999262000000002, -29.875954], [27.749396999999998, -30.645105999999998], [28.107205, -30.545732000000001], [28.291069, -30.226216999999998], [28.848400000000002, -30.070050999999999], [29.018415000000001, -29.743766000000001], [29.325165999999999, -29.257387000000001], [28.978262999999998, -28.955597000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042e\u0436\u043d\u043e-\u0410\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430\u044f \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430", "fr": "Afrique du Sud", "en": "South Africa", "nl": "Zuid-Afrika", "pt": "\u00c1frica do Sul", "no": "S\u00f8r-Afrika", "de": "S\u00fcdafrika", "it": "Sudafrica", "sv": "Sydafrika", "pl": "Republika Po\u0142udniowej Afryki", "fi": "Etel\u00e4-Afrikka", "zh": "\u5357\u975e", "ja": "\u5357\u30a2\u30d5\u30ea\u30ab\u5171\u548c\u56fd", "es": "Sud\u00e1frica"}, "label_fr": "Afrique du Sud", "name": "South Africa", "dbpedia_uri": "http://dbpedia.org/resource/South_Africa"}, "id": "ZAF"}, {"geometry": {"type": "Polygon", "coordinates": [[[32.759374999999999, -9.2305989999999998], [33.231388000000003, -9.6767219999999998], [33.485688000000003, -10.525558999999999], [33.315309999999997, -10.79655], [33.114288999999999, -11.607198], [33.306421999999998, -12.435778000000001], [32.991764000000003, -12.783871], [32.688164999999998, -13.712858000000001], [33.214024999999999, -13.97186], [30.179480999999999, -14.796099], [30.274256000000001, -15.507787], [29.516833999999999, -15.644678000000001], [28.947462999999999, -16.043050999999998], [28.825869000000001, -16.389748999999998], [28.467905999999999, -16.468399999999999], [27.598243, -17.290831000000001], [27.044426999999999, -17.938026000000001], [26.706772999999998, -17.961228999999999], [26.381934999999999, -17.846042000000001], [25.264226000000001, -17.736540000000002], [25.084443, -17.661816000000002], [25.07695, -17.578823], [24.682348999999999, -17.353411000000001], [24.033861999999999, -17.295843000000001], [23.215047999999999, -17.523116000000002], [22.562477999999999, -16.898451000000001], [21.887843, -16.080310000000001], [21.933886000000001, -12.898436999999999], [24.016137000000001, -12.911046000000001], [23.930921999999999, -12.565848000000001], [24.079905, -12.191297], [23.904153999999998, -11.722282], [24.017893999999998, -11.237297999999999], [23.912215, -10.926826], [24.257155000000001, -10.951993], [24.314516000000001, -11.262826], [24.783169999999998, -11.238694000000001], [25.418118, -11.330935999999999], [25.752310000000001, -11.784965], [26.553087999999999, -11.924440000000001], [27.16442, -11.608748], [27.388798999999999, -12.132747], [28.155108999999999, -12.272481000000001], [28.523561999999998, -12.698604], [28.934286, -13.248958], [29.699614, -13.257227], [29.616001000000001, -12.178895000000001], [29.341548, -12.360744], [28.642416999999998, -11.971569000000001], [28.372253000000001, -11.793647], [28.49607, -10.789884000000001], [28.673681999999999, -9.6059249999999992], [28.449871000000002, -9.1649180000000001], [28.734867000000001, -8.5265590000000007], [29.002911999999998, -8.4070319999999992], [30.346086, -8.2382570000000008], [30.740015, -8.3400069999999999], [31.157751000000001, -8.5945789999999995], [31.556348, -8.7620489999999993], [32.191865, -8.9303589999999993], [32.759374999999999, -9.2305989999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0417\u0430\u043c\u0431\u0438\u044f", "fr": "Zambie", "en": "Zambia", "nl": "Zambia", "pt": "Z\u00e2mbia", "no": "Zambia", "de": "Sambia", "it": "Zambia", "sv": "Zambia", "pl": "Zambia", "fi": "Sambia", "zh": "\u8d5e\u6bd4\u4e9a", "ja": "\u30b6\u30f3\u30d3\u30a2", "es": "Zambia"}, "label_fr": "Zambie", "name": "Zambia", "dbpedia_uri": "http://dbpedia.org/resource/Zambia"}, "id": "ZMB"}, {"geometry": {"type": "Polygon", "coordinates": [[[31.191409, -22.25151], [30.659865, -22.151567], [30.322883000000001, -22.271612000000001], [29.839037000000001, -22.102215999999999], [29.432188, -22.091313], [28.794656, -21.639454000000001], [28.021370000000001, -21.485975], [27.727228, -20.851801999999999], [27.724747000000001, -20.499058999999999], [27.296505, -20.39152], [26.164791000000001, -19.293085999999999], [25.850390999999998, -18.714413], [25.649163000000001, -18.536026], [25.264226000000001, -17.736540000000002], [26.381934999999999, -17.846042000000001], [26.706772999999998, -17.961228999999999], [27.044426999999999, -17.938026000000001], [27.598243, -17.290831000000001], [28.467905999999999, -16.468399999999999], [28.825869000000001, -16.389748999999998], [28.947462999999999, -16.043050999999998], [29.516833999999999, -15.644678000000001], [30.274256000000001, -15.507787], [30.338954999999999, -15.880839], [31.173064, -15.860944], [31.636498, -16.07199], [31.852041, -16.319417000000001], [32.328239000000004, -16.392074000000001], [32.847639000000001, -16.713398000000002], [32.849860999999997, -17.979057000000001], [32.654885999999998, -18.672090000000001], [32.611994000000003, -19.419383], [32.772708000000002, -19.715592000000001], [32.659742999999999, -20.304290000000002], [32.508693000000001, -20.395292000000001], [32.244987999999999, -21.116489000000001], [31.191409, -22.25151]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0417\u0438\u043c\u0431\u0430\u0431\u0432\u0435", "fr": "Zimbabwe", "en": "Zimbabwe", "nl": "Zimbabwe", "pt": "Zimbabwe", "no": "Zimbabwe", "de": "Simbabwe", "it": "Zimbabwe", "sv": "Zimbabwe", "pl": "Zimbabwe", "fi": "Zimbabwe", "zh": "\u8f9b\u5df4\u5a01", "ja": "\u30b8\u30f3\u30d0\u30d6\u30a8", "es": "Zimbabue"}, "label_fr": "Zimbabwe", "name": "Zimbabwe", "dbpedia_uri": "http://dbpedia.org/resource/Zimbabwe"}, "id": "ZWE"}]}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/lib/jquery-1.7.1.min.js	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,4 @@
+/*! jQuery v1.7.1 jquery.com | jquery.org/license */
+(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+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(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
+f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.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 contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.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|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={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,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
+{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/lib/jquery-ui-1.8.16.custom.min.js	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,356 @@
+/*!
+ * jQuery UI 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI
+ */
+(function(c,j){function k(a,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.16",
+keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({propAttr:c.fn.prop||c.fn.attr,_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=
+this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,
+"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":
+"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,
+outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a,
+"tabindex"),d=isNaN(b);return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&
+a.element[0].parentNode)for(var e=0;e<b.length;e++)a.options[b[e][0]]&&b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&
+c.ui.isOverAxis(b,e,i)}})}})(jQuery);
+;/*!
+ * jQuery UI Widget 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Widget
+ */
+(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)try{b(d).triggerHandler("remove")}catch(e){}k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(d){}});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=
+function(h){return!!b.data(h,a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):
+d;if(e&&d.charAt(0)==="_")return h;e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=
+b.extend(true,{},this.options,this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+
+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",
+c);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
+;/*!
+ * jQuery UI Mouse 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Mouse
+ *
+ * Depends:
+ *	jquery.ui.widget.js
+ */
+(function(b){var d=false;b(document).mouseup(function(){d=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(c){return a._mouseDown(c)}).bind("click."+this.widgetName,function(c){if(true===b.data(c.target,a.widgetName+".preventClickEvent")){b.removeData(c.target,a.widgetName+".preventClickEvent");c.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+
+this.widgetName)},_mouseDown:function(a){if(!d){this._mouseStarted&&this._mouseUp(a);this._mouseDownEvent=a;var c=this,f=a.which==1,g=typeof this.options.cancel=="string"&&a.target.nodeName?b(a.target).closest(this.options.cancel).length:false;if(!f||g||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){c.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=
+this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault();return true}}true===b.data(a.target,this.widgetName+".preventClickEvent")&&b.removeData(a.target,this.widgetName+".preventClickEvent");this._mouseMoveDelegate=function(e){return c._mouseMove(e)};this._mouseUpDelegate=function(e){return c._mouseUp(e)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);a.preventDefault();return d=true}},_mouseMove:function(a){if(b.browser.msie&&
+!(document.documentMode>=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=
+false;a.target==this._mouseDownEvent.target&&b.data(a.target,this.widgetName+".preventClickEvent",true);this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
+;/*
+ * jQuery UI Position 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Position
+ */
+(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY,
+left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+=
+k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-=
+m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left=
+d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+=
+a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b),
+g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery);
+;/*
+ * jQuery UI Draggable 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Draggables
+ *
+ * Depends:
+ *	jquery.ui.core.js
+ *	jquery.ui.mouse.js
+ *	jquery.ui.widget.js
+ */
+(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper==
+"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b=
+this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;if(b.iframeFix)d(b.iframeFix===true?"iframe":b.iframeFix).each(function(){d('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")});return true},_mouseStart:function(a){var b=this.options;
+this.helper=this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});
+this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions();d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);d.ui.ddmanager&&d.ui.ddmanager.dragStart(this,a);return true},
+_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b=
+false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&this.options.revert.call(this.element,b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,
+10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",a)!==false&&this._clear();return false},_mouseUp:function(a){this.options.iframeFix===true&&d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});d.ui.ddmanager&&d.ui.ddmanager.dragStop(this,a);return d.ui.mouse.prototype._mouseUp.call(this,a)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle||
+!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone().removeAttr("id"):this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&&
+a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=
+this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),
+10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),
+10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[a.containment=="document"?0:d(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,a.containment=="document"?0:d(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,
+(a.containment=="document"?0:d(window).scrollLeft())+d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a.containment=="document"?0:d(window).scrollTop())+(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&a.containment.constructor!=Array){a=d(a.containment);var b=a[0];if(b){a.offset();var c=d(b).css("overflow")!=
+"hidden";this.containment=[(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0),(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0),(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),
+10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom];this.relative_container=a}}else if(a.containment.constructor==Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+
+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&
+!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,h=a.pageY;if(this.originalPosition){var g;if(this.containment){if(this.relative_container){g=this.relative_container.offset();g=[this.containment[0]+g.left,this.containment[1]+g.top,this.containment[2]+g.left,this.containment[3]+g.top]}else g=this.containment;if(a.pageX-this.offset.click.left<g[0])e=g[0]+this.offset.click.left;
+if(a.pageY-this.offset.click.top<g[1])h=g[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>g[2])e=g[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>g[3])h=g[3]+this.offset.click.top}if(b.grid){h=b.grid[1]?this.originalPageY+Math.round((h-this.originalPageY)/b.grid[1])*b.grid[1]:this.originalPageY;h=g?!(h-this.offset.click.top<g[1]||h-this.offset.click.top>g[3])?h:!(h-this.offset.click.top<g[1])?h-b.grid[1]:h+b.grid[1]:h;e=b.grid[0]?this.originalPageX+Math.round((e-this.originalPageX)/
+b.grid[0])*b.grid[0]:this.originalPageX;e=g?!(e-this.offset.click.left<g[0]||e-this.offset.click.left>g[2])?e:!(e-this.offset.click.left<g[0])?e-b.grid[0]:e+b.grid[0]:e}}return{top:h-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop()),left:e-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&d.browser.version<
+526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(a,b,c){c=c||this._uiHash();d.ui.plugin.call(this,a,[b,c]);if(a=="drag")this.positionAbs=this._convertPositionTo("absolute");return d.Widget.prototype._trigger.call(this,a,b,
+c)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});d.extend(d.ui.draggable,{version:"1.8.16"});d.ui.plugin.add("draggable","connectToSortable",{start:function(a,b){var c=d(this).data("draggable"),f=c.options,e=d.extend({},b,{item:c.element});c.sortables=[];d(f.connectToSortable).each(function(){var h=d.data(this,"sortable");if(h&&!h.options.disabled){c.sortables.push({instance:h,shouldRevert:h.options.revert});
+h.refreshPositions();h._trigger("activate",a,e)}})},stop:function(a,b){var c=d(this).data("draggable"),f=d.extend({},b,{item:c.element});d.each(c.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;c.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(a);this.instance.options.helper=this.instance.options._helper;c.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval=
+false;this.instance._trigger("deactivate",a,f)}})},drag:function(a,b){var c=d(this).data("draggable"),f=this;d.each(c.sortables,function(){this.instance.positionAbs=c.positionAbs;this.instance.helperProportions=c.helperProportions;this.instance.offset.click=c.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=d(f).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",true);
+this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return b.helper[0]};a.target=this.instance.currentItem[0];this.instance._mouseCapture(a,true);this.instance._mouseStart(a,true,true);this.instance.offset.click.top=c.offset.click.top;this.instance.offset.click.left=c.offset.click.left;this.instance.offset.parent.left-=c.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=c.offset.parent.top-this.instance.offset.parent.top;
+c._trigger("toSortable",a);c.dropped=this.instance.element;c.currentItem=c.element;this.instance.fromOutside=c}this.instance.currentItem&&this.instance._mouseDrag(a)}else if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",a,this.instance._uiHash(this.instance));this.instance._mouseStop(a,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&&
+this.instance.placeholder.remove();c._trigger("fromSortable",a);c.dropped=false}})}});d.ui.plugin.add("draggable","cursor",{start:function(){var a=d("body"),b=d(this).data("draggable").options;if(a.css("cursor"))b._cursor=a.css("cursor");a.css("cursor",b.cursor)},stop:function(){var a=d(this).data("draggable").options;a._cursor&&d("body").css("cursor",a._cursor)}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("opacity"))b._opacity=
+a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");if(a.scrollParent[0]!=document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){if(!c.axis||c.axis!=
+"x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop+c.scrollSpeed;else if(a.pageY-b.overflowOffset.top<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop-c.scrollSpeed;if(!c.axis||c.axis!="y")if(b.overflowOffset.left+b.scrollParent[0].offsetWidth-a.pageX<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft+c.scrollSpeed;else if(a.pageX-b.overflowOffset.left<
+c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft-c.scrollSpeed}else{if(!c.axis||c.axis!="x")if(a.pageY-d(document).scrollTop()<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()-c.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()+c.scrollSpeed);if(!c.axis||c.axis!="y")if(a.pageX-d(document).scrollLeft()<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()-
+c.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()+c.scrollSpeed)}f!==false&&d.ui.ddmanager&&!c.dropBehaviour&&d.ui.ddmanager.prepareOffsets(b,a)}});d.ui.plugin.add("draggable","snap",{start:function(){var a=d(this).data("draggable"),b=a.options;a.snapElements=[];d(b.snap.constructor!=String?b.snap.items||":data(draggable)":b.snap).each(function(){var c=d(this),f=c.offset();this!=a.element[0]&&a.snapElements.push({item:this,
+width:c.outerWidth(),height:c.outerHeight(),top:f.top,left:f.left})})},drag:function(a,b){for(var c=d(this).data("draggable"),f=c.options,e=f.snapTolerance,h=b.offset.left,g=h+c.helperProportions.width,n=b.offset.top,o=n+c.helperProportions.height,i=c.snapElements.length-1;i>=0;i--){var j=c.snapElements[i].left,l=j+c.snapElements[i].width,k=c.snapElements[i].top,m=k+c.snapElements[i].height;if(j-e<h&&h<l+e&&k-e<n&&n<m+e||j-e<h&&h<l+e&&k-e<o&&o<m+e||j-e<g&&g<l+e&&k-e<n&&n<m+e||j-e<g&&g<l+e&&k-e<o&&
+o<m+e){if(f.snapMode!="inner"){var p=Math.abs(k-o)<=e,q=Math.abs(m-n)<=e,r=Math.abs(j-g)<=e,s=Math.abs(l-h)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k-c.helperProportions.height,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:m,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j-c.helperProportions.width}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l}).left-c.margins.left}var t=
+p||q||r||s;if(f.snapMode!="outer"){p=Math.abs(k-n)<=e;q=Math.abs(m-o)<=e;r=Math.abs(j-h)<=e;s=Math.abs(l-g)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:m-c.helperProportions.height,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l-c.helperProportions.width}).left-c.margins.left}if(!c.snapElements[i].snapping&&
+(p||q||r||s||t))c.options.snap.snap&&c.options.snap.snap.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=p||q||r||s||t}else{c.snapElements[i].snapping&&c.options.snap.release&&c.options.snap.release.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=false}}}});d.ui.plugin.add("draggable","stack",{start:function(){var a=d(this).data("draggable").options;a=d.makeArray(d(a.stack)).sort(function(c,f){return(parseInt(d(c).css("zIndex"),
+10)||0)-(parseInt(d(f).css("zIndex"),10)||0)});if(a.length){var b=parseInt(a[0].style.zIndex)||0;d(a).each(function(c){this.style.zIndex=b+c});this[0].style.zIndex=b+a.length}}});d.ui.plugin.add("draggable","zIndex",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("zIndex"))b._zIndex=a.css("zIndex");a.css("zIndex",b.zIndex)},stop:function(a,b){a=d(this).data("draggable").options;a._zIndex&&d(b.helper).css("zIndex",a._zIndex)}})})(jQuery);
+;/*
+ * jQuery UI Droppable 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Droppables
+ *
+ * Depends:
+ *	jquery.ui.core.js
+ *	jquery.ui.widget.js
+ *	jquery.ui.mouse.js
+ *	jquery.ui.draggable.js
+ */
+(function(d){d.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"},_create:function(){var a=this.options,b=a.accept;this.isover=0;this.isout=1;this.accept=d.isFunction(b)?b:function(c){return c.is(b)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};d.ui.ddmanager.droppables[a.scope]=d.ui.ddmanager.droppables[a.scope]||[];d.ui.ddmanager.droppables[a.scope].push(this);
+a.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var a=d.ui.ddmanager.droppables[this.options.scope],b=0;b<a.length;b++)a[b]==this&&a.splice(b,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(a,b){if(a=="accept")this.accept=d.isFunction(b)?b:function(c){return c.is(b)};d.Widget.prototype._setOption.apply(this,arguments)},_activate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&
+this.element.addClass(this.options.activeClass);b&&this._trigger("activate",a,this.ui(b))},_deactivate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);b&&this._trigger("deactivate",a,this.ui(b))},_over:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.addClass(this.options.hoverClass);
+this._trigger("over",a,this.ui(b))}},_out:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("out",a,this.ui(b))}},_drop:function(a,b){var c=b||d.ui.ddmanager.current;if(!c||(c.currentItem||c.element)[0]==this.element[0])return false;var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var g=
+d.data(this,"droppable");if(g.options.greedy&&!g.options.disabled&&g.options.scope==c.options.scope&&g.accept.call(g.element[0],c.currentItem||c.element)&&d.ui.intersect(c,d.extend(g,{offset:g.element.offset()}),g.options.tolerance)){e=true;return false}});if(e)return false;if(this.accept.call(this.element[0],c.currentItem||c.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass);this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("drop",
+a,this.ui(c));return this.element}return false},ui:function(a){return{draggable:a.currentItem||a.element,helper:a.helper,position:a.position,offset:a.positionAbs}}});d.extend(d.ui.droppable,{version:"1.8.16"});d.ui.intersect=function(a,b,c){if(!b.offset)return false;var e=(a.positionAbs||a.position.absolute).left,g=e+a.helperProportions.width,f=(a.positionAbs||a.position.absolute).top,h=f+a.helperProportions.height,i=b.offset.left,k=i+b.proportions.width,j=b.offset.top,l=j+b.proportions.height;
+switch(c){case "fit":return i<=e&&g<=k&&j<=f&&h<=l;case "intersect":return i<e+a.helperProportions.width/2&&g-a.helperProportions.width/2<k&&j<f+a.helperProportions.height/2&&h-a.helperProportions.height/2<l;case "pointer":return d.ui.isOver((a.positionAbs||a.position.absolute).top+(a.clickOffset||a.offset.click).top,(a.positionAbs||a.position.absolute).left+(a.clickOffset||a.offset.click).left,j,i,b.proportions.height,b.proportions.width);case "touch":return(f>=j&&f<=l||h>=j&&h<=l||f<j&&h>l)&&(e>=
+i&&e<=k||g>=i&&g<=k||e<i&&g>k);default:return false}};d.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,b){var c=d.ui.ddmanager.droppables[a.options.scope]||[],e=b?b.type:null,g=(a.currentItem||a.element).find(":data(droppable)").andSelf(),f=0;a:for(;f<c.length;f++)if(!(c[f].options.disabled||a&&!c[f].accept.call(c[f].element[0],a.currentItem||a.element))){for(var h=0;h<g.length;h++)if(g[h]==c[f].element[0]){c[f].proportions.height=0;continue a}c[f].visible=c[f].element.css("display")!=
+"none";if(c[f].visible){e=="mousedown"&&c[f]._activate.call(c[f],b);c[f].offset=c[f].element.offset();c[f].proportions={width:c[f].element[0].offsetWidth,height:c[f].element[0].offsetHeight}}}},drop:function(a,b){var c=false;d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(this.options){if(!this.options.disabled&&this.visible&&d.ui.intersect(a,this,this.options.tolerance))c=c||this._drop.call(this,b);if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],a.currentItem||
+a.element)){this.isout=1;this.isover=0;this._deactivate.call(this,b)}}});return c},dragStart:function(a,b){a.element.parents(":not(body,html)").bind("scroll.droppable",function(){a.options.refreshPositions||d.ui.ddmanager.prepareOffsets(a,b)})},drag:function(a,b){a.options.refreshPositions&&d.ui.ddmanager.prepareOffsets(a,b);d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var c=d.ui.intersect(a,this,this.options.tolerance);
+if(c=!c&&this.isover==1?"isout":c&&this.isover==0?"isover":null){var e;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");if(g.length){e=d.data(g[0],"droppable");e.greedyChild=c=="isover"?1:0}}if(e&&c=="isover"){e.isover=0;e.isout=1;e._out.call(e,b)}this[c]=1;this[c=="isout"?"isover":"isout"]=0;this[c=="isover"?"_over":"_out"].call(this,b);if(e&&c=="isout"){e.isout=0;e.isover=1;e._over.call(e,b)}}}})},dragStop:function(a,b){a.element.parents(":not(body,html)").unbind("scroll.droppable");
+a.options.refreshPositions||d.ui.ddmanager.prepareOffsets(a,b)}}})(jQuery);
+;/*
+ * jQuery UI Resizable 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Resizables
+ *
+ * Depends:
+ *	jquery.ui.core.js
+ *	jquery.ui.mouse.js
+ *	jquery.ui.widget.js
+ */
+(function(e){e.widget("ui.resizable",e.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var b=this,a=this.options;this.element.addClass("ui-resizable");e.extend(this,{_aspectRatio:!!a.aspectRatio,aspectRatio:a.aspectRatio,originalElement:this.element,
+_proportionallyResizeElements:[],_helper:a.helper||a.ghost||a.animate?a.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&e.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(e('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),
+top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=
+this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=a.handles||(!e(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",
+nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var d=0;d<c.length;d++){var f=e.trim(c[d]),g=e('<div class="ui-resizable-handle '+("ui-resizable-"+f)+'"></div>');/sw|se|ne|nw/.test(f)&&g.css({zIndex:++a.zIndex});"se"==f&&g.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[f]=".ui-resizable-"+f;this.element.append(g)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor==
+String)this.handles[i]=e(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=e(this.handles[i],this.element),l=0;l=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,l);this._proportionallyResize()}e(this.handles[i])}};this._renderAxis(this.element);this._handles=e(".ui-resizable-handle",this.element).disableSelection();
+this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();e(this.element).addClass("ui-resizable-autohide").hover(function(){if(!a.disabled){e(this).removeClass("ui-resizable-autohide");b._handles.show()}},function(){if(!a.disabled)if(!b.resizing){e(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();
+var b=function(c){e(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a=
+false;for(var c in this.handles)if(e(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:e(document).scrollTop(),left:e(document).scrollLeft()};if(d.is(".ui-draggable")||/absolute/.test(d.css("position")))d.css({position:"absolute",top:c.top,left:c.left});e.browser.opera&&/relative/.test(d.css("position"))&&d.css({position:"relative",top:"auto",left:"auto"});
+this._renderProxy();c=m(this.helper.css("left"));var f=m(this.helper.css("top"));if(a.containment){c+=e(a.containment).scrollLeft()||0;f+=e(a.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:c,top:f};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:c,top:f};this.sizeDiff=
+{width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio:this.originalSize.width/this.originalSize.height||1;a=e(".ui-resizable-"+this.axis).css("cursor");e("body").css("cursor",a=="auto"?this.axis+"-resize":a);d.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,d=this._change[this.axis];
+if(!d)return false;c=d.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);this._updateVirtualBoundaries(b.shiftKey);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize",b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false},
+_mouseStop:function(b){this.resizing=false;var a=this.options,c=this;if(this._helper){var d=this._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName);d=f&&e.ui.hasScroll(d[0],"left")?0:c.sizeDiff.height;f=f?0:c.sizeDiff.width;f={width:c.helper.width()-f,height:c.helper.height()-d};d=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var g=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(e.extend(f,
+{top:g,left:d}));c.helper.height(c.size.height);c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}e("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",b);this._helper&&this.helper.remove();return false},_updateVirtualBoundaries:function(b){var a=this.options,c,d,f;a={minWidth:k(a.minWidth)?a.minWidth:0,maxWidth:k(a.maxWidth)?a.maxWidth:Infinity,minHeight:k(a.minHeight)?a.minHeight:0,maxHeight:k(a.maxHeight)?a.maxHeight:
+Infinity};if(this._aspectRatio||b){b=a.minHeight*this.aspectRatio;d=a.minWidth/this.aspectRatio;c=a.maxHeight*this.aspectRatio;f=a.maxWidth/this.aspectRatio;if(b>a.minWidth)a.minWidth=b;if(d>a.minHeight)a.minHeight=d;if(c<a.maxWidth)a.maxWidth=c;if(f<a.maxHeight)a.maxHeight=f}this._vBoundaries=a},_updateCache:function(b){this.offset=this.helper.offset();if(k(b.left))this.position.left=b.left;if(k(b.top))this.position.top=b.top;if(k(b.height))this.size.height=b.height;if(k(b.width))this.size.width=
+b.width},_updateRatio:function(b){var a=this.position,c=this.size,d=this.axis;if(k(b.height))b.width=b.height*this.aspectRatio;else if(k(b.width))b.height=b.width/this.aspectRatio;if(d=="sw"){b.left=a.left+(c.width-b.width);b.top=null}if(d=="nw"){b.top=a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this._vBoundaries,c=this.axis,d=k(b.width)&&a.maxWidth&&a.maxWidth<b.width,f=k(b.height)&&a.maxHeight&&a.maxHeight<b.height,g=k(b.width)&&a.minWidth&&
+a.minWidth>b.width,h=k(b.height)&&a.minHeight&&a.minHeight>b.height;if(g)b.width=a.minWidth;if(h)b.height=a.minHeight;if(d)b.width=a.maxWidth;if(f)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+this.size.height,l=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(g&&l)b.left=i-a.minWidth;if(d&&l)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(f&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left=
+null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=this.helper||this.element,a=0;a<this._proportionallyResizeElements.length;a++){var c=this._proportionallyResizeElements[a];if(!this.borderDif){var d=[c.css("borderTopWidth"),c.css("borderRightWidth"),c.css("borderBottomWidth"),c.css("borderLeftWidth")],f=[c.css("paddingTop"),c.css("paddingRight"),c.css("paddingBottom"),c.css("paddingLeft")];this.borderDif=e.map(d,function(g,h){g=parseInt(g,10)||
+0;h=parseInt(f[h],10)||0;return g+h})}e.browser.msie&&(e(b).is(":hidden")||e(b).parents(":hidden").length)||c.css({height:b.height()-this.borderDif[0]-this.borderDif[2]||0,width:b.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var b=this.options;this.elementOffset=this.element.offset();if(this._helper){this.helper=this.helper||e('<div style="overflow:hidden;"></div>');var a=e.browser.msie&&e.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+
+a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,a){return{width:this.originalSize.width+a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+
+c}},se:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a,c]))},ne:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){e.ui.plugin.call(this,b,[a,this.ui()]);
+b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});e.extend(e.ui.resizable,{version:"1.8.16"});e.ui.plugin.add("resizable","alsoResize",{start:function(){var b=e(this).data("resizable").options,a=function(c){e(c).each(function(){var d=e(this);d.data("resizable-alsoresize",{width:parseInt(d.width(),
+10),height:parseInt(d.height(),10),left:parseInt(d.css("left"),10),top:parseInt(d.css("top"),10),position:d.css("position")})})};if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize=b.alsoResize[0];a(b.alsoResize)}else e.each(b.alsoResize,function(c){a(c)});else a(b.alsoResize)},resize:function(b,a){var c=e(this).data("resizable");b=c.options;var d=c.originalSize,f=c.originalPosition,g={height:c.size.height-d.height||0,width:c.size.width-d.width||0,top:c.position.top-
+f.top||0,left:c.position.left-f.left||0},h=function(i,j){e(i).each(function(){var l=e(this),q=e(this).data("resizable-alsoresize"),p={},r=j&&j.length?j:l.parents(a.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(r,function(n,o){if((n=(q[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(e.browser.opera&&/relative/.test(l.css("position"))){c._revertToRelativePosition=true;l.css({position:"absolute",top:"auto",left:"auto"})}l.css(p)})};typeof b.alsoResize=="object"&&!b.alsoResize.nodeType?
+e.each(b.alsoResize,function(i,j){h(i,j)}):h(b.alsoResize)},stop:function(){var b=e(this).data("resizable"),a=b.options,c=function(d){e(d).each(function(){var f=e(this);f.css({position:f.data("resizable-alsoresize").position})})};if(b._revertToRelativePosition){b._revertToRelativePosition=false;typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?e.each(a.alsoResize,function(d){c(d)}):c(a.alsoResize)}e(this).removeData("resizable-alsoresize")}});e.ui.plugin.add("resizable","animate",{stop:function(b){var a=
+e(this).data("resizable"),c=a.options,d=a._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName),g=f&&e.ui.hasScroll(d[0],"left")?0:a.sizeDiff.height;f={width:a.size.width-(f?0:a.sizeDiff.width),height:a.size.height-g};g=parseInt(a.element.css("left"),10)+(a.position.left-a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(e.extend(f,h&&g?{top:h,left:g}:{}),{duration:c.animateDuration,easing:c.animateEasing,
+step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};d&&d.length&&e(d[0]).css({width:i.width,height:i.height});a._updateCache(i);a._propagate("resize",b)}})}});e.ui.plugin.add("resizable","containment",{start:function(){var b=e(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof e?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement=
+e(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,top:0};b.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}}else{var d=e(a),f=[];e(["Top","Right","Left","Bottom"]).each(function(i,j){f[i]=m(d.css("padding"+j))});b.containerOffset=d.offset();b.containerPosition=d.position();b.containerSize={height:d.innerHeight()-f[3],width:d.innerWidth()-f[1]};c=b.containerOffset;
+var g=b.containerSize.height,h=b.containerSize.width;h=e.ui.hasScroll(a,"left")?a.scrollWidth:h;g=e.ui.hasScroll(a)?a.scrollHeight:g;b.parentData={element:a,left:c.left,top:c.top,width:h,height:g}}}},resize:function(b){var a=e(this).data("resizable"),c=a.options,d=a.containerOffset,f=a.position;b=a._aspectRatio||b.shiftKey;var g={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))g=d;if(f.left<(a._helper?d.left:0)){a.size.width+=a._helper?a.position.left-d.left:
+a.position.left-g.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?d.left:0}if(f.top<(a._helper?d.top:0)){a.size.height+=a._helper?a.position.top-d.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper?d.top:0}a.offset.left=a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-g.left:a.offset.left-g.left)+a.sizeDiff.width);d=Math.abs((a._helper?a.offset.top-g.top:a.offset.top-
+d.top)+a.sizeDiff.height);f=a.containerElement.get(0)==a.element.parent().get(0);g=/relative|absolute/.test(a.containerElement.css("position"));if(f&&g)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height=a.size.width/a.aspectRatio}if(d+a.size.height>=a.parentData.height){a.size.height=a.parentData.height-d;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=e(this).data("resizable"),a=b.options,c=b.containerOffset,d=b.containerPosition,
+f=b.containerElement,g=e(b.helper),h=g.offset(),i=g.outerWidth()-b.sizeDiff.width;g=g.outerHeight()-b.sizeDiff.height;b._helper&&!a.animate&&/relative/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g});b._helper&&!a.animate&&/static/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g})}});e.ui.plugin.add("resizable","ghost",{start:function(){var b=e(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25,
+display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost=="string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=e(this).data("resizable");b.ghost&&b.ghost.css({position:"relative",height:b.size.height,width:b.size.width})},stop:function(){var b=e(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});e.ui.plugin.add("resizable","grid",{resize:function(){var b=
+e(this).data("resizable"),a=b.options,c=b.size,d=b.originalSize,f=b.originalPosition,g=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;var h=Math.round((c.width-d.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-d.height)/(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else if(/^(ne)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}else{if(/^(sw)$/.test(g)){b.size.width=d.width+h;b.size.height=
+d.height+a}else{b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}b.position.left=f.left-h}}});var m=function(b){return parseInt(b,10)||0},k=function(b){return!isNaN(parseInt(b,10))}})(jQuery);
+;/*
+ * jQuery UI Selectable 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Selectables
+ *
+ * Depends:
+ *	jquery.ui.core.js
+ *	jquery.ui.mouse.js
+ *	jquery.ui.widget.js
+ */
+(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(c.options.filter,c.element[0]);f.each(function(){var d=e(this),b=d.offset();e.data(this,"selectable-item",{element:this,$element:d,left:b.left,top:b.top,right:b.left+d.outerWidth(),bottom:b.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"),
+selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX,
+c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting");b.unselecting=true;f._trigger("unselecting",
+c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f=this;this.dragged=true;if(!this.options.disabled){var d=
+this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.right<b||a.top>i||a.bottom<g);else if(d.tolerance=="fit")k=a.left>b&&a.right<h&&a.top>g&&a.bottom<i;if(k){if(a.selected){a.$element.removeClass("ui-selected");a.selected=false}if(a.unselecting){a.$element.removeClass("ui-unselecting");
+a.unselecting=false}if(!a.selecting){a.$element.addClass("ui-selecting");a.selecting=true;f._trigger("selecting",c,{selecting:a.element})}}else{if(a.selecting)if(c.metaKey&&a.startselected){a.$element.removeClass("ui-selecting");a.selecting=false;a.$element.addClass("ui-selected");a.selected=true}else{a.$element.removeClass("ui-selecting");a.selecting=false;if(a.startselected){a.$element.addClass("ui-unselecting");a.unselecting=true}f._trigger("unselecting",c,{unselecting:a.element})}if(a.selected)if(!c.metaKey&&
+!a.startselected){a.$element.removeClass("ui-selected");a.selected=false;a.$element.addClass("ui-unselecting");a.unselecting=true;f._trigger("unselecting",c,{unselecting:a.element})}}}});return false}},_mouseStop:function(c){var f=this;this.dragged=false;e(".ui-unselecting",this.element[0]).each(function(){var d=e.data(this,"selectable-item");d.$element.removeClass("ui-unselecting");d.unselecting=false;d.startselected=false;f._trigger("unselected",c,{unselected:d.element})});e(".ui-selecting",this.element[0]).each(function(){var d=
+e.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected");d.selecting=false;d.selected=true;d.startselected=true;f._trigger("selected",c,{selected:d.element})});this._trigger("stop",c);this.helper.remove();return false}});e.extend(e.ui.selectable,{version:"1.8.16"})})(jQuery);
+;/*
+ * jQuery UI Sortable 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Sortables
+ *
+ * Depends:
+ *	jquery.ui.core.js
+ *	jquery.ui.mouse.js
+ *	jquery.ui.widget.js
+ */
+(function(d){d.widget("ui.sortable",d.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){var a=this.options;this.containerCache={};this.element.addClass("ui-sortable");
+this.refresh();this.floating=this.items.length?a.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData("sortable-item");return this},_setOption:function(a,b){if(a===
+"disabled"){this.options[a]=b;this.widget()[b?"addClass":"removeClass"]("ui-sortable-disabled")}else d.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(a,b){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(a);var c=null,e=this;d(a.target).parents().each(function(){if(d.data(this,"sortable-item")==e){c=d(this);return false}});if(d.data(a.target,"sortable-item")==e)c=d(a.target);if(!c)return false;if(this.options.handle&&
+!b){var f=false;d(this.options.handle,c).find("*").andSelf().each(function(){if(this==a.target)f=true});if(!f)return false}this.currentItem=c;this._removeCurrentsFromItems();return true},_mouseStart:function(a,b,c){b=this.options;var e=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,
+left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};
+this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();b.containment&&this._setContainment();if(b.cursor){if(d("body").css("cursor"))this._storedCursor=d("body").css("cursor");d("body").css("cursor",b.cursor)}if(b.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",b.opacity)}if(b.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",b.zIndex)}if(this.scrollParent[0]!=
+document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",a,e._uiHash(this));if(d.ui.ddmanager)d.ui.ddmanager.current=this;d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a);
+return true},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var b=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageY<b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop+b.scrollSpeed;else if(a.pageY-this.overflowOffset.top<
+b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop-b.scrollSpeed;if(this.overflowOffset.left+this.scrollParent[0].offsetWidth-a.pageX<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft+b.scrollSpeed;else if(a.pageX-this.overflowOffset.left<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft-b.scrollSpeed}else{if(a.pageY-d(document).scrollTop()<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()-
+b.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()+b.scrollSpeed);if(a.pageX-d(document).scrollLeft()<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()-b.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()+b.scrollSpeed)}c!==false&&d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,
+a)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(b=this.items.length-1;b>=0;b--){c=this.items[b];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!d.ui.contains(this.placeholder[0],e)&&(this.options.type=="semi-dynamic"?!d.ui.contains(this.element[0],
+e):true)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(a,c);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(a,b){if(a){d.ui.ddmanager&&!this.options.dropBehaviour&&d.ui.ddmanager.drop(this,a);if(this.options.revert){var c=this;b=c.placeholder.offset();
+c.reverting=true;d(this.helper).animate({left:b.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:b.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(a)})}else this._clear(a,b);return false}},cancel:function(){var a=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):
+this.currentItem.show();for(var b=this.containers.length-1;b>=0;b--){this.containers[b]._trigger("deactivate",null,a._uiHash(this));if(this.containers[b].containerCache.over){this.containers[b]._trigger("out",null,a._uiHash(this));this.containers[b].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();d.extend(this,{helper:null,
+dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?d(this.domPosition.prev).after(this.currentItem):d(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};d(b).each(function(){var e=(d(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);if(e)c.push((a.key||e[1]+"[]")+"="+(a.key&&a.expression?e[1]:e[2]))});!c.length&&a.key&&c.push(a.key+"=");return c.join("&")},
+toArray:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};b.each(function(){c.push(d(a.item||this).attr(a.attribute||"id")||"")});return c},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,g=a.left,h=g+a.width,i=a.top,k=i+a.height,j=this.offset.click.top,l=this.offset.click.left;j=e+j>i&&e+j<k&&b+l>g&&b+l<h;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||
+this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>a[this.floating?"width":"height"]?j:g<b+this.helperProportions.width/2&&c-this.helperProportions.width/2<h&&i<e+this.helperProportions.height/2&&f-this.helperProportions.height/2<k},_intersectsWithPointer:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left,a.width);b=b&&a;a=this._getDragVerticalDirection();
+var c=this._getDragHorizontalDirection();if(!b)return false;return this.floating?c&&c=="right"||a=="down"?2:1:a&&(a=="down"?2:1)},_intersectsWithSides:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top+a.height/2,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left+a.width/2,a.width);var c=this._getDragVerticalDirection(),e=this._getDragHorizontalDirection();return this.floating&&e?e=="right"&&a||e=="left"&&!a:c&&(c=="down"&&b||c=="up"&&!b)},
+_getDragVerticalDirection:function(){var a=this.positionAbs.top-this.lastPositionAbs.top;return a!=0&&(a>0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a);this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(a){var b=[],c=[],e=this._connectWith();
+if(e&&a)for(a=e.length-1;a>=0;a--)for(var f=d(e[a]),g=f.length-1;g>=0;g--){var h=d.data(f[g],"sortable");if(h&&h!=this&&!h.options.disabled)c.push([d.isFunction(h.options.items)?h.options.items.call(h.element):d(h.options.items,h.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),h])}c.push([d.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):d(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),
+this]);for(a=c.length-1;a>=0;a--)c[a][0].each(function(){b.push(this)});return d(b)},_removeCurrentsFromItems:function(){for(var a=this.currentItem.find(":data(sortable-item)"),b=0;b<this.items.length;b++)for(var c=0;c<a.length;c++)a[c]==this.items[b].item[0]&&this.items.splice(b,1)},_refreshItems:function(a){this.items=[];this.containers=[this];var b=this.items,c=[[d.isFunction(this.options.items)?this.options.items.call(this.element[0],a,{item:this.currentItem}):d(this.options.items,this.element),
+this]],e=this._connectWith();if(e)for(var f=e.length-1;f>=0;f--)for(var g=d(e[f]),h=g.length-1;h>=0;h--){var i=d.data(g[h],"sortable");if(i&&i!=this&&!i.options.disabled){c.push([d.isFunction(i.options.items)?i.options.items.call(i.element[0],a,{item:this.currentItem}):d(i.options.items,i.element),i]);this.containers.push(i)}}for(f=c.length-1;f>=0;f--){a=c[f][1];e=c[f][0];h=0;for(g=e.length;h<g;h++){i=d(e[h]);i.data("sortable-item",a);b.push({item:i,instance:a,width:0,height:0,left:0,top:0})}}},refreshPositions:function(a){if(this.offsetParent&&
+this.helper)this.offset.parent=this._getParentOffset();for(var b=this.items.length-1;b>=0;b--){var c=this.items[b];if(!(c.instance!=this.currentContainer&&this.currentContainer&&c.item[0]!=this.currentItem[0])){var e=this.options.toleranceElement?d(this.options.toleranceElement,c.item):c.item;if(!a){c.width=e.outerWidth();c.height=e.outerHeight()}e=e.offset();c.left=e.left;c.top=e.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(b=
+this.containers.length-1;b>=0;b--){e=this.containers[b].element.offset();this.containers[b].containerCache.left=e.left;this.containers[b].containerCache.top=e.top;this.containers[b].containerCache.width=this.containers[b].element.outerWidth();this.containers[b].containerCache.height=this.containers[b].element.outerHeight()}return this},_createPlaceholder:function(a){var b=a||this,c=b.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f=
+d(document.createElement(b.currentItem[0].nodeName)).addClass(e||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!e)f.style.visibility="hidden";return f},update:function(f,g){if(!(e&&!c.forcePlaceholderSize)){g.height()||g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10));g.width()||g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||
+0,10))}}}}b.placeholder=d(c.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);c.placeholder.update(b,b.placeholder)},_contactContainers:function(a){for(var b=null,c=null,e=this.containers.length-1;e>=0;e--)if(!d.ui.contains(this.currentItem[0],this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(b&&d.ui.contains(this.containers[e].element[0],b.element[0]))){b=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out",
+a,this._uiHash(this));this.containers[e].containerCache.over=0}if(b)if(this.containers.length===1){this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){b=1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],g=this.items.length-1;g>=0;g--)if(d.ui.contains(this.containers[c].element[0],this.items[g].item[0])){var h=this.items[g][this.containers[c].floating?"left":"top"];if(Math.abs(h-
+f)<b){b=Math.abs(h-f);e=this.items[g]}}if(e||this.options.dropOnEmpty){this.currentContainer=this.containers[c];e?this._rearrange(a,e,null,true):this._rearrange(a,null,this.containers[c].element,true);this._trigger("change",a,this._uiHash());this.containers[c]._trigger("change",a,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder);this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}}},_createHelper:function(a){var b=
+this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a,this.currentItem])):b.helper=="clone"?this.currentItem.clone():this.currentItem;a.parents("body").length||d(b.appendTo!="parent"?b.appendTo:this.currentItem[0].parentNode)[0].appendChild(a[0]);if(a[0]==this.currentItem[0])this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")};if(a[0].style.width==
+""||b.forceHelperSize)a.width(this.currentItem.width());if(a[0].style.height==""||b.forceHelperSize)a.height(this.currentItem.height());return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=
+this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a=
+{top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.currentItem.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),
+10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,d(a.containment=="document"?
+document:window).width()-this.helperProportions.width-this.margins.left,(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)){var b=d(a.containment)[0];a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"),
+10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(a,b){if(!b)b=
+this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&
+this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0]))this.offset.relative=this._getRelativeOffset();
+var f=a.pageX,g=a.pageY;if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.left<this.containment[0])f=this.containment[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<this.containment[1])g=this.containment[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>this.containment[2])f=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-
+this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:!(g-this.offset.click.top<this.containment[1])?g-b.grid[1]:g+b.grid[1]:g;f=this.originalPageX+Math.round((f-this.originalPageX)/b.grid[0])*b.grid[0];f=this.containment?!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:!(f-this.offset.click.left<this.containment[0])?f-b.grid[0]:f+b.grid[0]:f}}return{top:g-
+this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())}},_rearrange:function(a,b,c,e){c?c[0].appendChild(this.placeholder[0]):b.item[0].parentNode.insertBefore(this.placeholder[0],
+this.direction=="down"?b.item[0]:b.item[0].nextSibling);this.counter=this.counter?++this.counter:1;var f=this,g=this.counter;window.setTimeout(function(){g==f.counter&&f.refreshPositions(!e)},0)},_clear:function(a,b){this.reverting=false;var c=[];!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem);this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var e in this._storedCSS)if(this._storedCSS[e]=="auto"||this._storedCSS[e]=="static")this._storedCSS[e]=
+"";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!b&&c.push(function(f){this._trigger("receive",f,this._uiHash(this.fromOutside))});if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!b)c.push(function(f){this._trigger("update",f,this._uiHash())});if(!d.ui.contains(this.element[0],this.currentItem[0])){b||c.push(function(f){this._trigger("remove",
+f,this._uiHash())});for(e=this.containers.length-1;e>=0;e--)if(d.ui.contains(this.containers[e].element[0],this.currentItem[0])&&!b){c.push(function(f){return function(g){f._trigger("receive",g,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(g){f._trigger("update",g,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){b||c.push(function(f){return function(g){f._trigger("deactivate",g,this._uiHash(this))}}.call(this,
+this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out",g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop",
+a,this._uiHash());for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}return false}b||this._trigger("beforeStop",a,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!b){for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){d.Widget.prototype._trigger.apply(this,arguments)===false&&this.cancel()},
+_uiHash:function(a){var b=a||this;return{helper:b.helper,placeholder:b.placeholder||d([]),position:b.position,originalPosition:b.originalPosition,offset:b.positionAbs,item:b.currentItem,sender:a?a.element:null}}});d.extend(d.ui.sortable,{version:"1.8.16"})})(jQuery);
+;/*
+ * jQuery UI Autocomplete 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Autocomplete
+ *
+ * Depends:
+ *	jquery.ui.core.js
+ *	jquery.ui.widget.js
+ *	jquery.ui.position.js
+ */
+(function(d){var e=0;d.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var a=this,b=this.element[0].ownerDocument,g;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!(a.options.disabled||a.element.propAttr("readOnly"))){g=
+false;var f=d.ui.keyCode;switch(c.keyCode){case f.PAGE_UP:a._move("previousPage",c);break;case f.PAGE_DOWN:a._move("nextPage",c);break;case f.UP:a._move("previous",c);c.preventDefault();break;case f.DOWN:a._move("next",c);c.preventDefault();break;case f.ENTER:case f.NUMPAD_ENTER:if(a.menu.active){g=true;c.preventDefault()}case f.TAB:if(!a.menu.active)return;a.menu.select(c);break;case f.ESCAPE:a.element.val(a.term);a.close(c);break;default:clearTimeout(a.searching);a.searching=setTimeout(function(){if(a.term!=
+a.element.val()){a.selectedItem=null;a.search(null,c)}},a.options.delay);break}}}).bind("keypress.autocomplete",function(c){if(g){g=false;c.preventDefault()}}).bind("focus.autocomplete",function(){if(!a.options.disabled){a.selectedItem=null;a.previous=a.element.val()}}).bind("blur.autocomplete",function(c){if(!a.options.disabled){clearTimeout(a.searching);a.closing=setTimeout(function(){a.close(c);a._change(c)},150)}});this._initSource();this.response=function(){return a._response.apply(a,arguments)};
+this.menu=d("<ul></ul>").addClass("ui-autocomplete").appendTo(d(this.options.appendTo||"body",b)[0]).mousedown(function(c){var f=a.menu.element[0];d(c.target).closest(".ui-menu-item").length||setTimeout(function(){d(document).one("mousedown",function(h){h.target!==a.element[0]&&h.target!==f&&!d.ui.contains(f,h.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,f){f=f.item.data("item.autocomplete");false!==a._trigger("focus",c,{item:f})&&/^key/.test(c.originalEvent.type)&&
+a.element.val(f.value)},selected:function(c,f){var h=f.item.data("item.autocomplete"),i=a.previous;if(a.element[0]!==b.activeElement){a.element.focus();a.previous=i;setTimeout(function(){a.previous=i;a.selectedItem=h},1)}false!==a._trigger("select",c,{item:h})&&a.element.val(h.value);a.term=a.element.val();a.close(c);a.selectedItem=h},blur:function(){a.menu.element.is(":visible")&&a.element.val()!==a.term&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");
+d.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();d.Widget.prototype.destroy.call(this)},_setOption:function(a,b){d.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource();if(a==="appendTo")this.menu.element.appendTo(d(b||"body",this.element[0].ownerDocument)[0]);a==="disabled"&&
+b&&this.xhr&&this.xhr.abort()},_initSource:function(){var a=this,b,g;if(d.isArray(this.options.source)){b=this.options.source;this.source=function(c,f){f(d.ui.autocomplete.filter(b,c.term))}}else if(typeof this.options.source==="string"){g=this.options.source;this.source=function(c,f){a.xhr&&a.xhr.abort();a.xhr=d.ajax({url:g,data:c,dataType:"json",autocompleteRequest:++e,success:function(h){this.autocompleteRequest===e&&f(h)},error:function(){this.autocompleteRequest===e&&f([])}})}}else this.source=
+this.options.source},search:function(a,b){a=a!=null?a:this.element.val();this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search",b)!==false)return this._search(a)},_search:function(a){this.pending++;this.element.addClass("ui-autocomplete-loading");this.source({term:a},this.response)},_response:function(a){if(!this.options.disabled&&a&&a.length){a=this._normalize(a);this._suggest(a);this._trigger("open")}else this.close();
+this.pending--;this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(a){clearTimeout(this.closing);if(this.menu.element.is(":visible")){this.menu.element.hide();this.menu.deactivate();this._trigger("close",a)}},_change:function(a){this.previous!==this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(a){if(a.length&&a[0].label&&a[0].value)return a;return d.map(a,function(b){if(typeof b==="string")return{label:b,value:b};return d.extend({label:b.label||
+b.value,value:b.value||b.label},b)})},_suggest:function(a){var b=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(b,a);this.menu.deactivate();this.menu.refresh();b.show();this._resizeMenu();b.position(d.extend({of:this.element},this.options.position));this.options.autoFocus&&this.menu.next(new d.Event("mouseover"))},_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(a,b){var g=this;
+d.each(b,function(c,f){g._renderItem(a,f)})},_renderItem:function(a,b){return d("<li></li>").data("item.autocomplete",b).append(d("<a></a>").text(b.label)).appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);else this.search(null,b)},widget:function(){return this.menu.element}});d.extend(d.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,
+"\\$&")},filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i");return d.grep(a,function(c){return g.test(c.label||c.value||c)})}})})(jQuery);
+(function(d){d.widget("ui.menu",{_create:function(){var e=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(a){if(d(a.target).closest(".ui-menu-item a").length){a.preventDefault();e.select(a)}});this.refresh()},refresh:function(){var e=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex",
+-1).mouseenter(function(a){e.activate(a,d(this).parent())}).mouseleave(function(){e.deactivate()})},activate:function(e,a){this.deactivate();if(this.hasScroll()){var b=a.offset().top-this.element.offset().top,g=this.element.scrollTop(),c=this.element.height();if(b<0)this.element.scrollTop(g+b);else b>=c&&this.element.scrollTop(g+b-c+a.height())}this.active=a.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",e,{item:a})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id");
+this._trigger("blur");this.active=null}},next:function(e){this.move("next",".ui-menu-item:first",e)},previous:function(e){this.move("prev",".ui-menu-item:last",e)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(e,a,b){if(this.active){e=this.active[e+"All"](".ui-menu-item").eq(0);e.length?this.activate(b,e):this.activate(b,this.element.children(a))}else this.activate(b,
+this.element.children(a))},nextPage:function(e){if(this.hasScroll())if(!this.active||this.last())this.activate(e,this.element.children(".ui-menu-item:first"));else{var a=this.active.offset().top,b=this.element.height(),g=this.element.children(".ui-menu-item").filter(function(){var c=d(this).offset().top-a-b+d(this).height();return c<10&&c>-10});g.length||(g=this.element.children(".ui-menu-item:last"));this.activate(e,g)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||
+this.last()?":first":":last"))},previousPage:function(e){if(this.hasScroll())if(!this.active||this.first())this.activate(e,this.element.children(".ui-menu-item:last"));else{var a=this.active.offset().top,b=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var g=d(this).offset().top-a+b-d(this).height();return g<10&&g>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(e,result)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||
+this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[d.fn.prop?"prop":"attr"]("scrollHeight")},select:function(e){this._trigger("selected",e,{item:this.active})}})})(jQuery);
+;/*
+ * jQuery UI Slider 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Slider
+ *
+ * Depends:
+ *	jquery.ui.core.js
+ *	jquery.ui.mouse.js
+ *	jquery.ui.widget.js
+ */
+(function(d){d.widget("ui.slider",d.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var a=this,b=this.options,c=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f=b.values&&b.values.length||1,e=[];this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+
+this.orientation+" ui-widget ui-widget-content ui-corner-all"+(b.disabled?" ui-slider-disabled ui-disabled":""));this.range=d([]);if(b.range){if(b.range===true){if(!b.values)b.values=[this._valueMin(),this._valueMin()];if(b.values.length&&b.values.length!==2)b.values=[b.values[0],b.values[0]]}this.range=d("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(b.range==="min"||b.range==="max"?" ui-slider-range-"+b.range:""))}for(var j=c.length;j<f;j+=1)e.push("<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>");
+this.handles=c.add(d(e.join("")).appendTo(a.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(g){g.preventDefault()}).hover(function(){b.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(b.disabled)d(this).blur();else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(g){d(this).data("index.ui-slider-handle",
+g)});this.handles.keydown(function(g){var k=true,l=d(this).data("index.ui-slider-handle"),i,h,m;if(!a.options.disabled){switch(g.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:k=false;if(!a._keySliding){a._keySliding=true;d(this).addClass("ui-state-active");i=a._start(g,l);if(i===false)return}break}m=a.options.step;i=a.options.values&&a.options.values.length?
+(h=a.values(l)):(h=a.value());switch(g.keyCode){case d.ui.keyCode.HOME:h=a._valueMin();break;case d.ui.keyCode.END:h=a._valueMax();break;case d.ui.keyCode.PAGE_UP:h=a._trimAlignValue(i+(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.PAGE_DOWN:h=a._trimAlignValue(i-(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(i===a._valueMax())return;h=a._trimAlignValue(i+m);break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(i===a._valueMin())return;h=a._trimAlignValue(i-
+m);break}a._slide(g,l,h);return k}}).keyup(function(g){var k=d(this).data("index.ui-slider-handle");if(a._keySliding){a._keySliding=false;a._stop(g,k);a._change(g,k);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy();
+return this},_mouseCapture:function(a){var b=this.options,c,f,e,j,g;if(b.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:a.pageX,y:a.pageY});f=this._valueMax()-this._valueMin()+1;j=this;this.handles.each(function(k){var l=Math.abs(c-j.values(k));if(f>l){f=l;e=d(this);g=k}});if(b.range===true&&this.values(1)===b.min){g+=1;e=d(this.handles[g])}if(this._start(a,g)===false)return false;
+this._mouseSliding=true;j._handleIndex=g;e.addClass("ui-state-active").focus();b=e.offset();this._clickOffset=!d(a.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:a.pageX-b.left-e.width()/2,top:a.pageY-b.top-e.height()/2-(parseInt(e.css("borderTopWidth"),10)||0)-(parseInt(e.css("borderBottomWidth"),10)||0)+(parseInt(e.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(a,g,c);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(a){var b=
+this._normValueFromMouse({x:a.pageX,y:a.pageY});this._slide(a,this._handleIndex,b);return false},_mouseStop:function(a){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(a,this._handleIndex);this._change(a,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b;if(this.orientation==="horizontal"){b=
+this.elementSize.width;a=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{b=this.elementSize.height;a=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}b=a/b;if(b>1)b=1;if(b<0)b=0;if(this.orientation==="vertical")b=1-b;a=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+b*a)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);
+c.values=this.values()}return this._trigger("start",a,c)},_slide:function(a,b,c){var f;if(this.options.values&&this.options.values.length){f=this.values(b?0:1);if(this.options.values.length===2&&this.options.range===true&&(b===0&&c>f||b===1&&c<f))c=f;if(c!==this.values(b)){f=this.values();f[b]=c;a=this._trigger("slide",a,{handle:this.handles[b],value:c,values:f});this.values(b?0:1);a!==false&&this.values(b,c,true)}}else if(c!==this.value()){a=this._trigger("slide",a,{handle:this.handles[b],value:c});
+a!==false&&this.value(c)}},_stop:function(a,b){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);c.values=this.values()}this._trigger("stop",a,c)},_change:function(a,b){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);c.values=this.values()}this._trigger("change",a,c)}},value:function(a){if(arguments.length){this.options.value=
+this._trimAlignValue(a);this._refreshValue();this._change(null,0)}else return this._value()},values:function(a,b){var c,f,e;if(arguments.length>1){this.options.values[a]=this._trimAlignValue(b);this._refreshValue();this._change(null,a)}else if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;f=arguments[0];for(e=0;e<c.length;e+=1){c[e]=this._trimAlignValue(f[e]);this._change(null,e)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(a):
+this.value();else return this._values()},_setOption:function(a,b){var c,f=0;if(d.isArray(this.options.values))f=this.options.values.length;d.Widget.prototype._setOption.apply(this,arguments);switch(a){case "disabled":if(b){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.propAttr("disabled",true);this.element.addClass("ui-disabled")}else{this.handles.propAttr("disabled",false);this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation();
+this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(c=0;c<f;c+=1)this._change(null,c);this._animateOff=false;break}},_value:function(){var a=this.options.value;return a=this._trimAlignValue(a)},_values:function(a){var b,c;if(arguments.length){b=this.options.values[a];
+return b=this._trimAlignValue(b)}else{b=this.options.values.slice();for(c=0;c<b.length;c+=1)b[c]=this._trimAlignValue(b[c]);return b}},_trimAlignValue:function(a){if(a<=this._valueMin())return this._valueMin();if(a>=this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=(a-this._valueMin())%b;a=a-c;if(Math.abs(c)*2>=b)a+=c>0?b:-b;return parseFloat(a.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var a=
+this.options.range,b=this.options,c=this,f=!this._animateOff?b.animate:false,e,j={},g,k,l,i;if(this.options.values&&this.options.values.length)this.handles.each(function(h){e=(c.values(h)-c._valueMin())/(c._valueMax()-c._valueMin())*100;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";d(this).stop(1,1)[f?"animate":"css"](j,b.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(h===0)c.range.stop(1,1)[f?"animate":"css"]({left:e+"%"},b.animate);if(h===1)c.range[f?"animate":"css"]({width:e-
+g+"%"},{queue:false,duration:b.animate})}else{if(h===0)c.range.stop(1,1)[f?"animate":"css"]({bottom:e+"%"},b.animate);if(h===1)c.range[f?"animate":"css"]({height:e-g+"%"},{queue:false,duration:b.animate})}g=e});else{k=this.value();l=this._valueMin();i=this._valueMax();e=i!==l?(k-l)/(i-l)*100:0;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";this.handle.stop(1,1)[f?"animate":"css"](j,b.animate);if(a==="min"&&this.orientation==="horizontal")this.range.stop(1,1)[f?"animate":"css"]({width:e+"%"},
+b.animate);if(a==="max"&&this.orientation==="horizontal")this.range[f?"animate":"css"]({width:100-e+"%"},{queue:false,duration:b.animate});if(a==="min"&&this.orientation==="vertical")this.range.stop(1,1)[f?"animate":"css"]({height:e+"%"},b.animate);if(a==="max"&&this.orientation==="vertical")this.range[f?"animate":"css"]({height:100-e+"%"},{queue:false,duration:b.animate})}}});d.extend(d.ui.slider,{version:"1.8.16"})})(jQuery);
+;/*
+ * jQuery UI Progressbar 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Progressbar
+ *
+ * Depends:
+ *   jquery.ui.core.js
+ *   jquery.ui.widget.js
+ */
+(function(b,d){b.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=b("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");
+this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===d)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){if(a==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*
+this._value()/this.options.max},_refreshValue:function(){var a=this.value(),c=this._percentage();if(this.oldValue!==a){this.oldValue=a;this._trigger("change")}this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.16"})})(jQuery);
+;
\ No newline at end of file
Binary file src/hdalab/static/hdalab/lib/leaflet/images/layers.png has changed
Binary file src/hdalab/static/hdalab/lib/leaflet/images/marker-shadow.png has changed
Binary file src/hdalab/static/hdalab/lib/leaflet/images/marker.png has changed
Binary file src/hdalab/static/hdalab/lib/leaflet/images/popup-close.png has changed
Binary file src/hdalab/static/hdalab/lib/leaflet/images/zoom-in.png has changed
Binary file src/hdalab/static/hdalab/lib/leaflet/images/zoom-out.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/lib/leaflet/leaflet-src.js	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,5637 @@
+/*
+ Copyright (c) 2010-2011, CloudMade, Vladimir Agafonkin
+ Leaflet is a modern open-source JavaScript library for interactive maps.
+ http://leaflet.cloudmade.com
+*/
+
+(function (root) {
+	root.L = {
+		VERSION: '0.3',
+
+		ROOT_URL: root.L_ROOT_URL || (function () {
+			var scripts = document.getElementsByTagName('script'),
+				leafletRe = /\/?leaflet[\-\._]?([\w\-\._]*)\.js\??/;
+
+			var i, len, src, matches;
+
+			for (i = 0, len = scripts.length; i < len; i++) {
+				src = scripts[i].src;
+				matches = src.match(leafletRe);
+
+				if (matches) {
+					if (matches[1] === 'include') {
+						return '../../dist/';
+					}
+					return src.replace(leafletRe, '') + '/';
+				}
+			}
+			return '';
+		}()),
+
+		noConflict: function () {
+			root.L = this._originalL;
+			return this;
+		},
+
+		_originalL: root.L
+	};
+}(this));
+
+
+/*
+ * L.Util is a namespace for various utility functions.
+ */
+
+L.Util = {
+	extend: function (/*Object*/ dest) /*-> Object*/ {	// merge src properties into dest
+		var sources = Array.prototype.slice.call(arguments, 1);
+		for (var j = 0, len = sources.length, src; j < len; j++) {
+			src = sources[j] || {};
+			for (var i in src) {
+				if (src.hasOwnProperty(i)) {
+					dest[i] = src[i];
+				}
+			}
+		}
+		return dest;
+	},
+
+	bind: function (/*Function*/ fn, /*Object*/ obj) /*-> Object*/ {
+		return function () {
+			return fn.apply(obj, arguments);
+		};
+	},
+
+	stamp: (function () {
+		var lastId = 0, key = '_leaflet_id';
+		return function (/*Object*/ obj) {
+			obj[key] = obj[key] || ++lastId;
+			return obj[key];
+		};
+	}()),
+
+	requestAnimFrame: (function () {
+		function timeoutDefer(callback) {
+			window.setTimeout(callback, 1000 / 60);
+		}
+
+		var requestFn = window.requestAnimationFrame ||
+			window.webkitRequestAnimationFrame ||
+			window.mozRequestAnimationFrame ||
+			window.oRequestAnimationFrame ||
+			window.msRequestAnimationFrame ||
+			timeoutDefer;
+
+		return function (callback, context, immediate, contextEl) {
+			callback = context ? L.Util.bind(callback, context) : callback;
+			if (immediate && requestFn === timeoutDefer) {
+				callback();
+			} else {
+				requestFn(callback, contextEl);
+			}
+		};
+	}()),
+
+	limitExecByInterval: function (fn, time, context) {
+		var lock, execOnUnlock, args;
+		function exec() {
+			lock = false;
+			if (execOnUnlock) {
+				args.callee.apply(context, args);
+				execOnUnlock = false;
+			}
+		}
+		return function () {
+			args = arguments;
+			if (!lock) {
+				lock = true;
+				setTimeout(exec, time);
+				fn.apply(context, args);
+			} else {
+				execOnUnlock = true;
+			}
+		};
+	},
+
+	falseFn: function () {
+		return false;
+	},
+
+	formatNum: function (num, digits) {
+		var pow = Math.pow(10, digits || 5);
+		return Math.round(num * pow) / pow;
+	},
+
+	setOptions: function (obj, options) {
+		obj.options = L.Util.extend({}, obj.options, options);
+	},
+
+	getParamString: function (obj) {
+		var params = [];
+		for (var i in obj) {
+			if (obj.hasOwnProperty(i)) {
+				params.push(i + '=' + obj[i]);
+			}
+		}
+		return '?' + params.join('&');
+	},
+
+	template: function (str, data) {
+		return str.replace(/\{ *([\w_]+) *\}/g, function (str, key) {
+			var value = data[key];
+			if (!data.hasOwnProperty(key)) {
+				throw new Error('No value provided for variable ' + str);
+			}
+			return value;
+		});
+	}
+};
+
+
+/*
+ * Class powers the OOP facilities of the library. Thanks to John Resig and Dean Edwards for inspiration!
+ */
+
+L.Class = function () {};
+
+L.Class.extend = function (/*Object*/ props) /*-> Class*/ {
+
+	// extended class with the new prototype
+	var NewClass = function () {
+		if (this.initialize) {
+			this.initialize.apply(this, arguments);
+		}
+	};
+
+	// instantiate class without calling constructor
+	var F = function () {};
+	F.prototype = this.prototype;
+	var proto = new F();
+
+	proto.constructor = NewClass;
+	NewClass.prototype = proto;
+
+	// add superclass access
+	NewClass.superclass = this.prototype;
+
+	// add class name
+	//proto.className = props;
+
+	//inherit parent's statics
+	for (var i in this) {
+		if (this.hasOwnProperty(i) && i !== 'prototype' && i !== 'superclass') {
+			NewClass[i] = this[i];
+		}
+	}
+
+	// mix static properties into the class
+	if (props.statics) {
+		L.Util.extend(NewClass, props.statics);
+		delete props.statics;
+	}
+
+	// mix includes into the prototype
+	if (props.includes) {
+		L.Util.extend.apply(null, [proto].concat(props.includes));
+		delete props.includes;
+	}
+
+	// merge options
+	if (props.options && proto.options) {
+		props.options = L.Util.extend({}, proto.options, props.options);
+	}
+
+	// mix given properties into the prototype
+	L.Util.extend(proto, props);
+
+	// allow inheriting further
+	NewClass.extend = L.Class.extend;
+
+	// method for adding properties to prototype
+	NewClass.include = function (props) {
+		L.Util.extend(this.prototype, props);
+	};
+
+	return NewClass;
+};
+
+
+/*
+ * L.Mixin.Events adds custom events functionality to Leaflet classes
+ */
+
+L.Mixin = {};
+
+L.Mixin.Events = {
+	addEventListener: function (/*String*/ type, /*Function*/ fn, /*(optional) Object*/ context) {
+		var events = this._leaflet_events = this._leaflet_events || {};
+		events[type] = events[type] || [];
+		events[type].push({
+			action: fn,
+			context: context || this
+		});
+		return this;
+	},
+
+	hasEventListeners: function (/*String*/ type) /*-> Boolean*/ {
+		var k = '_leaflet_events';
+		return (k in this) && (type in this[k]) && (this[k][type].length > 0);
+	},
+
+	removeEventListener: function (/*String*/ type, /*Function*/ fn, /*(optional) Object*/ context) {
+		if (!this.hasEventListeners(type)) {
+			return this;
+		}
+
+		for (var i = 0, events = this._leaflet_events, len = events[type].length; i < len; i++) {
+			if (
+				(events[type][i].action === fn) &&
+				(!context || (events[type][i].context === context))
+			) {
+				events[type].splice(i, 1);
+				return this;
+			}
+		}
+		return this;
+	},
+
+	fireEvent: function (/*String*/ type, /*(optional) Object*/ data) {
+		if (!this.hasEventListeners(type)) {
+			return this;
+		}
+
+		var event = L.Util.extend({
+			type: type,
+			target: this
+		}, data);
+
+		var listeners = this._leaflet_events[type].slice();
+
+		for (var i = 0, len = listeners.length; i < len; i++) {
+			listeners[i].action.call(listeners[i].context || this, event);
+		}
+
+		return this;
+	}
+};
+
+L.Mixin.Events.on = L.Mixin.Events.addEventListener;
+L.Mixin.Events.off = L.Mixin.Events.removeEventListener;
+L.Mixin.Events.fire = L.Mixin.Events.fireEvent;
+
+
+(function () {
+	var ua = navigator.userAgent.toLowerCase(),
+		ie = !!window.ActiveXObject,
+		webkit = ua.indexOf("webkit") !== -1,
+		mobile = typeof orientation !== 'undefined' ? true : false,
+		android = ua.indexOf("android") !== -1,
+		opera = window.opera;
+
+	L.Browser = {
+		ie: ie,
+		ie6: ie && !window.XMLHttpRequest,
+
+		webkit: webkit,
+		webkit3d: webkit && ('WebKitCSSMatrix' in window) && ('m11' in new window.WebKitCSSMatrix()),
+
+		gecko: ua.indexOf("gecko") !== -1,
+
+		opera: opera,
+
+		android: android,
+		mobileWebkit: mobile && webkit,
+		mobileOpera: mobile && opera,
+
+		mobile: mobile,
+		touch: (function () {
+			var touchSupported = false,
+				startName = 'ontouchstart';
+
+			// WebKit, etc
+			if (startName in document.documentElement) {
+				return true;
+			}
+
+			// Firefox/Gecko
+			var e = document.createElement('div');
+
+			// If no support for basic event stuff, unlikely to have touch support
+			if (!e.setAttribute || !e.removeAttribute) {
+				return false;
+			}
+
+			e.setAttribute(startName, 'return;');
+			if (typeof e[startName] === 'function') {
+				touchSupported = true;
+			}
+
+			e.removeAttribute(startName);
+			e = null;
+
+			return touchSupported;
+		}())
+	};
+}());
+
+
+/*
+ * L.Point represents a point with x and y coordinates.
+ */
+
+L.Point = function (/*Number*/ x, /*Number*/ y, /*Boolean*/ round) {
+	this.x = (round ? Math.round(x) : x);
+	this.y = (round ? Math.round(y) : y);
+};
+
+L.Point.prototype = {
+	add: function (point) {
+		return this.clone()._add(point);
+	},
+
+	_add: function (point) {
+		this.x += point.x;
+		this.y += point.y;
+		return this;
+	},
+
+	subtract: function (point) {
+		return this.clone()._subtract(point);
+	},
+
+	// destructive subtract (faster)
+	_subtract: function (point) {
+		this.x -= point.x;
+		this.y -= point.y;
+		return this;
+	},
+
+	divideBy: function (num, round) {
+		return new L.Point(this.x / num, this.y / num, round);
+	},
+
+	multiplyBy: function (num) {
+		return new L.Point(this.x * num, this.y * num);
+	},
+
+	distanceTo: function (point) {
+		var x = point.x - this.x,
+			y = point.y - this.y;
+		return Math.sqrt(x * x + y * y);
+	},
+
+	round: function () {
+		return this.clone()._round();
+	},
+
+	// destructive round
+	_round: function () {
+		this.x = Math.round(this.x);
+		this.y = Math.round(this.y);
+		return this;
+	},
+
+	clone: function () {
+		return new L.Point(this.x, this.y);
+	},
+
+	toString: function () {
+		return 'Point(' +
+				L.Util.formatNum(this.x) + ', ' +
+				L.Util.formatNum(this.y) + ')';
+	}
+};
+
+
+/*
+ * L.Bounds represents a rectangular area on the screen in pixel coordinates.
+ */
+
+L.Bounds = L.Class.extend({
+	initialize: function (min, max) {	//(Point, Point) or Point[]
+		if (!min) {
+			return;
+		}
+		var points = (min instanceof Array ? min : [min, max]);
+		for (var i = 0, len = points.length; i < len; i++) {
+			this.extend(points[i]);
+		}
+	},
+
+	// extend the bounds to contain the given point
+	extend: function (/*Point*/ point) {
+		if (!this.min && !this.max) {
+			this.min = new L.Point(point.x, point.y);
+			this.max = new L.Point(point.x, point.y);
+		} else {
+			this.min.x = Math.min(point.x, this.min.x);
+			this.max.x = Math.max(point.x, this.max.x);
+			this.min.y = Math.min(point.y, this.min.y);
+			this.max.y = Math.max(point.y, this.max.y);
+		}
+	},
+
+	getCenter: function (round)/*->Point*/ {
+		return new L.Point(
+				(this.min.x + this.max.x) / 2,
+				(this.min.y + this.max.y) / 2, round);
+	},
+
+	contains: function (/*Bounds or Point*/ obj)/*->Boolean*/ {
+		var min, max;
+
+		if (obj instanceof L.Bounds) {
+			min = obj.min;
+			max = obj.max;
+		} else {
+			min = max = obj;
+		}
+
+		return (min.x >= this.min.x) &&
+				(max.x <= this.max.x) &&
+				(min.y >= this.min.y) &&
+				(max.y <= this.max.y);
+	},
+
+	intersects: function (/*Bounds*/ bounds) {
+		var min = this.min,
+			max = this.max,
+			min2 = bounds.min,
+			max2 = bounds.max;
+
+		var xIntersects = (max2.x >= min.x) && (min2.x <= max.x),
+			yIntersects = (max2.y >= min.y) && (min2.y <= max.y);
+
+		return xIntersects && yIntersects;
+	}
+
+});
+
+
+/*
+ * L.Transformation is an utility class to perform simple point transformations through a 2d-matrix.
+ */
+
+L.Transformation = L.Class.extend({
+	initialize: function (/*Number*/ a, /*Number*/ b, /*Number*/ c, /*Number*/ d) {
+		this._a = a;
+		this._b = b;
+		this._c = c;
+		this._d = d;
+	},
+
+	transform: function (point, scale) {
+		return this._transform(point.clone(), scale);
+	},
+
+	// destructive transform (faster)
+	_transform: function (/*Point*/ point, /*Number*/ scale) /*-> Point*/ {
+		scale = scale || 1;
+		point.x = scale * (this._a * point.x + this._b);
+		point.y = scale * (this._c * point.y + this._d);
+		return point;
+	},
+
+	untransform: function (/*Point*/ point, /*Number*/ scale) /*-> Point*/ {
+		scale = scale || 1;
+		return new L.Point(
+			(point.x / scale - this._b) / this._a,
+			(point.y / scale - this._d) / this._c);
+	}
+});
+
+
+/*
+ * L.DomUtil contains various utility functions for working with DOM
+ */
+
+L.DomUtil = {
+	get: function (id) {
+		return (typeof id === 'string' ? document.getElementById(id) : id);
+	},
+
+	getStyle: function (el, style) {
+		var value = el.style[style];
+		if (!value && el.currentStyle) {
+			value = el.currentStyle[style];
+		}
+		if (!value || value === 'auto') {
+			var css = document.defaultView.getComputedStyle(el, null);
+			value = css ? css[style] : null;
+		}
+		return (value === 'auto' ? null : value);
+	},
+
+	getViewportOffset: function (element) {
+		var top = 0,
+			left = 0,
+			el = element,
+			docBody = document.body;
+
+		do {
+			top += el.offsetTop || 0;
+			left += el.offsetLeft || 0;
+
+			if (el.offsetParent === docBody &&
+					L.DomUtil.getStyle(el, 'position') === 'absolute') {
+				break;
+			}
+			el = el.offsetParent;
+		} while (el);
+
+		el = element;
+
+		do {
+			if (el === docBody) {
+				break;
+			}
+
+			top -= el.scrollTop || 0;
+			left -= el.scrollLeft || 0;
+
+			el = el.parentNode;
+		} while (el);
+
+		return new L.Point(left, top);
+	},
+
+	create: function (tagName, className, container) {
+		var el = document.createElement(tagName);
+		el.className = className;
+		if (container) {
+			container.appendChild(el);
+		}
+		return el;
+	},
+
+	disableTextSelection: function () {
+		if (document.selection && document.selection.empty) {
+			document.selection.empty();
+		}
+		if (!this._onselectstart) {
+			this._onselectstart = document.onselectstart;
+			document.onselectstart = L.Util.falseFn;
+		}
+	},
+
+	enableTextSelection: function () {
+		document.onselectstart = this._onselectstart;
+		this._onselectstart = null;
+	},
+
+	hasClass: function (el, name) {
+		return (el.className.length > 0) &&
+				new RegExp("(^|\\s)" + name + "(\\s|$)").test(el.className);
+	},
+
+	addClass: function (el, name) {
+		if (!L.DomUtil.hasClass(el, name)) {
+			el.className += (el.className ? ' ' : '') + name;
+		}
+	},
+
+	removeClass: function (el, name) {
+		el.className = el.className.replace(/(\S+)\s*/g, function (w, match) {
+			if (match === name) {
+				return '';
+			}
+			return w;
+		}).replace(/^\s+/, '');
+	},
+
+	setOpacity: function (el, value) {
+		if (L.Browser.ie) {
+			el.style.filter = 'alpha(opacity=' + Math.round(value * 100) + ')';
+		} else {
+			el.style.opacity = value;
+		}
+	},
+
+	//TODO refactor away this ugly translate/position mess
+
+	testProp: function (props) {
+		var style = document.documentElement.style;
+
+		for (var i = 0; i < props.length; i++) {
+			if (props[i] in style) {
+				return props[i];
+			}
+		}
+		return false;
+	},
+
+	getTranslateString: function (point) {
+		return L.DomUtil.TRANSLATE_OPEN +
+				point.x + 'px,' + point.y + 'px' +
+				L.DomUtil.TRANSLATE_CLOSE;
+	},
+
+	getScaleString: function (scale, origin) {
+		var preTranslateStr = L.DomUtil.getTranslateString(origin),
+			scaleStr = ' scale(' + scale + ') ',
+			postTranslateStr = L.DomUtil.getTranslateString(origin.multiplyBy(-1));
+
+		return preTranslateStr + scaleStr + postTranslateStr;
+	},
+
+	setPosition: function (el, point) {
+		el._leaflet_pos = point;
+		if (L.Browser.webkit) {
+			el.style[L.DomUtil.TRANSFORM] =  L.DomUtil.getTranslateString(point);
+		} else {
+			el.style.left = point.x + 'px';
+			el.style.top = point.y + 'px';
+		}
+	},
+
+	getPosition: function (el) {
+		return el._leaflet_pos;
+	}
+};
+
+L.Util.extend(L.DomUtil, {
+	TRANSITION: L.DomUtil.testProp(['transition', 'webkitTransition', 'OTransition', 'MozTransition', 'msTransition']),
+	TRANSFORM: L.DomUtil.testProp(['transformProperty', 'WebkitTransform', 'OTransform', 'MozTransform', 'msTransform']),
+
+	TRANSLATE_OPEN: 'translate' + (L.Browser.webkit3d ? '3d(' : '('),
+	TRANSLATE_CLOSE: L.Browser.webkit3d ? ',0)' : ')'
+});
+
+
+/*
+	CM.LatLng represents a geographical point with latitude and longtitude coordinates.
+*/
+
+L.LatLng = function (/*Number*/ rawLat, /*Number*/ rawLng, /*Boolean*/ noWrap) {
+	var lat = parseFloat(rawLat),
+		lng = parseFloat(rawLng);
+
+	if (isNaN(lat) || isNaN(lng)) {
+		throw new Error('Invalid LatLng object: (' + rawLat + ', ' + rawLng + ')');
+	}
+
+	if (noWrap !== true) {
+		lat = Math.max(Math.min(lat, 90), -90);					// clamp latitude into -90..90
+		lng = (lng + 180) % 360 + ((lng < -180 || lng === 180) ? 180 : -180);	// wrap longtitude into -180..180
+	}
+
+	//TODO change to lat() & lng()
+	this.lat = lat;
+	this.lng = lng;
+};
+
+L.Util.extend(L.LatLng, {
+	DEG_TO_RAD: Math.PI / 180,
+	RAD_TO_DEG: 180 / Math.PI,
+	MAX_MARGIN: 1.0E-9 // max margin of error for the "equals" check
+});
+
+L.LatLng.prototype = {
+	equals: function (/*LatLng*/ obj) {
+		if (!(obj instanceof L.LatLng)) {
+			return false;
+		}
+
+		var margin = Math.max(Math.abs(this.lat - obj.lat), Math.abs(this.lng - obj.lng));
+		return margin <= L.LatLng.MAX_MARGIN;
+	},
+
+	toString: function () {
+		return 'LatLng(' +
+				L.Util.formatNum(this.lat) + ', ' +
+				L.Util.formatNum(this.lng) + ')';
+	},
+
+	// Haversine distance formula, see http://en.wikipedia.org/wiki/Haversine_formula
+	distanceTo: function (/*LatLng*/ other)/*->Double*/ {
+		var R = 6378137, // earth radius in meters
+			d2r = L.LatLng.DEG_TO_RAD,
+			dLat = (other.lat - this.lat) * d2r,
+			dLon = (other.lng - this.lng) * d2r,
+			lat1 = this.lat * d2r,
+			lat2 = other.lat * d2r,
+			sin1 = Math.sin(dLat / 2),
+			sin2 = Math.sin(dLon / 2);
+
+		var a = sin1 * sin1 + sin2 * sin2 * Math.cos(lat1) * Math.cos(lat2);
+
+		return R * 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
+	}
+};
+
+
+/*
+ * L.LatLngBounds represents a rectangular area on the map in geographical coordinates.
+ */
+
+L.LatLngBounds = L.Class.extend({
+	initialize: function (southWest, northEast) {	// (LatLng, LatLng) or (LatLng[])
+		if (!southWest) {
+			return;
+		}
+		var latlngs = (southWest instanceof Array ? southWest : [southWest, northEast]);
+		for (var i = 0, len = latlngs.length; i < len; i++) {
+			this.extend(latlngs[i]);
+		}
+	},
+
+	// extend the bounds to contain the given point
+	extend: function (/*LatLng*/ latlng) {
+		if (!this._southWest && !this._northEast) {
+			this._southWest = new L.LatLng(latlng.lat, latlng.lng, true);
+			this._northEast = new L.LatLng(latlng.lat, latlng.lng, true);
+		} else {
+			this._southWest.lat = Math.min(latlng.lat, this._southWest.lat);
+			this._southWest.lng = Math.min(latlng.lng, this._southWest.lng);
+			this._northEast.lat = Math.max(latlng.lat, this._northEast.lat);
+			this._northEast.lng = Math.max(latlng.lng, this._northEast.lng);
+		}
+	},
+
+	getCenter: function () /*-> LatLng*/ {
+		return new L.LatLng(
+				(this._southWest.lat + this._northEast.lat) / 2,
+				(this._southWest.lng + this._northEast.lng) / 2);
+	},
+
+	getSouthWest: function () {
+		return this._southWest;
+	},
+
+	getNorthEast: function () {
+		return this._northEast;
+	},
+
+	getNorthWest: function () {
+		return new L.LatLng(this._northEast.lat, this._southWest.lng, true);
+	},
+
+	getSouthEast: function () {
+		return new L.LatLng(this._southWest.lat, this._northEast.lng, true);
+	},
+
+	contains: function (/*LatLngBounds or LatLng*/ obj) /*-> Boolean*/ {
+		var sw = this._southWest,
+			ne = this._northEast,
+			sw2, ne2;
+
+		if (obj instanceof L.LatLngBounds) {
+			sw2 = obj.getSouthWest();
+			ne2 = obj.getNorthEast();
+		} else {
+			sw2 = ne2 = obj;
+		}
+
+		return (sw2.lat >= sw.lat) && (ne2.lat <= ne.lat) &&
+				(sw2.lng >= sw.lng) && (ne2.lng <= ne.lng);
+	},
+
+	intersects: function (/*LatLngBounds*/ bounds) {
+		var sw = this._southWest,
+			ne = this._northEast,
+			sw2 = bounds.getSouthWest(),
+			ne2 = bounds.getNorthEast();
+
+		var latIntersects = (ne2.lat >= sw.lat) && (sw2.lat <= ne.lat),
+			lngIntersects = (ne2.lng >= sw.lng) && (sw2.lng <= ne.lng);
+
+		return latIntersects && lngIntersects;
+	},
+
+	toBBoxString: function () {
+		var sw = this._southWest,
+			ne = this._northEast;
+		return [sw.lng, sw.lat, ne.lng, ne.lat].join(',');
+	}
+});
+
+//TODO International date line?
+
+
+/*
+ * L.Projection contains various geographical projections used by CRS classes.
+ */
+
+L.Projection = {};
+
+
+
+L.Projection.SphericalMercator = {
+	MAX_LATITUDE: 85.0511287798,
+
+	project: function (/*LatLng*/ latlng) /*-> Point*/ {
+		var d = L.LatLng.DEG_TO_RAD,
+			max = this.MAX_LATITUDE,
+			lat = Math.max(Math.min(max, latlng.lat), -max),
+			x = latlng.lng * d,
+			y = lat * d;
+		y = Math.log(Math.tan((Math.PI / 4) + (y / 2)));
+
+		return new L.Point(x, y);
+	},
+
+	unproject: function (/*Point*/ point, /*Boolean*/ unbounded) /*-> LatLng*/ {
+		var d = L.LatLng.RAD_TO_DEG,
+			lng = point.x * d,
+			lat = (2 * Math.atan(Math.exp(point.y)) - (Math.PI / 2)) * d;
+
+		return new L.LatLng(lat, lng, unbounded);
+	}
+};
+
+
+
+L.Projection.LonLat = {
+	project: function (latlng) {
+		return new L.Point(latlng.lng, latlng.lat);
+	},
+
+	unproject: function (point, unbounded) {
+		return new L.LatLng(point.y, point.x, unbounded);
+	}
+};
+
+
+
+L.CRS = {
+	latLngToPoint: function (/*LatLng*/ latlng, /*Number*/ scale)/*-> Point*/ {
+		var projectedPoint = this.projection.project(latlng);
+		return this.transformation._transform(projectedPoint, scale);
+	},
+
+	pointToLatLng: function (/*Point*/ point, /*Number*/ scale, /*(optional) Boolean*/ unbounded)/*-> LatLng*/ {
+		var untransformedPoint = this.transformation.untransform(point, scale);
+		return this.projection.unproject(untransformedPoint, unbounded);
+		//TODO get rid of 'unbounded' everywhere
+	},
+
+	project: function (latlng) {
+		return this.projection.project(latlng);
+	}
+};
+
+
+
+L.CRS.EPSG3857 = L.Util.extend({}, L.CRS, {
+	code: 'EPSG:3857',
+
+	projection: L.Projection.SphericalMercator,
+	transformation: new L.Transformation(0.5 / Math.PI, 0.5, -0.5 / Math.PI, 0.5),
+
+	project: function (/*LatLng*/ latlng)/*-> Point*/ {
+		var projectedPoint = this.projection.project(latlng),
+			earthRadius = 6378137;
+		return projectedPoint.multiplyBy(earthRadius);
+	}
+});
+
+L.CRS.EPSG900913 = L.Util.extend({}, L.CRS.EPSG3857, {
+	code: 'EPSG:900913'
+});
+
+
+
+L.CRS.EPSG4326 = L.Util.extend({}, L.CRS, {
+	code: 'EPSG:4326',
+
+	projection: L.Projection.LonLat,
+	transformation: new L.Transformation(1 / 360, 0.5, -1 / 360, 0.5)
+});
+
+
+/*
+ * L.Map is the central class of the API - it is used to create a map.
+ */
+
+L.Map = L.Class.extend({
+	includes: L.Mixin.Events,
+
+	options: {
+		// projection
+		crs: L.CRS.EPSG3857 || L.CRS.EPSG4326,
+		scale: function (zoom) {
+			return 256 * Math.pow(2, zoom);
+		},
+
+		// state
+		center: null,
+		zoom: null,
+		layers: [],
+
+		// interaction
+		dragging: true,
+		touchZoom: L.Browser.touch && !L.Browser.android,
+		scrollWheelZoom: !L.Browser.touch,
+		doubleClickZoom: true,
+		boxZoom: true,
+
+		// controls
+		zoomControl: true,
+		attributionControl: true,
+
+		// animation
+		fadeAnimation: L.DomUtil.TRANSITION && !L.Browser.android,
+		zoomAnimation: L.DomUtil.TRANSITION && !L.Browser.android && !L.Browser.mobileOpera,
+
+		// misc
+		trackResize: true,
+		closePopupOnClick: true,
+		worldCopyJump: true
+	},
+
+
+	// constructor
+
+	initialize: function (id, options) { // (HTMLElement or String, Object)
+		L.Util.setOptions(this, options);
+
+		this._container = L.DomUtil.get(id);
+
+		if (this._container._leaflet) {
+			throw new Error("Map container is already initialized.");
+		}
+		this._container._leaflet = true;
+
+		this._initLayout();
+
+		if (L.DomEvent) {
+			this._initEvents();
+			if (L.Handler) {
+				this._initInteraction();
+			}
+			if (L.Control) {
+				this._initControls();
+			}
+		}
+
+		if (this.options.maxBounds) {
+			this.setMaxBounds(this.options.maxBounds);
+		}
+
+		var center = this.options.center,
+			zoom = this.options.zoom;
+
+		if (center !== null && zoom !== null) {
+			this.setView(center, zoom, true);
+		}
+
+		var layers = this.options.layers;
+		layers = (layers instanceof Array ? layers : [layers]);
+		this._tileLayersNum = 0;
+		this._initLayers(layers);
+	},
+
+
+	// public methods that modify map state
+
+	// replaced by animation-powered implementation in Map.PanAnimation.js
+	setView: function (center, zoom) {
+		// reset the map view
+		this._resetView(center, this._limitZoom(zoom));
+		return this;
+	},
+
+	setZoom: function (zoom) { // (Number)
+		return this.setView(this.getCenter(), zoom);
+	},
+
+	zoomIn: function () {
+		return this.setZoom(this._zoom + 1);
+	},
+
+	zoomOut: function () {
+		return this.setZoom(this._zoom - 1);
+	},
+
+	fitBounds: function (bounds) { // (LatLngBounds)
+		var zoom = this.getBoundsZoom(bounds);
+		return this.setView(bounds.getCenter(), zoom);
+	},
+
+	fitWorld: function () {
+		var sw = new L.LatLng(-60, -170),
+			ne = new L.LatLng(85, 179);
+		return this.fitBounds(new L.LatLngBounds(sw, ne));
+	},
+
+	panTo: function (center) { // (LatLng)
+		return this.setView(center, this._zoom);
+	},
+
+	panBy: function (offset) { // (Point)
+		// replaced with animated panBy in Map.Animation.js
+		this.fire('movestart');
+
+		this._rawPanBy(offset);
+
+		this.fire('move');
+		this.fire('moveend');
+
+		return this;
+	},
+
+	setMaxBounds: function (bounds) {
+		this.options.maxBounds = bounds;
+
+		if (!bounds) {
+			this._boundsMinZoom = null;
+			return this;
+		}
+
+		var minZoom = this.getBoundsZoom(bounds, true);
+
+		this._boundsMinZoom = minZoom;
+
+		if (this._loaded) {
+			if (this._zoom < minZoom) {
+				this.setView(bounds.getCenter(), minZoom);
+			} else {
+				this.panInsideBounds(bounds);
+			}
+		}
+		return this;
+	},
+
+	panInsideBounds: function (bounds) {
+		var viewBounds = this.getBounds(),
+			viewSw = this.project(viewBounds.getSouthWest()),
+			viewNe = this.project(viewBounds.getNorthEast()),
+			sw = this.project(bounds.getSouthWest()),
+			ne = this.project(bounds.getNorthEast()),
+			dx = 0,
+			dy = 0;
+
+		if (viewNe.y < ne.y) { // north
+			dy = ne.y - viewNe.y;
+		}
+		if (viewNe.x > ne.x) { // east
+			dx = ne.x - viewNe.x;
+		}
+		if (viewSw.y > sw.y) { // south
+			dy = sw.y - viewSw.y;
+		}
+		if (viewSw.x < sw.x) { // west
+			dx = sw.x - viewSw.x;
+		}
+
+		return this.panBy(new L.Point(dx, dy, true));
+	},
+
+	addLayer: function (layer, insertAtTheTop) {
+		var id = L.Util.stamp(layer);
+
+		if (this._layers[id]) {
+			return this;
+		}
+
+		this._layers[id] = layer;
+
+		if (layer.options && !isNaN(layer.options.maxZoom)) {
+			this._layersMaxZoom = Math.max(this._layersMaxZoom || 0, layer.options.maxZoom);
+		}
+		if (layer.options && !isNaN(layer.options.minZoom)) {
+			this._layersMinZoom = Math.min(this._layersMinZoom || Infinity, layer.options.minZoom);
+		}
+		//TODO getMaxZoom, getMinZoom in ILayer (instead of options)
+
+		if (this.options.zoomAnimation && L.TileLayer && (layer instanceof L.TileLayer)) {
+			this._tileLayersNum++;
+			layer.on('load', this._onTileLayerLoad, this);
+		}
+		if (this.attributionControl && layer.getAttribution) {
+			this.attributionControl.addAttribution(layer.getAttribution());
+		}
+
+		var onMapLoad = function () {
+			layer.onAdd(this, insertAtTheTop);
+			this.fire('layeradd', {layer: layer});
+		};
+
+		if (this._loaded) {
+			onMapLoad.call(this);
+		} else {
+			this.on('load', onMapLoad, this);
+		}
+
+		return this;
+	},
+
+	removeLayer: function (layer) {
+		var id = L.Util.stamp(layer);
+
+		if (this._layers[id]) {
+			layer.onRemove(this);
+			delete this._layers[id];
+
+			if (this.options.zoomAnimation && L.TileLayer && (layer instanceof L.TileLayer)) {
+				this._tileLayersNum--;
+				layer.off('load', this._onTileLayerLoad, this);
+			}
+			if (this.attributionControl && layer.getAttribution) {
+				this.attributionControl.removeAttribution(layer.getAttribution());
+			}
+
+			this.fire('layerremove', {layer: layer});
+		}
+		return this;
+	},
+
+	hasLayer: function (layer) {
+		var id = L.Util.stamp(layer);
+		return this._layers.hasOwnProperty(id);
+	},
+
+	invalidateSize: function () {
+		var oldSize = this.getSize();
+
+		this._sizeChanged = true;
+
+		if (this.options.maxBounds) {
+			this.setMaxBounds(this.options.maxBounds);
+		}
+
+		if (!this._loaded) {
+			return this;
+		}
+
+		this._rawPanBy(oldSize.subtract(this.getSize()).divideBy(2, true));
+
+		this.fire('move');
+
+		clearTimeout(this._sizeTimer);
+		this._sizeTimer = setTimeout(L.Util.bind(function () {
+			this.fire('moveend');
+		}, this), 200);
+
+		return this;
+	},
+
+
+	// public methods for getting map state
+
+	getCenter: function (unbounded) { // (Boolean)
+		var viewHalf = this.getSize().divideBy(2),
+			centerPoint = this._getTopLeftPoint().add(viewHalf);
+		return this.unproject(centerPoint, this._zoom, unbounded);
+	},
+
+	getZoom: function () {
+		return this._zoom;
+	},
+
+	getBounds: function () {
+		var bounds = this.getPixelBounds(),
+			sw = this.unproject(new L.Point(bounds.min.x, bounds.max.y), this._zoom, true),
+			ne = this.unproject(new L.Point(bounds.max.x, bounds.min.y), this._zoom, true);
+		return new L.LatLngBounds(sw, ne);
+	},
+
+	getMinZoom: function () {
+		var z1 = this.options.minZoom || 0,
+			z2 = this._layersMinZoom || 0,
+			z3 = this._boundsMinZoom || 0;
+
+		return Math.max(z1, z2, z3);
+	},
+
+	getMaxZoom: function () {
+		var z1 = isNaN(this.options.maxZoom) ? Infinity : this.options.maxZoom,
+			z2 = this._layersMaxZoom || Infinity;
+
+		return Math.min(z1, z2);
+	},
+
+	getBoundsZoom: function (bounds, inside) { // (LatLngBounds)
+		var size = this.getSize(),
+			zoom = this.options.minZoom || 0,
+			maxZoom = this.getMaxZoom(),
+			ne = bounds.getNorthEast(),
+			sw = bounds.getSouthWest(),
+			boundsSize,
+			nePoint,
+			swPoint,
+			zoomNotFound = true;
+
+		if (inside) {
+			zoom--;
+		}
+
+		do {
+			zoom++;
+			nePoint = this.project(ne, zoom);
+			swPoint = this.project(sw, zoom);
+			boundsSize = new L.Point(nePoint.x - swPoint.x, swPoint.y - nePoint.y);
+
+			if (!inside) {
+				zoomNotFound = (boundsSize.x <= size.x) && (boundsSize.y <= size.y);
+			} else {
+				zoomNotFound = (boundsSize.x < size.x) || (boundsSize.y < size.y);
+			}
+		} while (zoomNotFound && (zoom <= maxZoom));
+
+		if (zoomNotFound && inside) {
+			return null;
+		}
+
+		return inside ? zoom : zoom - 1;
+	},
+
+	getSize: function () {
+		if (!this._size || this._sizeChanged) {
+			this._size = new L.Point(this._container.clientWidth, this._container.clientHeight);
+			this._sizeChanged = false;
+		}
+		return this._size;
+	},
+
+	getPixelBounds: function () {
+		var topLeftPoint = this._getTopLeftPoint(),
+			size = this.getSize();
+		return new L.Bounds(topLeftPoint, topLeftPoint.add(size));
+	},
+
+	getPixelOrigin: function () {
+		return this._initialTopLeftPoint;
+	},
+
+	getPanes: function () {
+		return this._panes;
+	},
+
+
+	// conversion methods
+
+	mouseEventToContainerPoint: function (e) { // (MouseEvent)
+		return L.DomEvent.getMousePosition(e, this._container);
+	},
+
+	mouseEventToLayerPoint: function (e) { // (MouseEvent)
+		return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(e));
+	},
+
+	mouseEventToLatLng: function (e) { // (MouseEvent)
+		return this.layerPointToLatLng(this.mouseEventToLayerPoint(e));
+	},
+
+	containerPointToLayerPoint: function (point) { // (Point)
+		return point.subtract(L.DomUtil.getPosition(this._mapPane));
+	},
+
+	layerPointToContainerPoint: function (point) { // (Point)
+		return point.add(L.DomUtil.getPosition(this._mapPane));
+	},
+
+	layerPointToLatLng: function (point) { // (Point)
+		return this.unproject(point.add(this._initialTopLeftPoint));
+	},
+
+	latLngToLayerPoint: function (latlng) { // (LatLng)
+		return this.project(latlng)._round()._subtract(this._initialTopLeftPoint);
+	},
+
+	project: function (latlng, zoom) { // (LatLng[, Number]) -> Point
+		zoom = (typeof zoom === 'undefined' ? this._zoom : zoom);
+		return this.options.crs.latLngToPoint(latlng, this.options.scale(zoom));
+	},
+
+	unproject: function (point, zoom, unbounded) { // (Point[, Number, Boolean]) -> LatLng
+		zoom = (typeof zoom === 'undefined' ? this._zoom : zoom);
+		return this.options.crs.pointToLatLng(point, this.options.scale(zoom), unbounded);
+	},
+
+
+	// private methods that modify map state
+
+	_initLayout: function () {
+		var container = this._container;
+
+		container.innerHTML = '';
+
+		container.className += ' leaflet-container';
+
+		if (this.options.fadeAnimation) {
+			container.className += ' leaflet-fade-anim';
+		}
+
+		var position = L.DomUtil.getStyle(container, 'position');
+		if (position !== 'absolute' && position !== 'relative') {
+			container.style.position = 'relative';
+		}
+
+		this._initPanes();
+
+		if (this._initControlPos) {
+			this._initControlPos();
+		}
+	},
+
+	_initPanes: function () {
+		var panes = this._panes = {};
+
+		this._mapPane = panes.mapPane = this._createPane('leaflet-map-pane', this._container);
+
+		this._tilePane = panes.tilePane = this._createPane('leaflet-tile-pane', this._mapPane);
+		this._objectsPane = panes.objectsPane = this._createPane('leaflet-objects-pane', this._mapPane);
+
+		panes.shadowPane = this._createPane('leaflet-shadow-pane');
+		panes.overlayPane = this._createPane('leaflet-overlay-pane');
+		panes.markerPane = this._createPane('leaflet-marker-pane');
+		panes.popupPane = this._createPane('leaflet-popup-pane');
+	},
+
+	_createPane: function (className, container) {
+		return L.DomUtil.create('div', className, container || this._objectsPane);
+	},
+
+	_resetView: function (center, zoom, preserveMapOffset, afterZoomAnim) {
+		var zoomChanged = (this._zoom !== zoom);
+
+		if (!afterZoomAnim) {
+			this.fire('movestart');
+
+			if (zoomChanged) {
+				this.fire('zoomstart');
+			}
+		}
+
+		this._zoom = zoom;
+
+		this._initialTopLeftPoint = this._getNewTopLeftPoint(center);
+
+		if (!preserveMapOffset) {
+			L.DomUtil.setPosition(this._mapPane, new L.Point(0, 0));
+		} else {
+			var offset = L.DomUtil.getPosition(this._mapPane);
+			this._initialTopLeftPoint._add(offset);
+		}
+
+		this._tileLayersToLoad = this._tileLayersNum;
+		this.fire('viewreset', {hard: !preserveMapOffset});
+
+		this.fire('move');
+		if (zoomChanged || afterZoomAnim) {
+			this.fire('zoomend');
+		}
+		this.fire('moveend');
+
+		if (!this._loaded) {
+			this._loaded = true;
+			this.fire('load');
+		}
+	},
+
+	_initLayers: function (layers) {
+		this._layers = {};
+
+		var i, len;
+
+		for (i = 0, len = layers.length; i < len; i++) {
+			this.addLayer(layers[i]);
+		}
+	},
+
+	_initControls: function () {
+		if (this.options.zoomControl) {
+			this.addControl(new L.Control.Zoom());
+		}
+		if (this.options.attributionControl) {
+			this.attributionControl = new L.Control.Attribution();
+			this.addControl(this.attributionControl);
+		}
+	},
+
+	_rawPanBy: function (offset) {
+		var mapPaneOffset = L.DomUtil.getPosition(this._mapPane);
+		L.DomUtil.setPosition(this._mapPane, mapPaneOffset.subtract(offset));
+	},
+
+
+	// map events
+
+	_initEvents: function () {
+		L.DomEvent.addListener(this._container, 'click', this._onMouseClick, this);
+
+		var events = ['dblclick', 'mousedown', 'mouseenter', 'mouseleave', 'mousemove', 'contextmenu'];
+
+		var i, len;
+
+		for (i = 0, len = events.length; i < len; i++) {
+			L.DomEvent.addListener(this._container, events[i], this._fireMouseEvent, this);
+		}
+
+		if (this.options.trackResize) {
+			L.DomEvent.addListener(window, 'resize', this._onResize, this);
+		}
+	},
+
+	_onResize: function () {
+		L.Util.requestAnimFrame(this.invalidateSize, this, false, this._container);
+	},
+
+	_onMouseClick: function (e) {
+		if (!this._loaded || (this.dragging && this.dragging.moved())) {
+			return;
+		}
+
+		this.fire('pre' + e.type);
+		this._fireMouseEvent(e);
+	},
+
+	_fireMouseEvent: function (e) {
+		if (!this._loaded) {
+			return;
+		}
+
+		var type = e.type;
+		type = (type === 'mouseenter' ? 'mouseover' : (type === 'mouseleave' ? 'mouseout' : type));
+
+		if (!this.hasEventListeners(type)) {
+			return;
+		}
+
+		if (type === 'contextmenu') {
+			L.DomEvent.preventDefault(e);
+		}
+		
+		this.fire(type, {
+			latlng: this.mouseEventToLatLng(e),
+			layerPoint: this.mouseEventToLayerPoint(e)
+		});
+	},
+
+	_initInteraction: function () {
+		var handlers = {
+			dragging: L.Map.Drag,
+			touchZoom: L.Map.TouchZoom,
+			doubleClickZoom: L.Map.DoubleClickZoom,
+			scrollWheelZoom: L.Map.ScrollWheelZoom,
+			boxZoom: L.Map.BoxZoom
+		};
+
+		var i;
+		for (i in handlers) {
+			if (handlers.hasOwnProperty(i) && handlers[i]) {
+				this[i] = new handlers[i](this);
+				if (this.options[i]) {
+					this[i].enable();
+				}
+				// TODO move enabling to handler contructor
+			}
+		}
+	},
+
+	_onTileLayerLoad: function () {
+		// clear scaled tiles after all new tiles are loaded (for performance)
+		this._tileLayersToLoad--;
+		if (this._tileLayersNum && !this._tileLayersToLoad && this._tileBg) {
+			clearTimeout(this._clearTileBgTimer);
+			this._clearTileBgTimer = setTimeout(L.Util.bind(this._clearTileBg, this), 500);
+		}
+	},
+
+
+	// private methods for getting map state
+
+	_getTopLeftPoint: function () {
+		if (!this._loaded) {
+			throw new Error('Set map center and zoom first.');
+		}
+
+		var offset = L.DomUtil.getPosition(this._mapPane);
+		return this._initialTopLeftPoint.subtract(offset);
+	},
+
+	_getNewTopLeftPoint: function (center) {
+		var viewHalf = this.getSize().divideBy(2);
+		return this.project(center).subtract(viewHalf).round();
+	},
+
+	_limitZoom: function (zoom) {
+		var min = this.getMinZoom();
+		var max = this.getMaxZoom();
+		return Math.max(min, Math.min(max, zoom));
+	}
+});
+
+
+
+L.Projection.Mercator = {
+	MAX_LATITUDE: 85.0840591556,
+
+	R_MINOR: 6356752.3142,
+	R_MAJOR: 6378137,
+
+	project: function (/*LatLng*/ latlng) /*-> Point*/ {
+		var d = L.LatLng.DEG_TO_RAD,
+			max = this.MAX_LATITUDE,
+			lat = Math.max(Math.min(max, latlng.lat), -max),
+			r = this.R_MAJOR,
+			r2 = this.R_MINOR,
+			x = latlng.lng * d * r,
+			y = lat * d,
+			tmp = r2 / r,
+			eccent = Math.sqrt(1.0 - tmp * tmp),
+			con = eccent * Math.sin(y);
+
+		con = Math.pow((1 - con) / (1 + con), eccent * 0.5);
+
+		var ts = Math.tan(0.5 * ((Math.PI * 0.5) - y)) / con;
+		y = -r2 * Math.log(ts);
+
+		return new L.Point(x, y);
+	},
+
+	unproject: function (/*Point*/ point, /*Boolean*/ unbounded) /*-> LatLng*/ {
+		var d = L.LatLng.RAD_TO_DEG,
+			r = this.R_MAJOR,
+			r2 = this.R_MINOR,
+			lng = point.x * d / r,
+			tmp = r2 / r,
+			eccent = Math.sqrt(1 - (tmp * tmp)),
+			ts = Math.exp(- point.y / r2),
+			phi = (Math.PI / 2) - 2 * Math.atan(ts),
+			numIter = 15,
+			tol = 1e-7,
+			i = numIter,
+			dphi = 0.1,
+			con;
+
+		while ((Math.abs(dphi) > tol) && (--i > 0)) {
+			con = eccent * Math.sin(phi);
+			dphi = (Math.PI / 2) - 2 * Math.atan(ts * Math.pow((1.0 - con) / (1.0 + con), 0.5 * eccent)) - phi;
+			phi += dphi;
+		}
+
+		return new L.LatLng(phi * d, lng, unbounded);
+	}
+};
+
+
+
+L.CRS.EPSG3395 = L.Util.extend({}, L.CRS, {
+	code: 'EPSG:3395',
+
+	projection: L.Projection.Mercator,
+	transformation: (function () {
+		var m = L.Projection.Mercator,
+			r = m.R_MAJOR,
+			r2 = m.R_MINOR;
+
+		return new L.Transformation(0.5 / (Math.PI * r), 0.5, -0.5 / (Math.PI * r2), 0.5);
+	}())
+});
+
+
+/*
+ * L.TileLayer is used for standard xyz-numbered tile layers.
+ */
+
+L.TileLayer = L.Class.extend({
+	includes: L.Mixin.Events,
+
+	options: {
+		minZoom: 0,
+		maxZoom: 18,
+		tileSize: 256,
+		subdomains: 'abc',
+		errorTileUrl: '',
+		attribution: '',
+		opacity: 1,
+		scheme: 'xyz',
+		continuousWorld: false,
+		noWrap: false,
+		zoomOffset: 0,
+		zoomReverse: false,
+
+		unloadInvisibleTiles: L.Browser.mobile,
+		updateWhenIdle: L.Browser.mobile
+	},
+
+	initialize: function (url, options, urlParams) {
+		L.Util.setOptions(this, options);
+
+		this._url = url;
+		this._urlParams = urlParams;
+
+		if (typeof this.options.subdomains === 'string') {
+			this.options.subdomains = this.options.subdomains.split('');
+		}
+	},
+
+	onAdd: function (map, insertAtTheBottom) {
+		this._map = map;
+		this._insertAtTheBottom = insertAtTheBottom;
+
+		// create a container div for tiles
+		this._initContainer();
+
+		// create an image to clone for tiles
+		this._createTileProto();
+
+		// set up events
+		map.on('viewreset', this._resetCallback, this);
+
+		if (this.options.updateWhenIdle) {
+			map.on('moveend', this._update, this);
+		} else {
+			this._limitedUpdate = L.Util.limitExecByInterval(this._update, 150, this);
+			map.on('move', this._limitedUpdate, this);
+		}
+
+		this._reset();
+		this._update();
+	},
+
+	onRemove: function (map) {
+		this._map.getPanes().tilePane.removeChild(this._container);
+		this._container = null;
+
+		this._map.off('viewreset', this._resetCallback, this);
+
+		if (this.options.updateWhenIdle) {
+			this._map.off('moveend', this._update, this);
+		} else {
+			this._map.off('move', this._limitedUpdate, this);
+		}
+	},
+
+	getAttribution: function () {
+		return this.options.attribution;
+	},
+
+	setOpacity: function (opacity) {
+		this.options.opacity = opacity;
+
+		this._setOpacity(opacity);
+
+		// stupid webkit hack to force redrawing of tiles
+		if (L.Browser.webkit) {
+			for (var i in this._tiles) {
+				if (this._tiles.hasOwnProperty(i)) {
+					this._tiles[i].style.webkitTransform += ' translate(0,0)';
+				}
+			}
+		}
+	},
+
+	_setOpacity: function (opacity) {
+		if (opacity < 1) {
+			L.DomUtil.setOpacity(this._container, opacity);
+		}
+	},
+
+	_initContainer: function () {
+		var tilePane = this._map.getPanes().tilePane,
+			first = tilePane.firstChild;
+
+		if (!this._container || tilePane.empty) {
+			this._container = L.DomUtil.create('div', 'leaflet-layer');
+
+			if (this._insertAtTheBottom && first) {
+				tilePane.insertBefore(this._container, first);
+			} else {
+				tilePane.appendChild(this._container);
+			}
+
+			this._setOpacity(this.options.opacity);
+		}
+	},
+
+	_resetCallback: function (e) {
+		this._reset(e.hard);
+	},
+
+	_reset: function (clearOldContainer) {
+		var key;
+		for (key in this._tiles) {
+			if (this._tiles.hasOwnProperty(key)) {
+				this.fire("tileunload", {tile: this._tiles[key]});
+			}
+		}
+		this._tiles = {};
+
+		if (this.options.reuseTiles) {
+			this._unusedTiles = [];
+		}
+
+		if (clearOldContainer && this._container) {
+			this._container.innerHTML = "";
+		}
+		this._initContainer();
+	},
+
+	_update: function () {
+		var bounds = this._map.getPixelBounds(),
+			tileSize = this.options.tileSize;
+
+		var nwTilePoint = new L.Point(
+				Math.floor(bounds.min.x / tileSize),
+				Math.floor(bounds.min.y / tileSize)),
+			seTilePoint = new L.Point(
+				Math.floor(bounds.max.x / tileSize),
+				Math.floor(bounds.max.y / tileSize)),
+			tileBounds = new L.Bounds(nwTilePoint, seTilePoint);
+
+		this._addTilesFromCenterOut(tileBounds);
+
+		if (this.options.unloadInvisibleTiles ||
+			this.options.reuseTiles) {
+			this._removeOtherTiles(tileBounds);
+		}
+	},
+
+	_addTilesFromCenterOut: function (bounds) {
+		var queue = [],
+			center = bounds.getCenter();
+
+		for (var j = bounds.min.y; j <= bounds.max.y; j++) {
+			for (var i = bounds.min.x; i <= bounds.max.x; i++) {
+				if ((i + ':' + j) in this._tiles) {
+					continue;
+				}
+				queue.push(new L.Point(i, j));
+			}
+		}
+
+		// load tiles in order of their distance to center
+		queue.sort(function (a, b) {
+			return a.distanceTo(center) - b.distanceTo(center);
+		});
+
+		var fragment = document.createDocumentFragment();
+
+		this._tilesToLoad = queue.length;
+		for (var k = 0, len = this._tilesToLoad; k < len; k++) {
+			this._addTile(queue[k], fragment);
+		}
+
+		this._container.appendChild(fragment);
+	},
+
+	_removeOtherTiles: function (bounds) {
+		var kArr, x, y, key, tile;
+
+		for (key in this._tiles) {
+			if (this._tiles.hasOwnProperty(key)) {
+				kArr = key.split(':');
+				x = parseInt(kArr[0], 10);
+				y = parseInt(kArr[1], 10);
+
+				// remove tile if it's out of bounds
+				if (x < bounds.min.x || x > bounds.max.x || y < bounds.min.y || y > bounds.max.y) {
+
+					tile = this._tiles[key];
+					this.fire("tileunload", {tile: tile, url: tile.src});
+
+					// evil, don't do this! crashes Android 3, produces load errors, doesn't solve memory leaks
+					// this._tiles[key].src = '';
+
+					if (tile.parentNode === this._container) {
+						this._container.removeChild(tile);
+					}
+					if (this.options.reuseTiles) {
+						this._unusedTiles.push(this._tiles[key]);
+					}
+					delete this._tiles[key];
+				}
+			}
+		}
+	},
+
+	_addTile: function (tilePoint, container) {
+		var tilePos = this._getTilePos(tilePoint),
+			zoom = this._map.getZoom(),
+			key = tilePoint.x + ':' + tilePoint.y,
+			tileLimit = Math.pow(2, this._getOffsetZoom(zoom));
+
+		// wrap tile coordinates
+		if (!this.options.continuousWorld) {
+			if (!this.options.noWrap) {
+				tilePoint.x = ((tilePoint.x % tileLimit) + tileLimit) % tileLimit;
+			} else if (tilePoint.x < 0 || tilePoint.x >= tileLimit) {
+				this._tilesToLoad--;
+				return;
+			}
+
+			if (tilePoint.y < 0 || tilePoint.y >= tileLimit) {
+				this._tilesToLoad--;
+				return;
+			}
+		}
+
+		// get unused tile - or create a new tile
+		var tile = this._getTile();
+		L.DomUtil.setPosition(tile, tilePos);
+
+		this._tiles[key] = tile;
+
+		if (this.options.scheme === 'tms') {
+			tilePoint.y = tileLimit - tilePoint.y - 1;
+		}
+
+		this._loadTile(tile, tilePoint, zoom);
+
+		container.appendChild(tile);
+	},
+
+	_getOffsetZoom: function (zoom) {
+		zoom = this.options.zoomReverse ? this.options.maxZoom - zoom : zoom;
+		return zoom + this.options.zoomOffset;
+	},
+
+	_getTilePos: function (tilePoint) {
+		var origin = this._map.getPixelOrigin(),
+			tileSize = this.options.tileSize;
+
+		return tilePoint.multiplyBy(tileSize).subtract(origin);
+	},
+
+	// image-specific code (override to implement e.g. Canvas or SVG tile layer)
+
+	getTileUrl: function (tilePoint, zoom) {
+		var subdomains = this.options.subdomains,
+			s = this.options.subdomains[(tilePoint.x + tilePoint.y) % subdomains.length];
+
+		return L.Util.template(this._url, L.Util.extend({
+			s: s,
+			z: this._getOffsetZoom(zoom),
+			x: tilePoint.x,
+			y: tilePoint.y
+		}, this._urlParams));
+	},
+
+	_createTileProto: function () {
+		this._tileImg = L.DomUtil.create('img', 'leaflet-tile');
+		this._tileImg.galleryimg = 'no';
+
+		var tileSize = this.options.tileSize;
+		this._tileImg.style.width = tileSize + 'px';
+		this._tileImg.style.height = tileSize + 'px';
+	},
+
+	_getTile: function () {
+		if (this.options.reuseTiles && this._unusedTiles.length > 0) {
+			var tile = this._unusedTiles.pop();
+			this._resetTile(tile);
+			return tile;
+		}
+		return this._createTile();
+	},
+
+	_resetTile: function (tile) {
+		// Override if data stored on a tile needs to be cleaned up before reuse
+	},
+
+	_createTile: function () {
+		var tile = this._tileImg.cloneNode(false);
+		tile.onselectstart = tile.onmousemove = L.Util.falseFn;
+		return tile;
+	},
+
+	_loadTile: function (tile, tilePoint, zoom) {
+		tile._layer = this;
+		tile.onload = this._tileOnLoad;
+		tile.onerror = this._tileOnError;
+		tile.src = this.getTileUrl(tilePoint, zoom);
+	},
+
+	_tileOnLoad: function (e) {
+		var layer = this._layer;
+
+		this.className += ' leaflet-tile-loaded';
+
+		layer.fire('tileload', {tile: this, url: this.src});
+
+		layer._tilesToLoad--;
+		if (!layer._tilesToLoad) {
+			layer.fire('load');
+		}
+	},
+
+	_tileOnError: function (e) {
+		var layer = this._layer;
+
+		layer.fire('tileerror', {tile: this, url: this.src});
+
+		var newUrl = layer.options.errorTileUrl;
+		if (newUrl) {
+			this.src = newUrl;
+		}
+	}
+});
+
+
+L.TileLayer.WMS = L.TileLayer.extend({
+	defaultWmsParams: {
+		service: 'WMS',
+		request: 'GetMap',
+		version: '1.1.1',
+		layers: '',
+		styles: '',
+		format: 'image/jpeg',
+		transparent: false
+	},
+
+	initialize: function (/*String*/ url, /*Object*/ options) {
+		this._url = url;
+
+		this.wmsParams = L.Util.extend({}, this.defaultWmsParams);
+		this.wmsParams.width = this.wmsParams.height = this.options.tileSize;
+
+		for (var i in options) {
+			// all keys that are not TileLayer options go to WMS params
+			if (!this.options.hasOwnProperty(i)) {
+				this.wmsParams[i] = options[i];
+			}
+		}
+
+		L.Util.setOptions(this, options);
+	},
+
+	onAdd: function (map) {
+		var projectionKey = (parseFloat(this.wmsParams.version) >= 1.3 ? 'crs' : 'srs');
+		this.wmsParams[projectionKey] = map.options.crs.code;
+
+		L.TileLayer.prototype.onAdd.call(this, map);
+	},
+
+	getTileUrl: function (/*Point*/ tilePoint, /*Number*/ zoom)/*-> String*/ {
+		var tileSize = this.options.tileSize,
+			nwPoint = tilePoint.multiplyBy(tileSize),
+			sePoint = nwPoint.add(new L.Point(tileSize, tileSize)),
+			nwMap = this._map.unproject(nwPoint, this._zoom, true),
+			seMap = this._map.unproject(sePoint, this._zoom, true),
+			nw = this._map.options.crs.project(nwMap),
+			se = this._map.options.crs.project(seMap),
+			bbox = [nw.x, se.y, se.x, nw.y].join(',');
+
+		return this._url + L.Util.getParamString(this.wmsParams) + "&bbox=" + bbox;
+	}
+});
+
+
+L.TileLayer.Canvas = L.TileLayer.extend({
+	options: {
+		async: false
+	},
+
+	initialize: function (options) {
+		L.Util.setOptions(this, options);
+	},
+
+	redraw: function () {
+		for (var i in this._tiles) {
+			var tile = this._tiles[i];
+			this._redrawTile(tile);
+		}
+	},
+
+	_redrawTile: function (tile) {
+		this.drawTile(tile, tile._tilePoint, tile._zoom);
+	},
+
+	_createTileProto: function () {
+		this._canvasProto = L.DomUtil.create('canvas', 'leaflet-tile');
+
+		var tileSize = this.options.tileSize;
+		this._canvasProto.width = tileSize;
+		this._canvasProto.height = tileSize;
+	},
+
+	_createTile: function () {
+		var tile = this._canvasProto.cloneNode(false);
+		tile.onselectstart = tile.onmousemove = L.Util.falseFn;
+		return tile;
+	},
+
+	_loadTile: function (tile, tilePoint, zoom) {
+		tile._layer = this;
+		tile._tilePoint = tilePoint;
+		tile._zoom = zoom;
+
+		this.drawTile(tile, tilePoint, zoom);
+
+		if (!this.options.async) {
+			this.tileDrawn(tile);
+		}
+	},
+
+	drawTile: function (tile, tilePoint, zoom) {
+		// override with rendering code
+	},
+
+	tileDrawn: function (tile) {
+		this._tileOnLoad.call(tile);
+	}
+});
+
+
+L.ImageOverlay = L.Class.extend({
+	includes: L.Mixin.Events,
+
+	initialize: function (/*String*/ url, /*LatLngBounds*/ bounds) {
+		this._url = url;
+		this._bounds = bounds;
+	},
+
+	onAdd: function (map) {
+		this._map = map;
+
+		if (!this._image) {
+			this._initImage();
+		}
+
+		map.getPanes().overlayPane.appendChild(this._image);
+
+		map.on('viewreset', this._reset, this);
+		this._reset();
+	},
+
+	onRemove: function (map) {
+		map.getPanes().overlayPane.removeChild(this._image);
+		map.off('viewreset', this._reset, this);
+	},
+
+	_initImage: function () {
+		this._image = L.DomUtil.create('img', 'leaflet-image-layer');
+
+		this._image.style.visibility = 'hidden';
+		//TODO opacity option
+
+		//TODO createImage util method to remove duplication
+		L.Util.extend(this._image, {
+			galleryimg: 'no',
+			onselectstart: L.Util.falseFn,
+			onmousemove: L.Util.falseFn,
+			onload: L.Util.bind(this._onImageLoad, this),
+			src: this._url
+		});
+	},
+
+	_reset: function () {
+		var topLeft = this._map.latLngToLayerPoint(this._bounds.getNorthWest()),
+			bottomRight = this._map.latLngToLayerPoint(this._bounds.getSouthEast()),
+			size = bottomRight.subtract(topLeft);
+
+		L.DomUtil.setPosition(this._image, topLeft);
+
+		this._image.style.width = size.x + 'px';
+		this._image.style.height = size.y + 'px';
+	},
+
+	_onImageLoad: function () {
+		this._image.style.visibility = '';
+		this.fire('load');
+	}
+});
+
+
+L.Icon = L.Class.extend({
+	iconUrl: L.ROOT_URL + 'images/marker.png',
+	shadowUrl: L.ROOT_URL + 'images/marker-shadow.png',
+
+	iconSize: new L.Point(25, 41),
+	shadowSize: new L.Point(41, 41),
+
+	iconAnchor: new L.Point(13, 41),
+	popupAnchor: new L.Point(0, -33),
+
+	initialize: function (iconUrl) {
+		if (iconUrl) {
+			this.iconUrl = iconUrl;
+		}
+	},
+
+	createIcon: function () {
+		return this._createIcon('icon');
+	},
+
+	createShadow: function () {
+		return this._createIcon('shadow');
+	},
+
+	_createIcon: function (name) {
+		var size = this[name + 'Size'],
+			src = this[name + 'Url'];
+		if (!src && name === 'shadow') {
+			return null;
+		}
+
+		var img;
+		if (!src) {
+			img = this._createDiv();
+		}
+		else {
+			img = this._createImg(src);
+		}
+
+		img.className = 'leaflet-marker-' + name;
+
+		img.style.marginLeft = (-this.iconAnchor.x) + 'px';
+		img.style.marginTop = (-this.iconAnchor.y) + 'px';
+
+		if (size) {
+			img.style.width = size.x + 'px';
+			img.style.height = size.y + 'px';
+		}
+
+		return img;
+	},
+
+	_createImg: function (src) {
+		var el;
+		if (!L.Browser.ie6) {
+			el = document.createElement('img');
+			el.src = src;
+		} else {
+			el = document.createElement('div');
+			el.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + src + '")';
+		}
+		return el;
+	},
+
+	_createDiv: function () {
+		return document.createElement('div');
+	}
+});
+
+
+/*
+ * L.Marker is used to display clickable/draggable icons on the map.
+ */
+
+L.Marker = L.Class.extend({
+
+	includes: L.Mixin.Events,
+
+	options: {
+		icon: new L.Icon(),
+		title: '',
+		clickable: true,
+		draggable: false,
+		zIndexOffset: 0
+	},
+
+	initialize: function (latlng, options) {
+		L.Util.setOptions(this, options);
+		this._latlng = latlng;
+	},
+
+	onAdd: function (map) {
+		this._map = map;
+
+		this._initIcon();
+
+		map.on('viewreset', this._reset, this);
+		this._reset();
+	},
+
+	onRemove: function (map) {
+		this._removeIcon();
+
+		// TODO move to Marker.Popup.js
+		if (this.closePopup) {
+			this.closePopup();
+		}
+
+		this._map = null;
+
+		map.off('viewreset', this._reset, this);
+	},
+
+	getLatLng: function () {
+		return this._latlng;
+	},
+
+	setLatLng: function (latlng) {
+		this._latlng = latlng;
+		if (this._icon) {
+			this._reset();
+
+			if (this._popup) {
+				this._popup.setLatLng(this._latlng);
+			}
+		}
+	},
+
+	setIcon: function (icon) {
+		if (this._map) {
+			this._removeIcon();
+		}
+
+		this.options.icon = icon;
+
+		if (this._map) {
+			this._initIcon();
+			this._reset();
+		}
+	},
+
+	_initIcon: function () {
+		if (!this._icon) {
+			this._icon = this.options.icon.createIcon();
+
+			if (this.options.title) {
+				this._icon.title = this.options.title;
+			}
+
+			this._initInteraction();
+		}
+		if (!this._shadow) {
+			this._shadow = this.options.icon.createShadow();
+		}
+
+		this._map._panes.markerPane.appendChild(this._icon);
+		if (this._shadow) {
+			this._map._panes.shadowPane.appendChild(this._shadow);
+		}
+	},
+
+	_removeIcon: function () {
+		this._map._panes.markerPane.removeChild(this._icon);
+		if (this._shadow) {
+			this._map._panes.shadowPane.removeChild(this._shadow);
+		}
+		this._icon = this._shadow = null;
+	},
+
+	_reset: function () {
+		var pos = this._map.latLngToLayerPoint(this._latlng).round();
+
+		L.DomUtil.setPosition(this._icon, pos);
+		if (this._shadow) {
+			L.DomUtil.setPosition(this._shadow, pos);
+		}
+
+		this._icon.style.zIndex = pos.y + this.options.zIndexOffset;
+	},
+
+	_initInteraction: function () {
+		if (this.options.clickable) {
+			this._icon.className += ' leaflet-clickable';
+
+			L.DomEvent.addListener(this._icon, 'click', this._onMouseClick, this);
+
+			var events = ['dblclick', 'mousedown', 'mouseover', 'mouseout'];
+			for (var i = 0; i < events.length; i++) {
+				L.DomEvent.addListener(this._icon, events[i], this._fireMouseEvent, this);
+			}
+		}
+
+		if (L.Handler.MarkerDrag) {
+			this.dragging = new L.Handler.MarkerDrag(this);
+
+			if (this.options.draggable) {
+				this.dragging.enable();
+			}
+		}
+	},
+
+	_onMouseClick: function (e) {
+		L.DomEvent.stopPropagation(e);
+		if (this.dragging && this.dragging.moved()) { return; }
+		this.fire(e.type);
+	},
+
+	_fireMouseEvent: function (e) {
+		this.fire(e.type);
+		L.DomEvent.stopPropagation(e);
+	}
+});
+
+
+
+L.Popup = L.Class.extend({
+	includes: L.Mixin.Events,
+
+	options: {
+		minWidth: 50,
+		maxWidth: 300,
+		autoPan: true,
+		closeButton: true,
+		offset: new L.Point(0, 2),
+		autoPanPadding: new L.Point(5, 5),
+		className: ''
+	},
+
+	initialize: function (options, source) {
+		L.Util.setOptions(this, options);
+
+		this._source = source;
+	},
+
+	onAdd: function (map) {
+		this._map = map;
+		if (!this._container) {
+			this._initLayout();
+		}
+		this._updateContent();
+
+		this._container.style.opacity = '0';
+
+		this._map._panes.popupPane.appendChild(this._container);
+		this._map.on('viewreset', this._updatePosition, this);
+
+		if (this._map.options.closePopupOnClick) {
+			this._map.on('preclick', this._close, this);
+		}
+
+		this._update();
+
+		this._container.style.opacity = '1'; //TODO fix ugly opacity hack
+
+		this._opened = true;
+	},
+
+	onRemove: function (map) {
+		map._panes.popupPane.removeChild(this._container);
+		L.Util.falseFn(this._container.offsetWidth);
+
+		map.off('viewreset', this._updatePosition, this);
+		map.off('click', this._close, this);
+
+		this._container.style.opacity = '0';
+
+		this._opened = false;
+	},
+
+	setLatLng: function (latlng) {
+		this._latlng = latlng;
+		if (this._opened) {
+			this._update();
+		}
+		return this;
+	},
+
+	setContent: function (content) {
+		this._content = content;
+		if (this._opened) {
+			this._update();
+		}
+		return this;
+	},
+
+	_close: function () {
+		if (this._opened) {
+			this._map.closePopup();
+		}
+	},
+
+	_initLayout: function () {
+		this._container = L.DomUtil.create('div', 'leaflet-popup ' + this.options.className);
+
+		if (this.options.closeButton) {
+			this._closeButton = L.DomUtil.create('a', 'leaflet-popup-close-button', this._container);
+			this._closeButton.href = '#close';
+			L.DomEvent.addListener(this._closeButton, 'click', this._onCloseButtonClick, this);
+		}
+
+		this._wrapper = L.DomUtil.create('div', 'leaflet-popup-content-wrapper', this._container);
+		L.DomEvent.disableClickPropagation(this._wrapper);
+		this._contentNode = L.DomUtil.create('div', 'leaflet-popup-content', this._wrapper);
+
+		this._tipContainer = L.DomUtil.create('div', 'leaflet-popup-tip-container', this._container);
+		this._tip = L.DomUtil.create('div', 'leaflet-popup-tip', this._tipContainer);
+	},
+
+	_update: function () {
+		this._container.style.visibility = 'hidden';
+
+		this._updateContent();
+		this._updateLayout();
+		this._updatePosition();
+
+		this._container.style.visibility = '';
+
+		this._adjustPan();
+	},
+
+	_updateContent: function () {
+		if (!this._content) {
+			return;
+		}
+
+		if (typeof this._content === 'string') {
+			this._contentNode.innerHTML = this._content;
+		} else {
+			this._contentNode.innerHTML = '';
+			this._contentNode.appendChild(this._content);
+		}
+	},
+
+	_updateLayout: function () {
+		this._container.style.width = '';
+		this._container.style.whiteSpace = 'nowrap';
+
+		var width = this._container.offsetWidth;
+
+		this._container.style.width = (width > this.options.maxWidth ?
+				this.options.maxWidth : (width < this.options.minWidth ? this.options.minWidth : width)) + 'px';
+		this._container.style.whiteSpace = '';
+
+		this._containerWidth = this._container.offsetWidth;
+	},
+
+	_updatePosition: function () {
+		var pos = this._map.latLngToLayerPoint(this._latlng);
+
+		this._containerBottom = -pos.y - this.options.offset.y;
+		this._containerLeft = pos.x - Math.round(this._containerWidth / 2) + this.options.offset.x;
+
+		this._container.style.bottom = this._containerBottom + 'px';
+		this._container.style.left = this._containerLeft + 'px';
+	},
+
+	_adjustPan: function () {
+		if (!this.options.autoPan) {
+			return;
+		}
+
+		var containerHeight = this._container.offsetHeight,
+			layerPos = new L.Point(
+				this._containerLeft,
+				-containerHeight - this._containerBottom),
+			containerPos = this._map.layerPointToContainerPoint(layerPos),
+			adjustOffset = new L.Point(0, 0),
+			padding = this.options.autoPanPadding,
+			size = this._map.getSize();
+
+		if (containerPos.x < 0) {
+			adjustOffset.x = containerPos.x - padding.x;
+		}
+		if (containerPos.x + this._containerWidth > size.x) {
+			adjustOffset.x = containerPos.x + this._containerWidth - size.x + padding.x;
+		}
+		if (containerPos.y < 0) {
+			adjustOffset.y = containerPos.y - padding.y;
+		}
+		if (containerPos.y + containerHeight > size.y) {
+			adjustOffset.y = containerPos.y + containerHeight - size.y + padding.y;
+		}
+
+		if (adjustOffset.x || adjustOffset.y) {
+			this._map.panBy(adjustOffset);
+		}
+	},
+
+	_onCloseButtonClick: function (e) {
+		this._close();
+		L.DomEvent.stop(e);
+	}
+});
+
+
+/*
+ * Popup extension to L.Marker, adding openPopup & bindPopup methods.
+ */
+
+L.Marker.include({
+	openPopup: function () {
+		this._popup.setLatLng(this._latlng);
+		if (this._map) {
+			this._map.openPopup(this._popup);
+		}
+
+		return this;
+	},
+
+	closePopup: function () {
+		if (this._popup) {
+			this._popup._close();
+		}
+		return this;
+	},
+
+	bindPopup: function (content, options) {
+		options = L.Util.extend({offset: this.options.icon.popupAnchor}, options);
+
+		if (!this._popup) {
+			this.on('click', this.openPopup, this);
+		}
+
+		this._popup = new L.Popup(options, this);
+		this._popup.setContent(content);
+
+		return this;
+	},
+
+	unbindPopup: function () {
+		if (this._popup) {
+			this._popup = null;
+			this.off('click', this.openPopup);
+		}
+		return this;
+	}
+});
+
+
+
+L.Map.include({
+	openPopup: function (popup) {
+		this.closePopup();
+		this._popup = popup;
+		this.addLayer(popup);
+		this.fire('popupopen', { popup: this._popup });
+	
+		return this;
+	},
+
+	closePopup: function () {
+		if (this._popup) {
+			this.removeLayer(this._popup);
+			this.fire('popupclose', { popup: this._popup });
+			this._popup = null;
+		}
+		return this;
+	}
+});
+
+
+/*
+ * L.LayerGroup is a class to combine several layers so you can manipulate the group (e.g. add/remove it) as one layer.
+ */
+
+L.LayerGroup = L.Class.extend({
+	initialize: function (layers) {
+		this._layers = {};
+
+		if (layers) {
+			for (var i = 0, len = layers.length; i < len; i++) {
+				this.addLayer(layers[i]);
+			}
+		}
+	},
+
+	addLayer: function (layer) {
+		var id = L.Util.stamp(layer);
+		this._layers[id] = layer;
+
+		if (this._map) {
+			this._map.addLayer(layer);
+		}
+		return this;
+	},
+
+	removeLayer: function (layer) {
+		var id = L.Util.stamp(layer);
+		delete this._layers[id];
+
+		if (this._map) {
+			this._map.removeLayer(layer);
+		}
+		return this;
+	},
+
+	clearLayers: function () {
+		this._iterateLayers(this.removeLayer, this);
+		return this;
+	},
+
+	invoke: function (methodName) {
+		var args = Array.prototype.slice.call(arguments, 1),
+			i, layer;
+
+		for (i in this._layers) {
+			if (this._layers.hasOwnProperty(i)) {
+				layer = this._layers[i];
+
+				if (layer[methodName]) {
+					layer[methodName].apply(layer, args);
+				}
+			}
+		}
+		return this;
+	},
+
+	onAdd: function (map) {
+		this._map = map;
+		this._iterateLayers(map.addLayer, map);
+	},
+
+	onRemove: function (map) {
+		this._iterateLayers(map.removeLayer, map);
+		delete this._map;
+	},
+
+	_iterateLayers: function (method, context) {
+		for (var i in this._layers) {
+			if (this._layers.hasOwnProperty(i)) {
+				method.call(context, this._layers[i]);
+			}
+		}
+	}
+});
+
+
+/*
+ * L.FeatureGroup extends L.LayerGroup by introducing mouse events and bindPopup method shared between a group of layers.
+ */
+
+L.FeatureGroup = L.LayerGroup.extend({
+	includes: L.Mixin.Events,
+
+	addLayer: function (layer) {
+		this._initEvents(layer);
+		L.LayerGroup.prototype.addLayer.call(this, layer);
+
+		if (this._popupContent && layer.bindPopup) {
+			layer.bindPopup(this._popupContent);
+		}
+	},
+
+	bindPopup: function (content) {
+		this._popupContent = content;
+
+		return this.invoke('bindPopup', content);
+	},
+
+	setStyle: function (style) {
+		return this.invoke('setStyle', style);
+	},
+
+	_events: ['click', 'dblclick', 'mouseover', 'mouseout'],
+
+	_initEvents: function (layer) {
+		for (var i = 0, len = this._events.length; i < len; i++) {
+			layer.on(this._events[i], this._propagateEvent, this);
+		}
+	},
+
+	_propagateEvent: function (e) {
+		e.layer = e.target;
+		e.target = this;
+		this.fire(e.type, e);
+	}
+});
+
+
+/*
+ * L.Path is a base class for rendering vector paths on a map. It's inherited by Polyline, Circle, etc.
+ */
+
+L.Path = L.Class.extend({
+	includes: [L.Mixin.Events],
+
+	statics: {
+		// how much to extend the clip area around the map view
+		// (relative to its size, e.g. 0.5 is half the screen in each direction)
+		CLIP_PADDING: 0.5
+	},
+
+	options: {
+		stroke: true,
+		color: '#0033ff',
+		weight: 5,
+		opacity: 0.5,
+
+		fill: false,
+		fillColor: null, //same as color by default
+		fillOpacity: 0.2,
+
+		clickable: true,
+
+		// TODO remove this, as all paths now update on moveend
+		updateOnMoveEnd: true
+	},
+
+	initialize: function (options) {
+		L.Util.setOptions(this, options);
+	},
+
+	onAdd: function (map) {
+		this._map = map;
+
+		this._initElements();
+		this._initEvents();
+		this.projectLatlngs();
+		this._updatePath();
+
+		map.on('viewreset', this.projectLatlngs, this);
+
+		this._updateTrigger = this.options.updateOnMoveEnd ? 'moveend' : 'viewreset';
+		map.on(this._updateTrigger, this._updatePath, this);
+	},
+
+	onRemove: function (map) {
+		this._map = null;
+
+		map._pathRoot.removeChild(this._container);
+
+		map.off('viewreset', this.projectLatlngs, this);
+		map.off(this._updateTrigger, this._updatePath, this);
+	},
+
+	projectLatlngs: function () {
+		// do all projection stuff here
+	},
+
+	setStyle: function (style) {
+		L.Util.setOptions(this, style);
+		if (this._container) {
+			this._updateStyle();
+		}
+		return this;
+	},
+
+	_redraw: function () {
+		if (this._map) {
+			this.projectLatlngs();
+			this._updatePath();
+		}
+	}
+});
+
+L.Map.include({
+	_updatePathViewport: function () {
+		var p = L.Path.CLIP_PADDING,
+			size = this.getSize(),
+			//TODO this._map._getMapPanePos()
+			panePos = L.DomUtil.getPosition(this._mapPane),
+			min = panePos.multiplyBy(-1).subtract(size.multiplyBy(p)),
+			max = min.add(size.multiplyBy(1 + p * 2));
+
+		this._pathViewport = new L.Bounds(min, max);
+	}
+});
+
+
+L.Path.SVG_NS = 'http://www.w3.org/2000/svg';
+
+L.Browser.svg = !!(document.createElementNS && document.createElementNS(L.Path.SVG_NS, 'svg').createSVGRect);
+
+L.Path = L.Path.extend({
+	statics: {
+		SVG: L.Browser.svg,
+		_createElement: function (name) {
+			return document.createElementNS(L.Path.SVG_NS, name);
+		}
+	},
+
+	getPathString: function () {
+		// form path string here
+	},
+
+	_initElements: function () {
+		this._map._initPathRoot();
+		this._initPath();
+		this._initStyle();
+	},
+
+	_initPath: function () {
+		this._container = L.Path._createElement('g');
+
+		this._path = L.Path._createElement('path');
+		this._container.appendChild(this._path);
+
+		this._map._pathRoot.appendChild(this._container);
+	},
+
+	_initStyle: function () {
+		if (this.options.stroke) {
+			this._path.setAttribute('stroke-linejoin', 'round');
+			this._path.setAttribute('stroke-linecap', 'round');
+		}
+		if (this.options.fill) {
+			this._path.setAttribute('fill-rule', 'evenodd');
+		} else {
+			this._path.setAttribute('fill', 'none');
+		}
+		this._updateStyle();
+	},
+
+	_updateStyle: function () {
+		if (this.options.stroke) {
+			this._path.setAttribute('stroke', this.options.color);
+			this._path.setAttribute('stroke-opacity', this.options.opacity);
+			this._path.setAttribute('stroke-width', this.options.weight);
+		}
+		if (this.options.fill) {
+			this._path.setAttribute('fill', this.options.fillColor || this.options.color);
+			this._path.setAttribute('fill-opacity', this.options.fillOpacity);
+		}
+	},
+
+	_updatePath: function () {
+		var str = this.getPathString();
+		if (!str) {
+			// fix webkit empty string parsing bug
+			str = 'M0 0';
+		}
+		this._path.setAttribute('d', str);
+	},
+
+	// TODO remove duplication with L.Map
+	_initEvents: function () {
+		if (this.options.clickable) {
+			if (!L.Browser.vml) {
+				this._path.setAttribute('class', 'leaflet-clickable');
+			}
+
+			L.DomEvent.addListener(this._container, 'click', this._onMouseClick, this);
+
+			var events = ['dblclick', 'mousedown', 'mouseover', 'mouseout', 'mousemove'];
+			for (var i = 0; i < events.length; i++) {
+				L.DomEvent.addListener(this._container, events[i], this._fireMouseEvent, this);
+			}
+		}
+	},
+
+	_onMouseClick: function (e) {
+		if (this._map.dragging && this._map.dragging.moved()) {
+			return;
+		}
+		this._fireMouseEvent(e);
+	},
+
+	_fireMouseEvent: function (e) {
+		if (!this.hasEventListeners(e.type)) {
+			return;
+		}
+		this.fire(e.type, {
+			latlng: this._map.mouseEventToLatLng(e),
+			layerPoint: this._map.mouseEventToLayerPoint(e)
+		});
+		L.DomEvent.stopPropagation(e);
+	}
+});
+
+L.Map.include({
+	_initPathRoot: function () {
+		if (!this._pathRoot) {
+			this._pathRoot = L.Path._createElement('svg');
+			this._panes.overlayPane.appendChild(this._pathRoot);
+
+			this.on('moveend', this._updateSvgViewport);
+			this._updateSvgViewport();
+		}
+	},
+
+	_updateSvgViewport: function () {
+		this._updatePathViewport();
+
+		var vp = this._pathViewport,
+			min = vp.min,
+			max = vp.max,
+			width = max.x - min.x,
+			height = max.y - min.y,
+			root = this._pathRoot,
+			pane = this._panes.overlayPane;
+
+		// Hack to make flicker on drag end on mobile webkit less irritating
+		// Unfortunately I haven't found a good workaround for this yet
+		if (L.Browser.webkit) {
+			pane.removeChild(root);
+		}
+
+		L.DomUtil.setPosition(root, min);
+		root.setAttribute('width', width);
+		root.setAttribute('height', height);
+		root.setAttribute('viewBox', [min.x, min.y, width, height].join(' '));
+
+		if (L.Browser.webkit) {
+			pane.appendChild(root);
+		}
+	}
+});
+
+
+/*
+ * Popup extension to L.Path (polylines, polygons, circles), adding bindPopup method.
+ */
+
+L.Path.include({
+	bindPopup: function (content, options) {
+		if (!this._popup || this._popup.options !== options) {
+			this._popup = new L.Popup(options, this);
+		}
+		this._popup.setContent(content);
+
+		if (!this._openPopupAdded) {
+			this.on('click', this._openPopup, this);
+			this._openPopupAdded = true;
+		}
+
+		return this;
+	},
+
+	_openPopup: function (e) {
+		this._popup.setLatLng(e.latlng);
+		this._map.openPopup(this._popup);
+	}
+});
+
+
+/*
+ * Vector rendering for IE6-8 through VML.
+ * Thanks to Dmitry Baranovsky and his Raphael library for inspiration!
+ */
+
+L.Browser.vml = (function () {
+	var d = document.createElement('div'), s;
+	d.innerHTML = '<v:shape adj="1"/>';
+	s = d.firstChild;
+	s.style.behavior = 'url(#default#VML)';
+
+	return (s && (typeof s.adj === 'object'));
+}());
+
+L.Path = L.Browser.svg || !L.Browser.vml ? L.Path : L.Path.extend({
+	statics: {
+		VML: true,
+		CLIP_PADDING: 0.02,
+		_createElement: (function () {
+			try {
+				document.namespaces.add('lvml', 'urn:schemas-microsoft-com:vml');
+				return function (name) {
+					return document.createElement('<lvml:' + name + ' class="lvml">');
+				};
+			} catch (e) {
+				return function (name) {
+					return document.createElement('<' + name + ' xmlns="urn:schemas-microsoft.com:vml" class="lvml">');
+				};
+			}
+		}())
+	},
+
+	_initPath: function () {
+		this._container = L.Path._createElement('shape');
+		this._container.className += ' leaflet-vml-shape' +
+				(this.options.clickable ? ' leaflet-clickable' : '');
+		this._container.coordsize = '1 1';
+
+		this._path = L.Path._createElement('path');
+		this._container.appendChild(this._path);
+
+		this._map._pathRoot.appendChild(this._container);
+	},
+
+	_initStyle: function () {
+		if (this.options.stroke) {
+			this._stroke = L.Path._createElement('stroke');
+			this._stroke.endcap = 'round';
+			this._container.appendChild(this._stroke);
+		} else {
+			this._container.stroked = false;
+		}
+		if (this.options.fill) {
+			this._container.filled = true;
+			this._fill = L.Path._createElement('fill');
+			this._container.appendChild(this._fill);
+		} else {
+			this._container.filled = false;
+		}
+		this._updateStyle();
+	},
+
+	_updateStyle: function () {
+		if (this.options.stroke) {
+			this._stroke.weight = this.options.weight + 'px';
+			this._stroke.color = this.options.color;
+			this._stroke.opacity = this.options.opacity;
+		}
+		if (this.options.fill) {
+			this._fill.color = this.options.fillColor || this.options.color;
+			this._fill.opacity = this.options.fillOpacity;
+		}
+	},
+
+	_updatePath: function () {
+		this._container.style.display = 'none';
+		this._path.v = this.getPathString() + ' '; // the space fixes IE empty path string bug
+		this._container.style.display = '';
+	}
+});
+
+L.Map.include(L.Browser.svg || !L.Browser.vml ? {} : {
+	_initPathRoot: function () {
+		if (!this._pathRoot) {
+			this._pathRoot = document.createElement('div');
+			this._pathRoot.className = 'leaflet-vml-container';
+			this._panes.overlayPane.appendChild(this._pathRoot);
+
+			this.on('moveend', this._updatePathViewport);
+			this._updatePathViewport();
+		}
+	}
+});
+
+
+/*
+ * L.LineUtil contains different utility functions for line segments
+ * and polylines (clipping, simplification, distances, etc.)
+ */
+
+L.LineUtil = {
+
+	// Simplify polyline with vertex reduction and Douglas-Peucker simplification.
+	// Improves rendering performance dramatically by lessening the number of points to draw.
+
+	simplify: function (/*Point[]*/ points, /*Number*/ tolerance) {
+		if (!tolerance || !points.length) {
+			return points.slice();
+		}
+
+		var sqTolerance = tolerance * tolerance;
+
+		// stage 1: vertex reduction
+		points = this._reducePoints(points, sqTolerance);
+
+		// stage 2: Douglas-Peucker simplification
+		points = this._simplifyDP(points, sqTolerance);
+
+		return points;
+	},
+
+	// distance from a point to a segment between two points
+	pointToSegmentDistance:  function (/*Point*/ p, /*Point*/ p1, /*Point*/ p2) {
+		return Math.sqrt(this._sqClosestPointOnSegment(p, p1, p2, true));
+	},
+
+	closestPointOnSegment: function (/*Point*/ p, /*Point*/ p1, /*Point*/ p2) {
+		return this._sqClosestPointOnSegment(p, p1, p2);
+	},
+
+	// Douglas-Peucker simplification, see http://en.wikipedia.org/wiki/Douglas-Peucker_algorithm
+	_simplifyDP: function (points, sqTolerance) {
+
+		var len = points.length,
+			ArrayConstructor = typeof Uint8Array !== 'undefined' ? Uint8Array : Array,
+			markers = new ArrayConstructor(len);
+
+		markers[0] = markers[len - 1] = 1;
+
+		this._simplifyDPStep(points, markers, sqTolerance, 0, len - 1);
+
+		var i,
+			newPoints = [];
+
+		for (i = 0; i < len; i++) {
+			if (markers[i]) {
+				newPoints.push(points[i]);
+			}
+		}
+
+		return newPoints;
+	},
+
+	_simplifyDPStep: function (points, markers, sqTolerance, first, last) {
+
+		var maxSqDist = 0,
+			index, i, sqDist;
+
+		for (i = first + 1; i <= last - 1; i++) {
+			sqDist = this._sqClosestPointOnSegment(points[i], points[first], points[last], true);
+
+			if (sqDist > maxSqDist) {
+				index = i;
+				maxSqDist = sqDist;
+			}
+		}
+
+		if (maxSqDist > sqTolerance) {
+			markers[index] = 1;
+
+			this._simplifyDPStep(points, markers, sqTolerance, first, index);
+			this._simplifyDPStep(points, markers, sqTolerance, index, last);
+		}
+	},
+
+	// reduce points that are too close to each other to a single point
+	_reducePoints: function (points, sqTolerance) {
+		var reducedPoints = [points[0]];
+
+		for (var i = 1, prev = 0, len = points.length; i < len; i++) {
+			if (this._sqDist(points[i], points[prev]) > sqTolerance) {
+				reducedPoints.push(points[i]);
+				prev = i;
+			}
+		}
+		if (prev < len - 1) {
+			reducedPoints.push(points[len - 1]);
+		}
+		return reducedPoints;
+	},
+
+	/*jshint bitwise:false */ // temporarily allow bitwise oprations
+
+	// Cohen-Sutherland line clipping algorithm.
+	// Used to avoid rendering parts of a polyline that are not currently visible.
+
+	clipSegment: function (a, b, bounds, useLastCode) {
+		var min = bounds.min,
+			max = bounds.max;
+
+		var codeA = useLastCode ? this._lastCode : this._getBitCode(a, bounds),
+			codeB = this._getBitCode(b, bounds);
+
+		// save 2nd code to avoid calculating it on the next segment
+		this._lastCode = codeB;
+
+		while (true) {
+			// if a,b is inside the clip window (trivial accept)
+			if (!(codeA | codeB)) {
+				return [a, b];
+			// if a,b is outside the clip window (trivial reject)
+			} else if (codeA & codeB) {
+				return false;
+			// other cases
+			} else {
+				var codeOut = codeA || codeB,
+					p = this._getEdgeIntersection(a, b, codeOut, bounds),
+					newCode = this._getBitCode(p, bounds);
+
+				if (codeOut === codeA) {
+					a = p;
+					codeA = newCode;
+				} else {
+					b = p;
+					codeB = newCode;
+				}
+			}
+		}
+	},
+
+	_getEdgeIntersection: function (a, b, code, bounds) {
+		var dx = b.x - a.x,
+			dy = b.y - a.y,
+			min = bounds.min,
+			max = bounds.max;
+
+		if (code & 8) { // top
+			return new L.Point(a.x + dx * (max.y - a.y) / dy, max.y);
+		} else if (code & 4) { // bottom
+			return new L.Point(a.x + dx * (min.y - a.y) / dy, min.y);
+		} else if (code & 2) { // right
+			return new L.Point(max.x, a.y + dy * (max.x - a.x) / dx);
+		} else if (code & 1) { // left
+			return new L.Point(min.x, a.y + dy * (min.x - a.x) / dx);
+		}
+	},
+
+	_getBitCode: function (/*Point*/ p, bounds) {
+		var code = 0;
+
+		if (p.x < bounds.min.x) { // left
+			code |= 1;
+		} else if (p.x > bounds.max.x) { // right
+			code |= 2;
+		}
+		if (p.y < bounds.min.y) { // bottom
+			code |= 4;
+		} else if (p.y > bounds.max.y) { // top
+			code |= 8;
+		}
+
+		return code;
+	},
+
+	/*jshint bitwise:true */
+
+	// square distance (to avoid unnecessary Math.sqrt calls)
+	_sqDist: function (p1, p2) {
+		var dx = p2.x - p1.x,
+			dy = p2.y - p1.y;
+		return dx * dx + dy * dy;
+	},
+
+	// return closest point on segment or distance to that point
+	_sqClosestPointOnSegment: function (p, p1, p2, sqDist) {
+		var x = p1.x,
+			y = p1.y,
+			dx = p2.x - x,
+			dy = p2.y - y,
+			dot = dx * dx + dy * dy,
+			t;
+
+		if (dot > 0) {
+			t = ((p.x - x) * dx + (p.y - y) * dy) / dot;
+
+			if (t > 1) {
+				x = p2.x;
+				y = p2.y;
+			} else if (t > 0) {
+				x += dx * t;
+				y += dy * t;
+			}
+		}
+
+		dx = p.x - x;
+		dy = p.y - y;
+
+		return sqDist ? dx * dx + dy * dy : new L.Point(x, y);
+	}
+};
+
+
+
+L.Polyline = L.Path.extend({
+	initialize: function (latlngs, options) {
+		L.Path.prototype.initialize.call(this, options);
+		this._latlngs = latlngs;
+	},
+
+	options: {
+		// how much to simplify the polyline on each zoom level
+		// more = better performance and smoother look, less = more accurate
+		smoothFactor: 1.0,
+		noClip: false,
+
+		updateOnMoveEnd: true
+	},
+
+	projectLatlngs: function () {
+		this._originalPoints = [];
+
+		for (var i = 0, len = this._latlngs.length; i < len; i++) {
+			this._originalPoints[i] = this._map.latLngToLayerPoint(this._latlngs[i]);
+		}
+	},
+
+	getPathString: function () {
+		for (var i = 0, len = this._parts.length, str = ''; i < len; i++) {
+			str += this._getPathPartStr(this._parts[i]);
+		}
+		return str;
+	},
+
+	getLatLngs: function () {
+		return this._latlngs;
+	},
+
+	setLatLngs: function (latlngs) {
+		this._latlngs = latlngs;
+		this._redraw();
+		return this;
+	},
+
+	addLatLng: function (latlng) {
+		this._latlngs.push(latlng);
+		this._redraw();
+		return this;
+	},
+
+	spliceLatLngs: function (index, howMany) {
+		var removed = [].splice.apply(this._latlngs, arguments);
+		this._redraw();
+		return removed;
+	},
+
+	closestLayerPoint: function (p) {
+		var minDistance = Infinity, parts = this._parts, p1, p2, minPoint = null;
+
+		for (var j = 0, jLen = parts.length; j < jLen; j++) {
+			var points = parts[j];
+			for (var i = 1, len = points.length; i < len; i++) {
+				p1 = points[i - 1];
+				p2 = points[i];
+				var point = L.LineUtil._sqClosestPointOnSegment(p, p1, p2);
+				if (point._sqDist < minDistance) {
+					minDistance = point._sqDist;
+					minPoint = point;
+				}
+			}
+		}
+		if (minPoint) {
+			minPoint.distance = Math.sqrt(minDistance);
+		}
+		return minPoint;
+	},
+
+	getBounds: function () {
+		var b = new L.LatLngBounds();
+		var latLngs = this.getLatLngs();
+		for (var i = 0, len = latLngs.length; i < len; i++) {
+			b.extend(latLngs[i]);
+		}
+		return b;
+	},
+
+	_getPathPartStr: function (points) {
+		var round = L.Path.VML;
+
+		for (var j = 0, len2 = points.length, str = '', p; j < len2; j++) {
+			p = points[j];
+			if (round) {
+				p._round();
+			}
+			str += (j ? 'L' : 'M') + p.x + ' ' + p.y;
+		}
+		return str;
+	},
+
+	_clipPoints: function () {
+		var points = this._originalPoints,
+			len = points.length,
+			i, k, segment;
+
+		if (this.options.noClip) {
+			this._parts = [points];
+			return;
+		}
+
+		this._parts = [];
+
+		var parts = this._parts,
+			vp = this._map._pathViewport,
+			lu = L.LineUtil;
+
+		for (i = 0, k = 0; i < len - 1; i++) {
+			segment = lu.clipSegment(points[i], points[i + 1], vp, i);
+			if (!segment) {
+				continue;
+			}
+
+			parts[k] = parts[k] || [];
+			parts[k].push(segment[0]);
+
+			// if segment goes out of screen, or it's the last one, it's the end of the line part
+			if ((segment[1] !== points[i + 1]) || (i === len - 2)) {
+				parts[k].push(segment[1]);
+				k++;
+			}
+		}
+	},
+
+	// simplify each clipped part of the polyline
+	_simplifyPoints: function () {
+		var parts = this._parts,
+			lu = L.LineUtil;
+
+		for (var i = 0, len = parts.length; i < len; i++) {
+			parts[i] = lu.simplify(parts[i], this.options.smoothFactor);
+		}
+	},
+
+	_updatePath: function () {
+		this._clipPoints();
+		this._simplifyPoints();
+
+		L.Path.prototype._updatePath.call(this);
+	}
+});
+
+
+/*
+ * L.PolyUtil contains utilify functions for polygons (clipping, etc.).
+ */
+
+/*jshint bitwise:false */ // allow bitwise oprations here
+
+L.PolyUtil = {};
+
+/*
+ * Sutherland-Hodgeman polygon clipping algorithm.
+ * Used to avoid rendering parts of a polygon that are not currently visible.
+ */
+L.PolyUtil.clipPolygon = function (points, bounds) {
+	var min = bounds.min,
+		max = bounds.max,
+		clippedPoints,
+		edges = [1, 4, 2, 8],
+		i, j, k,
+		a, b,
+		len, edge, p,
+		lu = L.LineUtil;
+
+	for (i = 0, len = points.length; i < len; i++) {
+		points[i]._code = lu._getBitCode(points[i], bounds);
+	}
+
+	// for each edge (left, bottom, right, top)
+	for (k = 0; k < 4; k++) {
+		edge = edges[k];
+		clippedPoints = [];
+
+		for (i = 0, len = points.length, j = len - 1; i < len; j = i++) {
+			a = points[i];
+			b = points[j];
+
+			// if a is inside the clip window
+			if (!(a._code & edge)) {
+				// if b is outside the clip window (a->b goes out of screen)
+				if (b._code & edge) {
+					p = lu._getEdgeIntersection(b, a, edge, bounds);
+					p._code = lu._getBitCode(p, bounds);
+					clippedPoints.push(p);
+				}
+				clippedPoints.push(a);
+
+			// else if b is inside the clip window (a->b enters the screen)
+			} else if (!(b._code & edge)) {
+				p = lu._getEdgeIntersection(b, a, edge, bounds);
+				p._code = lu._getBitCode(p, bounds);
+				clippedPoints.push(p);
+			}
+		}
+		points = clippedPoints;
+	}
+
+	return points;
+};
+
+/*jshint bitwise:true */
+
+
+/*
+ * L.Polygon is used to display polygons on a map.
+ */
+
+L.Polygon = L.Polyline.extend({
+	options: {
+		fill: true
+	},
+
+	initialize: function (latlngs, options) {
+		L.Polyline.prototype.initialize.call(this, latlngs, options);
+
+		if (latlngs && (latlngs[0] instanceof Array)) {
+			this._latlngs = latlngs[0];
+			this._holes = latlngs.slice(1);
+		}
+	},
+
+	projectLatlngs: function () {
+		L.Polyline.prototype.projectLatlngs.call(this);
+
+		// project polygon holes points
+		// TODO move this logic to Polyline to get rid of duplication
+		this._holePoints = [];
+
+		if (!this._holes) {
+			return;
+		}
+
+		for (var i = 0, len = this._holes.length, hole; i < len; i++) {
+			this._holePoints[i] = [];
+
+			for (var j = 0, len2 = this._holes[i].length; j < len2; j++) {
+				this._holePoints[i][j] = this._map.latLngToLayerPoint(this._holes[i][j]);
+			}
+		}
+	},
+
+	_clipPoints: function () {
+		var points = this._originalPoints,
+			newParts = [];
+
+		this._parts = [points].concat(this._holePoints);
+
+		if (this.options.noClip) {
+			return;
+		}
+
+		for (var i = 0, len = this._parts.length; i < len; i++) {
+			var clipped = L.PolyUtil.clipPolygon(this._parts[i], this._map._pathViewport);
+			if (!clipped.length) {
+				continue;
+			}
+			newParts.push(clipped);
+		}
+
+		this._parts = newParts;
+	},
+
+	_getPathPartStr: function (points) {
+		var str = L.Polyline.prototype._getPathPartStr.call(this, points);
+		return str + (L.Browser.svg ? 'z' : 'x');
+	}
+});
+
+
+/*
+ * Contains L.MultiPolyline and L.MultiPolygon layers.
+ */
+
+(function () {
+	function createMulti(Klass) {
+		return L.FeatureGroup.extend({
+			initialize: function (latlngs, options) {
+				this._layers = {};
+				this._options = options;
+				this.setLatLngs(latlngs);
+			},
+
+			setLatLngs: function (latlngs) {
+				var i = 0, len = latlngs.length;
+
+				this._iterateLayers(function (layer) {
+					if (i < len) {
+						layer.setLatLngs(latlngs[i++]);
+					} else {
+						this.removeLayer(layer);
+					}
+				}, this);
+
+				while (i < len) {
+					this.addLayer(new Klass(latlngs[i++], this._options));
+				}
+			}
+		});
+	}
+
+	L.MultiPolyline = createMulti(L.Polyline);
+	L.MultiPolygon = createMulti(L.Polygon);
+}());
+
+
+/*
+ * L.Circle is a circle overlay (with a certain radius in meters).
+ */
+
+L.Circle = L.Path.extend({
+	initialize: function (latlng, radius, options) {
+		L.Path.prototype.initialize.call(this, options);
+
+		this._latlng = latlng;
+		this._mRadius = radius;
+	},
+
+	options: {
+		fill: true
+	},
+
+	setLatLng: function (latlng) {
+		this._latlng = latlng;
+		this._redraw();
+		return this;
+	},
+
+	setRadius: function (radius) {
+		this._mRadius = radius;
+		this._redraw();
+		return this;
+	},
+
+	projectLatlngs: function () {
+		var equatorLength = 40075017,
+			hLength = equatorLength * Math.cos(L.LatLng.DEG_TO_RAD * this._latlng.lat);
+
+		var lngSpan = (this._mRadius / hLength) * 360,
+			latlng2 = new L.LatLng(this._latlng.lat, this._latlng.lng - lngSpan, true),
+			point2 = this._map.latLngToLayerPoint(latlng2);
+
+		this._point = this._map.latLngToLayerPoint(this._latlng);
+		this._radius = Math.round(this._point.x - point2.x);
+	},
+
+	getPathString: function () {
+		var p = this._point,
+			r = this._radius;
+
+		if (this._checkIfEmpty()) {
+			return '';
+		}
+
+		if (L.Browser.svg) {
+			return "M" + p.x + "," + (p.y - r) +
+					"A" + r + "," + r + ",0,1,1," +
+					(p.x - 0.1) + "," + (p.y - r) + " z";
+		} else {
+			p._round();
+			r = Math.round(r);
+			return "AL " + p.x + "," + p.y + " " + r + "," + r + " 0," + (65535 * 360);
+		}
+	},
+
+	_checkIfEmpty: function () {
+		var vp = this._map._pathViewport,
+			r = this._radius,
+			p = this._point;
+
+		return p.x - r > vp.max.x || p.y - r > vp.max.y ||
+			p.x + r < vp.min.x || p.y + r < vp.min.y;
+	}
+});
+
+
+/*
+ * L.CircleMarker is a circle overlay with a permanent pixel radius.
+ */
+
+L.CircleMarker = L.Circle.extend({
+	options: {
+		radius: 10,
+		weight: 2
+	},
+
+	initialize: function (latlng, options) {
+		L.Circle.prototype.initialize.call(this, latlng, null, options);
+		this._radius = this.options.radius;
+	},
+
+	projectLatlngs: function () {
+		this._point = this._map.latLngToLayerPoint(this._latlng);
+	},
+
+	setRadius: function (radius) {
+		this._radius = radius;
+		this._redraw();
+		return this;
+	}
+});
+
+
+/*
+ * Vector rendering for all browsers that support canvas.
+ */
+
+L.Browser.canvas = (function () {
+	return !!document.createElement('canvas').getContext;
+}());
+
+L.Path = (L.Path.SVG && !window.L_PREFER_CANVAS) || !L.Browser.canvas ? L.Path : L.Path.extend({
+	statics: {
+		//CLIP_PADDING: 0.02, // not sure if there's a need to set it to a small value
+		CANVAS: true,
+		SVG: false
+	},
+
+	options: {
+		updateOnMoveEnd: true
+	},
+
+	_initElements: function () {
+		this._map._initPathRoot();
+		this._ctx = this._map._canvasCtx;
+	},
+
+	_updateStyle: function () {
+		if (this.options.stroke) {
+			this._ctx.lineWidth = this.options.weight;
+			this._ctx.strokeStyle = this.options.color;
+		}
+		if (this.options.fill) {
+			this._ctx.fillStyle = this.options.fillColor || this.options.color;
+		}
+	},
+
+	_drawPath: function () {
+		var i, j, len, len2, point, drawMethod;
+
+		this._ctx.beginPath();
+
+		for (i = 0, len = this._parts.length; i < len; i++) {
+			for (j = 0, len2 = this._parts[i].length; j < len2; j++) {
+				point = this._parts[i][j];
+				drawMethod = (j === 0 ? 'move' : 'line') + 'To';
+
+				this._ctx[drawMethod](point.x, point.y);
+			}
+			// TODO refactor ugly hack
+			if (this instanceof L.Polygon) {
+				this._ctx.closePath();
+			}
+		}
+	},
+
+	_checkIfEmpty: function () {
+		return !this._parts.length;
+	},
+
+	_updatePath: function () {
+		if (this._checkIfEmpty()) {
+			return;
+		}
+
+		this._drawPath();
+
+		this._ctx.save();
+
+		this._updateStyle();
+
+		var opacity = this.options.opacity,
+			fillOpacity = this.options.fillOpacity;
+
+		if (this.options.fill) {
+			if (fillOpacity < 1) {
+				this._ctx.globalAlpha = fillOpacity;
+			}
+			this._ctx.fill();
+		}
+
+		if (this.options.stroke) {
+			if (opacity < 1) {
+				this._ctx.globalAlpha = opacity;
+			}
+			this._ctx.stroke();
+		}
+
+		this._ctx.restore();
+
+		// TODO optimization: 1 fill/stroke for all features with equal style instead of 1 for each feature
+	},
+
+	_initEvents: function () {
+		if (this.options.clickable) {
+			// TODO hand cursor
+			// TODO mouseover, mouseout, dblclick
+			this._map.on('click', this._onClick, this);
+		}
+	},
+
+	_onClick: function (e) {
+		if (this._containsPoint(e.layerPoint)) {
+			this.fire('click', e);
+		}
+	},
+
+    onRemove: function (map) {
+        map.off('viewreset', this._projectLatlngs, this);
+        map.off(this._updateTrigger, this._updatePath, this);
+        map.fire(this._updateTrigger);
+    }
+});
+
+L.Map.include((L.Path.SVG && !window.L_PREFER_CANVAS) || !L.Browser.canvas ? {} : {
+	_initPathRoot: function () {
+		var root = this._pathRoot,
+			ctx;
+
+		if (!root) {
+			root = this._pathRoot = document.createElement("canvas");
+			root.style.position = 'absolute';
+			ctx = this._canvasCtx = root.getContext('2d');
+
+			ctx.lineCap = "round";
+			ctx.lineJoin = "round";
+
+			this._panes.overlayPane.appendChild(root);
+
+			this.on('moveend', this._updateCanvasViewport);
+			this._updateCanvasViewport();
+		}
+	},
+
+	_updateCanvasViewport: function () {
+		this._updatePathViewport();
+
+		var vp = this._pathViewport,
+			min = vp.min,
+			size = vp.max.subtract(min),
+			root = this._pathRoot;
+
+		//TODO check if it's works properly on mobile webkit
+		L.DomUtil.setPosition(root, min);
+		root.width = size.x;
+		root.height = size.y;
+		root.getContext('2d').translate(-min.x, -min.y);
+	}
+});
+
+
+
+L.Polyline.include(!L.Path.CANVAS ? {} : {
+	_containsPoint: function (p, closed) {
+		var i, j, k, len, len2, dist, part,
+			w = this.options.weight / 2;
+
+		if (L.Browser.touch) {
+			w += 10; // polyline click tolerance on touch devices
+		}
+
+		for (i = 0, len = this._parts.length; i < len; i++) {
+			part = this._parts[i];
+			for (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {
+				if (!closed && (j === 0)) {
+					continue;
+				}
+
+				dist = L.LineUtil.pointToSegmentDistance(p, part[k], part[j]);
+
+				if (dist <= w) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+});
+
+
+
+L.Polygon.include(!L.Path.CANVAS ? {} : {
+	_containsPoint: function (p) {
+		var inside = false,
+			part, p1, p2,
+			i, j, k,
+			len, len2;
+
+		// TODO optimization: check if within bounds first
+
+		if (L.Polyline.prototype._containsPoint.call(this, p, true)) {
+			// click on polygon border
+			return true;
+		}
+
+		// ray casting algorithm for detecting if point is in polygon
+
+		for (i = 0, len = this._parts.length; i < len; i++) {
+			part = this._parts[i];
+
+			for (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {
+				p1 = part[j];
+				p2 = part[k];
+
+				if (((p1.y > p.y) !== (p2.y > p.y)) &&
+						(p.x < (p2.x - p1.x) * (p.y - p1.y) / (p2.y - p1.y) + p1.x)) {
+					inside = !inside;
+				}
+			}
+		}
+
+		return inside;
+	}
+});
+
+
+/*
+ * Circle canvas specific drawing parts.
+ */
+
+L.Circle.include(!L.Path.CANVAS ? {} : {
+	_drawPath: function () {
+		var p = this._point;
+		this._ctx.beginPath();
+		this._ctx.arc(p.x, p.y, this._radius, 0, Math.PI * 2);
+	},
+
+	_containsPoint: function (p) {
+		var center = this._point,
+			w2 = this.options.stroke ? this.options.weight / 2 : 0;
+
+		return (p.distanceTo(center) <= this._radius + w2);
+	}
+});
+
+
+
+L.GeoJSON = L.FeatureGroup.extend({
+	initialize: function (geojson, options) {
+		L.Util.setOptions(this, options);
+		this._geojson = geojson;
+		this._layers = {};
+
+		if (geojson) {
+			this.addGeoJSON(geojson);
+		}
+	},
+
+	addGeoJSON: function (geojson) {
+		if (geojson.features) {
+			for (var i = 0, len = geojson.features.length; i < len; i++) {
+				this.addGeoJSON(geojson.features[i]);
+			}
+			return;
+		}
+
+		var isFeature = (geojson.type === 'Feature'),
+			geometry = (isFeature ? geojson.geometry : geojson),
+			layer = L.GeoJSON.geometryToLayer(geometry, this.options.pointToLayer);
+
+		this.fire('featureparse', {
+			layer: layer,
+			properties: geojson.properties,
+			geometryType: geometry.type,
+			bbox: geojson.bbox,
+			id: geojson.id
+		});
+
+		this.addLayer(layer);
+	}
+});
+
+L.Util.extend(L.GeoJSON, {
+	geometryToLayer: function (geometry, pointToLayer) {
+		var coords = geometry.coordinates,
+			latlng, latlngs,
+			i, len,
+			layer,
+			layers = [];
+
+		switch (geometry.type) {
+		case 'Point':
+			latlng = this.coordsToLatLng(coords);
+			return pointToLayer ? pointToLayer(latlng) : new L.Marker(latlng);
+
+		case 'MultiPoint':
+			for (i = 0, len = coords.length; i < len; i++) {
+				latlng = this.coordsToLatLng(coords[i]);
+				layer = pointToLayer ? pointToLayer(latlng) : new L.Marker(latlng);
+				layers.push(layer);
+			}
+			return new L.FeatureGroup(layers);
+
+		case 'LineString':
+			latlngs = this.coordsToLatLngs(coords);
+			return new L.Polyline(latlngs);
+
+		case 'Polygon':
+			latlngs = this.coordsToLatLngs(coords, 1);
+			return new L.Polygon(latlngs);
+
+		case 'MultiLineString':
+			latlngs = this.coordsToLatLngs(coords, 1);
+			return new L.MultiPolyline(latlngs);
+
+		case "MultiPolygon":
+			latlngs = this.coordsToLatLngs(coords, 2);
+			return new L.MultiPolygon(latlngs);
+
+		case "GeometryCollection":
+			for (i = 0, len = geometry.geometries.length; i < len; i++) {
+				layer = this.geometryToLayer(geometry.geometries[i], pointToLayer);
+				layers.push(layer);
+			}
+			return new L.FeatureGroup(layers);
+
+		default:
+			throw new Error('Invalid GeoJSON object.');
+		}
+	},
+
+	coordsToLatLng: function (/*Array*/ coords, /*Boolean*/ reverse)/*: LatLng*/ {
+		var lat = parseFloat(coords[reverse ? 0 : 1]),
+			lng = parseFloat(coords[reverse ? 1 : 0]);
+		return new L.LatLng(lat, lng, true);
+	},
+
+	coordsToLatLngs: function (/*Array*/ coords, /*Number*/ levelsDeep, /*Boolean*/ reverse)/*: Array*/ {
+		var latlng, latlngs = [],
+			i, len = coords.length;
+
+		for (i = 0; i < len; i++) {
+			latlng = levelsDeep ?
+					this.coordsToLatLngs(coords[i], levelsDeep - 1, reverse) :
+					this.coordsToLatLng(coords[i], reverse);
+			latlngs.push(latlng);
+		}
+		return latlngs;
+	}
+});
+
+
+/*
+ * L.DomEvent contains functions for working with DOM events.
+ */
+
+L.DomEvent = {
+	/* inpired by John Resig, Dean Edwards and YUI addEvent implementations */
+	addListener: function (/*HTMLElement*/ obj, /*String*/ type, /*Function*/ fn, /*Object*/ context) {
+		var id = L.Util.stamp(fn),
+			key = '_leaflet_' + type + id;
+
+		if (obj[key]) {
+			return;
+		}
+
+		var handler = function (e) {
+			return fn.call(context || obj, e || L.DomEvent._getEvent());
+		};
+
+		if (L.Browser.touch && (type === 'dblclick') && this.addDoubleTapListener) {
+			this.addDoubleTapListener(obj, handler, id);
+		} else if ('addEventListener' in obj) {
+			if (type === 'mousewheel') {
+				obj.addEventListener('DOMMouseScroll', handler, false);
+				obj.addEventListener(type, handler, false);
+			} else if ((type === 'mouseenter') || (type === 'mouseleave')) {
+				var originalHandler = handler,
+					newType = (type === 'mouseenter' ? 'mouseover' : 'mouseout');
+				handler = function (e) {
+					if (!L.DomEvent._checkMouse(obj, e)) {
+						return;
+					}
+					return originalHandler(e);
+				};
+				obj.addEventListener(newType, handler, false);
+			} else {
+				obj.addEventListener(type, handler, false);
+			}
+		} else if ('attachEvent' in obj) {
+			obj.attachEvent("on" + type, handler);
+		}
+
+		obj[key] = handler;
+	},
+
+	removeListener: function (/*HTMLElement*/ obj, /*String*/ type, /*Function*/ fn) {
+		var id = L.Util.stamp(fn),
+			key = '_leaflet_' + type + id,
+			handler = obj[key];
+
+		if (!handler) {
+			return;
+		}
+
+		if (L.Browser.touch && (type === 'dblclick') && this.removeDoubleTapListener) {
+			this.removeDoubleTapListener(obj, id);
+		} else if ('removeEventListener' in obj) {
+			if (type === 'mousewheel') {
+				obj.removeEventListener('DOMMouseScroll', handler, false);
+				obj.removeEventListener(type, handler, false);
+			} else if ((type === 'mouseenter') || (type === 'mouseleave')) {
+				obj.removeEventListener((type === 'mouseenter' ? 'mouseover' : 'mouseout'), handler, false);
+			} else {
+				obj.removeEventListener(type, handler, false);
+			}
+		} else if ('detachEvent' in obj) {
+			obj.detachEvent("on" + type, handler);
+		}
+		obj[key] = null;
+	},
+
+	_checkMouse: function (el, e) {
+		var related = e.relatedTarget;
+
+		if (!related) {
+			return true;
+		}
+
+		try {
+			while (related && (related !== el)) {
+				related = related.parentNode;
+			}
+		} catch (err) {
+			return false;
+		}
+
+		return (related !== el);
+	},
+
+	/*jshint noarg:false */ // evil magic for IE
+	_getEvent: function () {
+		var e = window.event;
+		if (!e) {
+			var caller = arguments.callee.caller;
+			while (caller) {
+				e = caller['arguments'][0];
+				if (e && window.Event === e.constructor) {
+					break;
+				}
+				caller = caller.caller;
+			}
+		}
+		return e;
+	},
+	/*jshint noarg:false */
+
+	stopPropagation: function (/*Event*/ e) {
+		if (e.stopPropagation) {
+			e.stopPropagation();
+		} else {
+			e.cancelBubble = true;
+		}
+	},
+
+	disableClickPropagation: function (/*HTMLElement*/ el) {
+		L.DomEvent.addListener(el, L.Draggable.START, L.DomEvent.stopPropagation);
+		L.DomEvent.addListener(el, 'click', L.DomEvent.stopPropagation);
+		L.DomEvent.addListener(el, 'dblclick', L.DomEvent.stopPropagation);
+	},
+
+	preventDefault: function (/*Event*/ e) {
+		if (e.preventDefault) {
+			e.preventDefault();
+		} else {
+			e.returnValue = false;
+		}
+	},
+
+	stop: function (e) {
+		L.DomEvent.preventDefault(e);
+		L.DomEvent.stopPropagation(e);
+	},
+
+	getMousePosition: function (e, container) {
+		var x = e.pageX ? e.pageX : e.clientX +
+				document.body.scrollLeft + document.documentElement.scrollLeft,
+			y = e.pageY ? e.pageY : e.clientY +
+					document.body.scrollTop + document.documentElement.scrollTop,
+			pos = new L.Point(x, y);
+		return (container ?
+					pos.subtract(L.DomUtil.getViewportOffset(container)) : pos);
+	},
+
+	getWheelDelta: function (e) {
+		var delta = 0;
+		if (e.wheelDelta) {
+			delta = e.wheelDelta / 120;
+		}
+		if (e.detail) {
+			delta = -e.detail / 3;
+		}
+		return delta;
+	}
+};
+
+
+
+/*
+ * L.Draggable allows you to add dragging capabilities to any element. Supports mobile devices too.
+ */
+
+L.Draggable = L.Class.extend({
+	includes: L.Mixin.Events,
+
+	statics: {
+		START: L.Browser.touch ? 'touchstart' : 'mousedown',
+		END: L.Browser.touch ? 'touchend' : 'mouseup',
+		MOVE: L.Browser.touch ? 'touchmove' : 'mousemove',
+		TAP_TOLERANCE: 15
+	},
+
+	initialize: function (element, dragStartTarget) {
+		this._element = element;
+		this._dragStartTarget = dragStartTarget || element;
+	},
+
+	enable: function () {
+		if (this._enabled) {
+			return;
+		}
+		L.DomEvent.addListener(this._dragStartTarget, L.Draggable.START, this._onDown, this);
+		this._enabled = true;
+	},
+
+	disable: function () {
+		if (!this._enabled) {
+			return;
+		}
+		L.DomEvent.removeListener(this._dragStartTarget, L.Draggable.START, this._onDown);
+		this._enabled = false;
+	},
+
+	_onDown: function (e) {
+		if ((!L.Browser.touch && e.shiftKey) || ((e.which !== 1) && (e.button !== 1) && !e.touches)) {
+			return;
+		}
+
+		if (e.touches && e.touches.length > 1) {
+			return;
+		}
+
+		var first = (e.touches && e.touches.length === 1 ? e.touches[0] : e),
+			el = first.target;
+
+		L.DomEvent.preventDefault(e);
+
+		if (L.Browser.touch && el.tagName.toLowerCase() === 'a') {
+			el.className += ' leaflet-active';
+		}
+
+		this._moved = false;
+		if (this._moving) {
+			return;
+		}
+
+		if (!L.Browser.touch) {
+			L.DomUtil.disableTextSelection();
+			this._setMovingCursor();
+		}
+
+		this._startPos = this._newPos = L.DomUtil.getPosition(this._element);
+		this._startPoint = new L.Point(first.clientX, first.clientY);
+
+		L.DomEvent.addListener(document, L.Draggable.MOVE, this._onMove, this);
+		L.DomEvent.addListener(document, L.Draggable.END, this._onUp, this);
+	},
+
+	_onMove: function (e) {
+		if (e.touches && e.touches.length > 1) {
+			return;
+		}
+
+		L.DomEvent.preventDefault(e);
+
+		var first = (e.touches && e.touches.length === 1 ? e.touches[0] : e);
+
+		if (!this._moved) {
+			this.fire('dragstart');
+			this._moved = true;
+		}
+		this._moving = true;
+
+		var newPoint = new L.Point(first.clientX, first.clientY);
+		this._newPos = this._startPos.add(newPoint).subtract(this._startPoint);
+
+		L.Util.requestAnimFrame(this._updatePosition, this, true, this._dragStartTarget);
+	},
+
+	_updatePosition: function () {
+		this.fire('predrag');
+		L.DomUtil.setPosition(this._element, this._newPos);
+		this.fire('drag');
+	},
+
+	_onUp: function (e) {
+		if (e.changedTouches) {
+			var first = e.changedTouches[0],
+				el = first.target,
+				dist = (this._newPos && this._newPos.distanceTo(this._startPos)) || 0;
+
+			if (el.tagName.toLowerCase() === 'a') {
+				el.className = el.className.replace(' leaflet-active', '');
+			}
+
+			if (dist < L.Draggable.TAP_TOLERANCE) {
+				this._simulateEvent('click', first);
+			}
+		}
+
+		if (!L.Browser.touch) {
+			L.DomUtil.enableTextSelection();
+			this._restoreCursor();
+		}
+
+		L.DomEvent.removeListener(document, L.Draggable.MOVE, this._onMove);
+		L.DomEvent.removeListener(document, L.Draggable.END, this._onUp);
+
+		if (this._moved) {
+			this.fire('dragend');
+		}
+		this._moving = false;
+	},
+
+	_setMovingCursor: function () {
+		this._bodyCursor = document.body.style.cursor;
+		document.body.style.cursor = 'move';
+	},
+
+	_restoreCursor: function () {
+		document.body.style.cursor = this._bodyCursor;
+	},
+
+	_simulateEvent: function (type, e) {
+		var simulatedEvent = document.createEvent('MouseEvents');
+
+		simulatedEvent.initMouseEvent(
+				type, true, true, window, 1,
+				e.screenX, e.screenY,
+				e.clientX, e.clientY,
+				false, false, false, false, 0, null);
+
+		e.target.dispatchEvent(simulatedEvent);
+	}
+});
+
+
+/*
+ * L.Handler classes are used internally to inject interaction features to classes like Map and Marker.
+ */
+
+L.Handler = L.Class.extend({
+	initialize: function (map) {
+		this._map = map;
+	},
+
+	enable: function () {
+		if (this._enabled) {
+			return;
+		}
+		this._enabled = true;
+		this.addHooks();
+	},
+
+	disable: function () {
+		if (!this._enabled) {
+			return;
+		}
+		this._enabled = false;
+		this.removeHooks();
+	},
+
+	enabled: function () {
+		return !!this._enabled;
+	}
+});
+
+
+/*
+ * L.Handler.MapDrag is used internally by L.Map to make the map draggable.
+ */
+
+L.Map.Drag = L.Handler.extend({
+	addHooks: function () {
+		if (!this._draggable) {
+			this._draggable = new L.Draggable(this._map._mapPane, this._map._container);
+
+			this._draggable
+				.on('dragstart', this._onDragStart, this)
+				.on('drag', this._onDrag, this)
+				.on('dragend', this._onDragEnd, this);
+
+			var options = this._map.options;
+
+			if (options.worldCopyJump && !options.continuousWorld) {
+				this._draggable.on('predrag', this._onPreDrag, this);
+				this._map.on('viewreset', this._onViewReset, this);
+			}
+		}
+		this._draggable.enable();
+	},
+
+	removeHooks: function () {
+		this._draggable.disable();
+	},
+
+	moved: function () {
+		return this._draggable && this._draggable._moved;
+	},
+
+	_onDragStart: function () {
+		this._map
+			.fire('movestart')
+			.fire('dragstart');
+	},
+
+	_onDrag: function () {
+		this._map
+			.fire('move')
+			.fire('drag');
+	},
+
+	_onViewReset: function () {
+		var pxCenter = this._map.getSize().divideBy(2),
+			pxWorldCenter = this._map.latLngToLayerPoint(new L.LatLng(0, 0));
+
+		this._initialWorldOffset = pxWorldCenter.subtract(pxCenter);
+	},
+
+	_onPreDrag: function () {
+		var map = this._map,
+			worldWidth = map.options.scale(map.getZoom()),
+			halfWidth = Math.round(worldWidth / 2),
+			dx = this._initialWorldOffset.x,
+			x = this._draggable._newPos.x,
+			newX1 = (x - halfWidth + dx) % worldWidth + halfWidth - dx,
+			newX2 = (x + halfWidth + dx) % worldWidth - halfWidth - dx,
+			newX = Math.abs(newX1 + dx) < Math.abs(newX2 + dx) ? newX1 : newX2;
+
+		this._draggable._newPos.x = newX;
+	},
+
+	_onDragEnd: function () {
+		var map = this._map;
+
+		map
+			.fire('moveend')
+			.fire('dragend');
+
+		if (map.options.maxBounds) {
+			// TODO predrag validation instead of animation
+			L.Util.requestAnimFrame(this._panInsideMaxBounds, map, true, map._container);
+		}
+	},
+
+	_panInsideMaxBounds: function () {
+		this.panInsideBounds(this.options.maxBounds);
+	}
+});
+
+
+/*
+ * L.Handler.DoubleClickZoom is used internally by L.Map to add double-click zooming.
+ */
+
+L.Map.DoubleClickZoom = L.Handler.extend({
+	addHooks: function () {
+		this._map.on('dblclick', this._onDoubleClick);
+		// TODO remove 3d argument?
+	},
+
+	removeHooks: function () {
+		this._map.off('dblclick', this._onDoubleClick);
+	},
+
+	_onDoubleClick: function (e) {
+		this.setView(e.latlng, this._zoom + 1);
+	}
+});
+
+
+/*
+ * L.Handler.ScrollWheelZoom is used internally by L.Map to enable mouse scroll wheel zooming on the map.
+ */
+
+L.Map.ScrollWheelZoom = L.Handler.extend({
+	addHooks: function () {
+		L.DomEvent.addListener(this._map._container, 'mousewheel', this._onWheelScroll, this);
+		this._delta = 0;
+	},
+
+	removeHooks: function () {
+		L.DomEvent.removeListener(this._map._container, 'mousewheel', this._onWheelScroll);
+	},
+
+	_onWheelScroll: function (e) {
+		var delta = L.DomEvent.getWheelDelta(e);
+		this._delta += delta;
+		this._lastMousePos = this._map.mouseEventToContainerPoint(e);
+
+		clearTimeout(this._timer);
+		this._timer = setTimeout(L.Util.bind(this._performZoom, this), 50);
+
+		L.DomEvent.preventDefault(e);
+	},
+
+	_performZoom: function () {
+		var map = this._map,
+			delta = Math.round(this._delta),
+			zoom = map.getZoom();
+
+		delta = Math.max(Math.min(delta, 4), -4);
+		delta = map._limitZoom(zoom + delta) - zoom;
+
+		this._delta = 0;
+
+		if (!delta) {
+			return;
+		}
+
+		var newCenter = this._getCenterForScrollWheelZoom(this._lastMousePos, delta),
+			newZoom = zoom + delta;
+
+		map.setView(newCenter, newZoom);
+	},
+
+	_getCenterForScrollWheelZoom: function (mousePos, delta) {
+		var map = this._map,
+			centerPoint = map.getPixelBounds().getCenter(),
+			viewHalf = map.getSize().divideBy(2),
+			centerOffset = mousePos.subtract(viewHalf).multiplyBy(1 - Math.pow(2, -delta)),
+			newCenterPoint = centerPoint.add(centerOffset);
+
+		return map.unproject(newCenterPoint, map._zoom, true);
+	}
+});
+
+
+L.Util.extend(L.DomEvent, {
+	// inspired by Zepto touch code by Thomas Fuchs
+	addDoubleTapListener: function (obj, handler, id) {
+		var last,
+			doubleTap = false,
+			delay = 250,
+			touch,
+			pre = '_leaflet_',
+			touchstart = 'touchstart',
+			touchend = 'touchend';
+
+		function onTouchStart(e) {
+			if (e.touches.length !== 1) {
+				return;
+			}
+
+			var now = Date.now(),
+				delta = now - (last || now);
+
+			touch = e.touches[0];
+			doubleTap = (delta > 0 && delta <= delay);
+			last = now;
+		}
+		function onTouchEnd(e) {
+			if (doubleTap) {
+				touch.type = 'dblclick';
+				handler(touch);
+				last = null;
+			}
+		}
+		obj[pre + touchstart + id] = onTouchStart;
+		obj[pre + touchend + id] = onTouchEnd;
+
+		obj.addEventListener(touchstart, onTouchStart, false);
+		obj.addEventListener(touchend, onTouchEnd, false);
+	},
+
+	removeDoubleTapListener: function (obj, id) {
+		var pre = '_leaflet_';
+		obj.removeEventListener(obj, obj[pre + 'touchstart' + id], false);
+		obj.removeEventListener(obj, obj[pre + 'touchend' + id], false);
+	}
+});
+
+
+/*
+ * L.Handler.TouchZoom is used internally by L.Map to add touch-zooming on Webkit-powered mobile browsers.
+ */
+
+L.Map.TouchZoom = L.Handler.extend({
+	addHooks: function () {
+		L.DomEvent.addListener(this._map._container, 'touchstart', this._onTouchStart, this);
+	},
+
+	removeHooks: function () {
+		L.DomEvent.removeListener(this._map._container, 'touchstart', this._onTouchStart, this);
+	},
+
+	_onTouchStart: function (e) {
+		if (!e.touches || e.touches.length !== 2 || this._map._animatingZoom) {
+			return;
+		}
+
+		var p1 = this._map.mouseEventToLayerPoint(e.touches[0]),
+			p2 = this._map.mouseEventToLayerPoint(e.touches[1]),
+			viewCenter = this._map.containerPointToLayerPoint(this._map.getSize().divideBy(2));
+
+		this._startCenter = p1.add(p2).divideBy(2, true);
+		this._startDist = p1.distanceTo(p2);
+		//this._startTransform = this._map._mapPane.style.webkitTransform;
+
+		this._moved = false;
+		this._zooming = true;
+
+		this._centerOffset = viewCenter.subtract(this._startCenter);
+
+		L.DomEvent.addListener(document, 'touchmove', this._onTouchMove, this);
+		L.DomEvent.addListener(document, 'touchend', this._onTouchEnd, this);
+
+		L.DomEvent.preventDefault(e);
+	},
+
+	_onTouchMove: function (e) {
+		if (!e.touches || e.touches.length !== 2) {
+			return;
+		}
+
+		if (!this._moved) {
+			this._map._mapPane.className += ' leaflet-zoom-anim';
+
+			this._map
+				.fire('zoomstart')
+				.fire('movestart')
+				._prepareTileBg();
+
+			this._moved = true;
+		}
+
+		var p1 = this._map.mouseEventToLayerPoint(e.touches[0]),
+			p2 = this._map.mouseEventToLayerPoint(e.touches[1]);
+
+		this._scale = p1.distanceTo(p2) / this._startDist;
+		this._delta = p1.add(p2).divideBy(2, true).subtract(this._startCenter);
+
+		// Used 2 translates instead of transform-origin because of a very strange bug -
+		// it didn't count the origin on the first touch-zoom but worked correctly afterwards
+
+		this._map._tileBg.style.webkitTransform = [
+            L.DomUtil.getTranslateString(this._delta),
+            L.DomUtil.getScaleString(this._scale, this._startCenter)
+        ].join(" ");
+
+		L.DomEvent.preventDefault(e);
+	},
+
+	_onTouchEnd: function (e) {
+		if (!this._moved || !this._zooming) {
+			return;
+		}
+		this._zooming = false;
+
+		var oldZoom = this._map.getZoom(),
+			floatZoomDelta = Math.log(this._scale) / Math.LN2,
+			roundZoomDelta = (floatZoomDelta > 0 ? Math.ceil(floatZoomDelta) : Math.floor(floatZoomDelta)),
+			zoom = this._map._limitZoom(oldZoom + roundZoomDelta),
+			zoomDelta = zoom - oldZoom,
+			centerOffset = this._centerOffset.subtract(this._delta).divideBy(this._scale),
+			centerPoint = this._map.getPixelOrigin().add(this._startCenter).add(centerOffset),
+			center = this._map.unproject(centerPoint);
+
+		L.DomEvent.removeListener(document, 'touchmove', this._onTouchMove);
+		L.DomEvent.removeListener(document, 'touchend', this._onTouchEnd);
+
+		var finalScale = Math.pow(2, zoomDelta);
+
+		this._map._runAnimation(center, zoom, finalScale / this._scale, this._startCenter.add(centerOffset));
+	}
+});
+
+
+/*
+ * L.Handler.ShiftDragZoom is used internally by L.Map to add shift-drag zoom (zoom to a selected bounding box).
+ */
+
+L.Map.BoxZoom = L.Handler.extend({
+	initialize: function (map) {
+		this._map = map;
+		this._container = map._container;
+		this._pane = map._panes.overlayPane;
+	},
+
+	addHooks: function () {
+		L.DomEvent.addListener(this._container, 'mousedown', this._onMouseDown, this);
+	},
+
+	removeHooks: function () {
+		L.DomEvent.removeListener(this._container, 'mousedown', this._onMouseDown);
+	},
+
+	_onMouseDown: function (e) {
+		if (!e.shiftKey || ((e.which !== 1) && (e.button !== 1))) {
+			return false;
+		}
+
+		L.DomUtil.disableTextSelection();
+
+		this._startLayerPoint = this._map.mouseEventToLayerPoint(e);
+
+		this._box = L.DomUtil.create('div', 'leaflet-zoom-box', this._pane);
+		L.DomUtil.setPosition(this._box, this._startLayerPoint);
+
+		//TODO move cursor to styles
+		this._container.style.cursor = 'crosshair';
+
+		L.DomEvent.addListener(document, 'mousemove', this._onMouseMove, this);
+		L.DomEvent.addListener(document, 'mouseup', this._onMouseUp, this);
+
+		L.DomEvent.preventDefault(e);
+	},
+
+	_onMouseMove: function (e) {
+		var layerPoint = this._map.mouseEventToLayerPoint(e),
+			dx = layerPoint.x - this._startLayerPoint.x,
+			dy = layerPoint.y - this._startLayerPoint.y;
+
+		var newX = Math.min(layerPoint.x, this._startLayerPoint.x),
+			newY = Math.min(layerPoint.y, this._startLayerPoint.y),
+			newPos = new L.Point(newX, newY);
+
+		L.DomUtil.setPosition(this._box, newPos);
+
+		this._box.style.width = (Math.abs(dx) - 4) + 'px';
+		this._box.style.height = (Math.abs(dy) - 4) + 'px';
+	},
+
+	_onMouseUp: function (e) {
+		this._pane.removeChild(this._box);
+		this._container.style.cursor = '';
+
+		L.DomUtil.enableTextSelection();
+
+		L.DomEvent.removeListener(document, 'mousemove', this._onMouseMove);
+		L.DomEvent.removeListener(document, 'mouseup', this._onMouseUp);
+
+		var layerPoint = this._map.mouseEventToLayerPoint(e);
+
+		var bounds = new L.LatLngBounds(
+				this._map.layerPointToLatLng(this._startLayerPoint),
+				this._map.layerPointToLatLng(layerPoint));
+
+		this._map.fitBounds(bounds);
+	}
+});
+
+
+/*
+ * L.Handler.MarkerDrag is used internally by L.Marker to make the markers draggable.
+ */
+
+L.Handler.MarkerDrag = L.Handler.extend({
+	initialize: function (marker) {
+		this._marker = marker;
+	},
+
+	addHooks: function () {
+		var icon = this._marker._icon;
+		if (!this._draggable) {
+			this._draggable = new L.Draggable(icon, icon);
+
+			this._draggable
+				.on('dragstart', this._onDragStart, this)
+				.on('drag', this._onDrag, this)
+				.on('dragend', this._onDragEnd, this);
+		}
+		this._draggable.enable();
+	},
+
+	removeHooks: function () {
+		this._draggable.disable();
+	},
+
+	moved: function () {
+		return this._draggable && this._draggable._moved;
+	},
+
+	_onDragStart: function (e) {
+		this._marker
+			.closePopup()
+			.fire('movestart')
+			.fire('dragstart');
+	},
+
+	_onDrag: function (e) {
+		// update shadow position
+		var iconPos = L.DomUtil.getPosition(this._marker._icon);
+		if (this._marker._shadow) {
+			L.DomUtil.setPosition(this._marker._shadow, iconPos);
+		}
+
+		this._marker._latlng = this._marker._map.layerPointToLatLng(iconPos);
+
+		this._marker
+			.fire('move')
+			.fire('drag');
+	},
+
+	_onDragEnd: function () {
+		this._marker
+			.fire('moveend')
+			.fire('dragend');
+	}
+});
+
+
+
+L.Control = {};
+
+L.Control.Position = {
+	TOP_LEFT: 'topLeft',
+	TOP_RIGHT: 'topRight',
+	BOTTOM_LEFT: 'bottomLeft',
+	BOTTOM_RIGHT: 'bottomRight'
+};
+
+
+L.Map.include({
+	addControl: function (control) {
+		control.onAdd(this);
+
+		var pos = control.getPosition(),
+			corner = this._controlCorners[pos],
+			container = control.getContainer();
+
+		L.DomUtil.addClass(container, 'leaflet-control');
+
+		if (pos.indexOf('bottom') !== -1) {
+			corner.insertBefore(container, corner.firstChild);
+		} else {
+			corner.appendChild(container);
+		}
+		return this;
+	},
+
+	removeControl: function (control) {
+		var pos = control.getPosition(),
+			corner = this._controlCorners[pos],
+			container = control.getContainer();
+
+		corner.removeChild(container);
+
+		if (control.onRemove) {
+			control.onRemove(this);
+		}
+		return this;
+	},
+
+	_initControlPos: function () {
+		var corners = this._controlCorners = {},
+			classPart = 'leaflet-',
+			top = classPart + 'top',
+			bottom = classPart + 'bottom',
+			left = classPart + 'left',
+			right = classPart + 'right',
+			controlContainer = L.DomUtil.create('div', classPart + 'control-container', this._container);
+
+		if (L.Browser.touch) {
+			controlContainer.className += ' ' + classPart + 'big-buttons';
+		}
+
+		corners.topLeft = L.DomUtil.create('div', top + ' ' + left, controlContainer);
+		corners.topRight = L.DomUtil.create('div', top + ' ' + right, controlContainer);
+		corners.bottomLeft = L.DomUtil.create('div', bottom + ' ' + left, controlContainer);
+		corners.bottomRight = L.DomUtil.create('div', bottom + ' ' + right, controlContainer);
+	}
+});
+
+
+
+L.Control.Zoom = L.Class.extend({
+	onAdd: function (map) {
+		this._map = map;
+		this._container = L.DomUtil.create('div', 'leaflet-control-zoom');
+
+		this._zoomInButton = this._createButton(
+				'Zoom in', 'leaflet-control-zoom-in', this._map.zoomIn, this._map);
+		this._zoomOutButton = this._createButton(
+				'Zoom out', 'leaflet-control-zoom-out', this._map.zoomOut, this._map);
+
+		this._container.appendChild(this._zoomInButton);
+		this._container.appendChild(this._zoomOutButton);
+	},
+
+	getContainer: function () {
+		return this._container;
+	},
+
+	getPosition: function () {
+		return L.Control.Position.TOP_LEFT;
+	},
+
+	_createButton: function (title, className, fn, context) {
+		var link = document.createElement('a');
+		link.href = '#';
+		link.title = title;
+		link.className = className;
+
+		L.DomEvent.disableClickPropagation(link);
+		L.DomEvent.addListener(link, 'click', L.DomEvent.preventDefault);
+		L.DomEvent.addListener(link, 'click', fn, context);
+
+		return link;
+	}
+});
+
+
+L.Control.Attribution = L.Class.extend({
+	initialize: function (prefix) {
+		this._prefix = prefix || 'Powered by <a href="http://leaflet.cloudmade.com">Leaflet</a>';
+		this._attributions = {};
+	},
+	
+	onAdd: function (map) {
+		this._container = L.DomUtil.create('div', 'leaflet-control-attribution');
+		L.DomEvent.disableClickPropagation(this._container);
+		this._map = map;
+		this._update();
+	},
+
+	getPosition: function () {
+		return L.Control.Position.BOTTOM_RIGHT;
+	},
+
+	getContainer: function () {
+		return this._container;
+	},
+
+	setPrefix: function (prefix) {
+		this._prefix = prefix;
+		this._update();
+	},
+
+	addAttribution: function (text) {
+		if (!text) {
+			return;
+		}
+		this._attributions[text] = true;
+		this._update();
+	},
+
+	removeAttribution: function (text) {
+		if (!text) {
+			return;
+		}
+		delete this._attributions[text];
+		this._update();
+	},
+
+	_update: function () {
+		if (!this._map) {
+			return;
+		}
+
+		var attribs = [];
+
+		for (var i in this._attributions) {
+			if (this._attributions.hasOwnProperty(i)) {
+				attribs.push(i);
+			}
+		}
+
+		var prefixAndAttribs = [];
+		if (this._prefix) {
+			prefixAndAttribs.push(this._prefix);
+		}
+		if (attribs.length) {
+			prefixAndAttribs.push(attribs.join(', '));
+		}
+
+		this._container.innerHTML = prefixAndAttribs.join(' &mdash; ');
+	}
+});
+
+
+
+L.Control.Layers = L.Class.extend({
+	options: {
+		collapsed: !L.Browser.touch
+	},
+
+	initialize: function (baseLayers, overlays, options) {
+		L.Util.setOptions(this, options);
+
+		this._layers = {};
+
+		for (var i in baseLayers) {
+			if (baseLayers.hasOwnProperty(i)) {
+				this._addLayer(baseLayers[i], i);
+			}
+		}
+
+		for (i in overlays) {
+			if (overlays.hasOwnProperty(i)) {
+				this._addLayer(overlays[i], i, true);
+			}
+		}
+	},
+
+	onAdd: function (map) {
+		this._map = map;
+
+		this._initLayout();
+		this._update();
+	},
+
+	getContainer: function () {
+		return this._container;
+	},
+
+	getPosition: function () {
+		return L.Control.Position.TOP_RIGHT;
+	},
+
+	addBaseLayer: function (layer, name) {
+		this._addLayer(layer, name);
+		this._update();
+		return this;
+	},
+
+	addOverlay: function (layer, name) {
+		this._addLayer(layer, name, true);
+		this._update();
+		return this;
+	},
+
+	removeLayer: function (layer) {
+		var id = L.Util.stamp(layer);
+		delete this._layers[id];
+		this._update();
+		return this;
+	},
+
+	_initLayout: function () {
+		this._container = L.DomUtil.create('div', 'leaflet-control-layers');
+		L.DomEvent.disableClickPropagation(this._container);
+
+		this._form = L.DomUtil.create('form', 'leaflet-control-layers-list');
+
+		if (this.options.collapsed) {
+			L.DomEvent.addListener(this._container, 'mouseover', this._expand, this);
+			L.DomEvent.addListener(this._container, 'mouseout', this._collapse, this);
+
+			var link = this._layersLink = L.DomUtil.create('a', 'leaflet-control-layers-toggle');
+			link.href = '#';
+			link.title = 'Layers';
+
+			L.DomEvent.addListener(link, 'focus', this._expand, this);
+			L.DomEvent.addListener(this._map, L.Draggable.START, this._collapse, this);
+			// TODO keyboard accessibility
+
+			this._container.appendChild(link);
+		} else {
+			this._expand();
+		}
+
+		this._baseLayersList = L.DomUtil.create('div', 'leaflet-control-layers-base', this._form);
+		this._separator = L.DomUtil.create('div', 'leaflet-control-layers-separator', this._form);
+		this._overlaysList = L.DomUtil.create('div', 'leaflet-control-layers-overlays', this._form);
+
+		this._container.appendChild(this._form);
+	},
+
+	_addLayer: function (layer, name, overlay) {
+		var id = L.Util.stamp(layer);
+		this._layers[id] = {
+			layer: layer,
+			name: name,
+			overlay: overlay
+		};
+	},
+
+	_update: function () {
+		if (!this._container) {
+			return;
+		}
+
+		this._baseLayersList.innerHTML = '';
+		this._overlaysList.innerHTML = '';
+
+		var baseLayersPresent = false,
+			overlaysPresent = false;
+
+		for (var i in this._layers) {
+			if (this._layers.hasOwnProperty(i)) {
+				var obj = this._layers[i];
+				this._addItem(obj);
+				overlaysPresent = overlaysPresent || obj.overlay;
+				baseLayersPresent = baseLayersPresent || !obj.overlay;
+			}
+		}
+
+		this._separator.style.display = (overlaysPresent && baseLayersPresent ? '' : 'none');
+	},
+
+	_addItem: function (obj, onclick) {
+		var label = document.createElement('label');
+
+		var input = document.createElement('input');
+		if (!obj.overlay) {
+			input.name = 'leaflet-base-layers';
+		}
+		input.type = obj.overlay ? 'checkbox' : 'radio';
+		input.checked = this._map.hasLayer(obj.layer);
+		input.layerId = L.Util.stamp(obj.layer);
+
+		L.DomEvent.addListener(input, 'click', this._onInputClick, this);
+
+		var name = document.createTextNode(' ' + obj.name);
+
+		label.appendChild(input);
+		label.appendChild(name);
+
+		var container = obj.overlay ? this._overlaysList : this._baseLayersList;
+		container.appendChild(label);
+	},
+
+	_onInputClick: function () {
+		var i, input, obj,
+			inputs = this._form.getElementsByTagName('input'),
+			inputsLen = inputs.length;
+
+		for (i = 0; i < inputsLen; i++) {
+			input = inputs[i];
+			obj = this._layers[input.layerId];
+
+			if (input.checked) {
+				this._map.addLayer(obj.layer, !obj.overlay);
+			} else {
+				this._map.removeLayer(obj.layer);
+			}
+		}
+	},
+
+	_expand: function () {
+		L.DomUtil.addClass(this._container, 'leaflet-control-layers-expanded');
+	},
+
+	_collapse: function () {
+		this._container.className = this._container.className.replace(' leaflet-control-layers-expanded', '');
+	}
+});
+
+
+L.Transition = L.Class.extend({
+	includes: L.Mixin.Events,
+
+	statics: {
+		CUSTOM_PROPS_SETTERS: {
+			position: L.DomUtil.setPosition
+			//TODO transform custom attr
+		},
+
+		implemented: function () {
+			return L.Transition.NATIVE || L.Transition.TIMER;
+		}
+	},
+
+	options: {
+		easing: 'ease',
+		duration: 0.5
+	},
+
+	_setProperty: function (prop, value) {
+		var setters = L.Transition.CUSTOM_PROPS_SETTERS;
+		if (prop in setters) {
+			setters[prop](this._el, value);
+		} else {
+			this._el.style[prop] = value;
+		}
+	}
+});
+
+
+/*
+ * L.Transition native implementation that powers Leaflet animation
+ * in browsers that support CSS3 Transitions
+ */
+
+L.Transition = L.Transition.extend({
+	statics: (function () {
+		var transition = L.DomUtil.TRANSITION,
+			transitionEnd = (transition === 'webkitTransition' || transition === 'OTransition' ?
+				transition + 'End' : 'transitionend');
+
+		return {
+			NATIVE: !!transition,
+
+			TRANSITION: transition,
+			PROPERTY: transition + 'Property',
+			DURATION: transition + 'Duration',
+			EASING: transition + 'TimingFunction',
+			END: transitionEnd,
+
+			// transition-property value to use with each particular custom property
+			CUSTOM_PROPS_PROPERTIES: {
+				position: L.Browser.webkit ? L.DomUtil.TRANSFORM : 'top, left'
+			}
+		};
+	}()),
+
+	options: {
+		fakeStepInterval: 100
+	},
+
+	initialize: function (/*HTMLElement*/ el, /*Object*/ options) {
+		this._el = el;
+		L.Util.setOptions(this, options);
+
+		L.DomEvent.addListener(el, L.Transition.END, this._onTransitionEnd, this);
+		this._onFakeStep = L.Util.bind(this._onFakeStep, this);
+	},
+
+	run: function (/*Object*/ props) {
+		var prop,
+			propsList = [],
+			customProp = L.Transition.CUSTOM_PROPS_PROPERTIES;
+
+		for (prop in props) {
+			if (props.hasOwnProperty(prop)) {
+				prop = customProp[prop] ? customProp[prop] : prop;
+				prop = this._dasherize(prop);
+				propsList.push(prop);
+			}
+		}
+
+		this._el.style[L.Transition.DURATION] = this.options.duration + 's';
+		this._el.style[L.Transition.EASING] = this.options.easing;
+		this._el.style[L.Transition.PROPERTY] = propsList.join(', ');
+
+		for (prop in props) {
+			if (props.hasOwnProperty(prop)) {
+				this._setProperty(prop, props[prop]);
+			}
+		}
+
+		this._inProgress = true;
+
+		this.fire('start');
+
+		if (L.Transition.NATIVE) {
+			clearInterval(this._timer);
+			this._timer = setInterval(this._onFakeStep, this.options.fakeStepInterval);
+		} else {
+			this._onTransitionEnd();
+		}
+	},
+
+	_dasherize: (function () {
+		var re = /([A-Z])/g;
+
+		function replaceFn(w) {
+			return '-' + w.toLowerCase();
+		}
+
+		return function (str) {
+			return str.replace(re, replaceFn);
+		};
+	}()),
+
+	_onFakeStep: function () {
+		this.fire('step');
+	},
+
+	_onTransitionEnd: function () {
+		if (this._inProgress) {
+			this._inProgress = false;
+			clearInterval(this._timer);
+
+			this._el.style[L.Transition.PROPERTY] = 'none';
+
+			this.fire('step');
+			this.fire('end');
+		}
+	}
+});
+
+
+/*
+ * L.Transition fallback implementation that powers Leaflet animation
+ * in browsers that don't support CSS3 Transitions
+ */
+
+L.Transition = L.Transition.NATIVE ? L.Transition : L.Transition.extend({
+	statics: {
+		getTime: Date.now || function () {
+			return +new Date();
+		},
+
+		TIMER: true,
+
+		EASINGS: {
+			'ease': [0.25, 0.1, 0.25, 1.0],
+			'linear': [0.0, 0.0, 1.0, 1.0],
+			'ease-in': [0.42, 0, 1.0, 1.0],
+			'ease-out': [0, 0, 0.58, 1.0],
+			'ease-in-out': [0.42, 0, 0.58, 1.0]
+		},
+
+		CUSTOM_PROPS_GETTERS: {
+			position: L.DomUtil.getPosition
+		},
+
+		//used to get units from strings like "10.5px" (->px)
+		UNIT_RE: /^[\d\.]+(\D*)$/
+	},
+
+	options: {
+		fps: 50
+	},
+
+	initialize: function (el, options) {
+		this._el = el;
+		L.Util.extend(this.options, options);
+
+		var easings = L.Transition.EASINGS[this.options.easing] || L.Transition.EASINGS.ease;
+
+		this._p1 = new L.Point(0, 0);
+		this._p2 = new L.Point(easings[0], easings[1]);
+		this._p3 = new L.Point(easings[2], easings[3]);
+		this._p4 = new L.Point(1, 1);
+
+		this._step = L.Util.bind(this._step, this);
+		this._interval = Math.round(1000 / this.options.fps);
+	},
+
+	run: function (props) {
+		this._props = {};
+
+		var getters = L.Transition.CUSTOM_PROPS_GETTERS,
+			re = L.Transition.UNIT_RE;
+
+		this.fire('start');
+
+		for (var prop in props) {
+			if (props.hasOwnProperty(prop)) {
+				var p = {};
+				if (prop in getters) {
+					p.from = getters[prop](this._el);
+				} else {
+					var matches = this._el.style[prop].match(re);
+					p.from = parseFloat(matches[0]);
+					p.unit = matches[1];
+				}
+				p.to = props[prop];
+				this._props[prop] = p;
+			}
+		}
+
+		clearInterval(this._timer);
+		this._timer = setInterval(this._step, this._interval);
+		this._startTime = L.Transition.getTime();
+	},
+
+	_step: function () {
+		var time = L.Transition.getTime(),
+			elapsed = time - this._startTime,
+			duration = this.options.duration * 1000;
+
+		if (elapsed < duration) {
+			this._runFrame(this._cubicBezier(elapsed / duration));
+		} else {
+			this._runFrame(1);
+			this._complete();
+		}
+	},
+
+	_runFrame: function (percentComplete) {
+		var setters = L.Transition.CUSTOM_PROPS_SETTERS,
+			prop, p, value;
+
+		for (prop in this._props) {
+			if (this._props.hasOwnProperty(prop)) {
+				p = this._props[prop];
+				if (prop in setters) {
+					value = p.to.subtract(p.from).multiplyBy(percentComplete).add(p.from);
+					setters[prop](this._el, value);
+				} else {
+					this._el.style[prop] =
+							((p.to - p.from) * percentComplete + p.from) + p.unit;
+				}
+			}
+		}
+		this.fire('step');
+	},
+
+	_complete: function () {
+		clearInterval(this._timer);
+		this.fire('end');
+	},
+
+	_cubicBezier: function (t) {
+		var a = Math.pow(1 - t, 3),
+			b = 3 * Math.pow(1 - t, 2) * t,
+			c = 3 * (1 - t) * Math.pow(t, 2),
+			d = Math.pow(t, 3),
+			p1 = this._p1.multiplyBy(a),
+			p2 = this._p2.multiplyBy(b),
+			p3 = this._p3.multiplyBy(c),
+			p4 = this._p4.multiplyBy(d);
+
+		return p1.add(p2).add(p3).add(p4).y;
+	}
+});
+
+
+L.Map.include(!(L.Transition && L.Transition.implemented()) ? {} : {
+	setView: function (center, zoom, forceReset) {
+		zoom = this._limitZoom(zoom);
+		var zoomChanged = (this._zoom !== zoom);
+
+		if (this._loaded && !forceReset && this._layers) {
+			// difference between the new and current centers in pixels
+			var offset = this._getNewTopLeftPoint(center).subtract(this._getTopLeftPoint());
+
+			center = new L.LatLng(center.lat, center.lng);
+
+			var done = (zoomChanged ?
+						!!this._zoomToIfCenterInView && this._zoomToIfCenterInView(center, zoom, offset) :
+						this._panByIfClose(offset));
+
+			// exit if animated pan or zoom started
+			if (done) {
+				return this;
+			}
+		}
+
+		// reset the map view
+		this._resetView(center, zoom);
+
+		return this;
+	},
+
+	panBy: function (offset) {
+		if (!(offset.x || offset.y)) {
+			return this;
+		}
+
+		if (!this._panTransition) {
+			this._panTransition = new L.Transition(this._mapPane, {duration: 0.3});
+
+			this._panTransition.on('step', this._onPanTransitionStep, this);
+			this._panTransition.on('end', this._onPanTransitionEnd, this);
+		}
+		this.fire('movestart');
+
+		this._panTransition.run({
+			position: L.DomUtil.getPosition(this._mapPane).subtract(offset)
+		});
+
+		return this;
+	},
+
+	_onPanTransitionStep: function () {
+		this.fire('move');
+	},
+
+	_onPanTransitionEnd: function () {
+		this.fire('moveend');
+	},
+
+	_panByIfClose: function (offset) {
+		if (this._offsetIsWithinView(offset)) {
+			this.panBy(offset);
+			return true;
+		}
+		return false;
+	},
+
+	_offsetIsWithinView: function (offset, multiplyFactor) {
+		var m = multiplyFactor || 1,
+			size = this.getSize();
+		return (Math.abs(offset.x) <= size.x * m) &&
+				(Math.abs(offset.y) <= size.y * m);
+	}
+});
+
+
+L.Map.include(!L.DomUtil.TRANSITION ? {} : {
+	_zoomToIfCenterInView: function (center, zoom, centerOffset) {
+
+		if (this._animatingZoom) {
+			return true;
+		}
+		if (!this.options.zoomAnimation) {
+			return false;
+		}
+
+		var zoomDelta = zoom - this._zoom,
+			scale = Math.pow(2, zoomDelta),
+			offset = centerOffset.divideBy(1 - 1 / scale);
+
+		//if offset does not exceed half of the view
+		if (!this._offsetIsWithinView(offset, 1)) {
+			return false;
+		}
+
+		this._mapPane.className += ' leaflet-zoom-anim';
+
+        this
+			.fire('movestart')
+			.fire('zoomstart');
+
+		var centerPoint = this.containerPointToLayerPoint(this.getSize().divideBy(2)),
+			origin = centerPoint.add(offset);
+
+		this._prepareTileBg();
+
+		this._runAnimation(center, zoom, scale, origin);
+
+		return true;
+	},
+
+
+	_runAnimation: function (center, zoom, scale, origin) {
+		this._animatingZoom = true;
+
+		this._animateToCenter = center;
+		this._animateToZoom = zoom;
+
+		var transform = L.DomUtil.TRANSFORM;
+
+		//dumb FireFox hack, I have no idea why this magic zero translate fixes the scale transition problem
+		if (L.Browser.gecko || window.opera) {
+			this._tileBg.style[transform] += ' translate(0,0)';
+		}
+
+		var scaleStr;
+
+		// Android doesn't like translate/scale chains, transformOrigin + scale works better but
+		// it breaks touch zoom which Anroid doesn't support anyway, so that's a really ugly hack
+		// TODO work around this prettier
+		if (L.Browser.android) {
+			this._tileBg.style[transform + 'Origin'] = origin.x + 'px ' + origin.y + 'px';
+			scaleStr = 'scale(' + scale + ')';
+		} else {
+			scaleStr = L.DomUtil.getScaleString(scale, origin);
+		}
+
+		L.Util.falseFn(this._tileBg.offsetWidth); //hack to make sure transform is updated before running animation
+
+		var options = {};
+		options[transform] = this._tileBg.style[transform] + ' ' + scaleStr;
+		this._tileBg.transition.run(options);
+	},
+
+	_prepareTileBg: function () {
+		if (!this._tileBg) {
+			this._tileBg = this._createPane('leaflet-tile-pane', this._mapPane);
+			this._tileBg.style.zIndex = 1;
+		}
+
+		var tilePane = this._tilePane,
+			tileBg = this._tileBg;
+
+		// prepare the background pane to become the main tile pane
+		//tileBg.innerHTML = '';
+		tileBg.style[L.DomUtil.TRANSFORM] = '';
+		tileBg.style.visibility = 'hidden';
+
+		// tells tile layers to reinitialize their containers
+		tileBg.empty = true;
+		tilePane.empty = false;
+
+		this._tilePane = this._panes.tilePane = tileBg;
+		this._tileBg = tilePane;
+
+		if (!this._tileBg.transition) {
+			this._tileBg.transition = new L.Transition(this._tileBg, {duration: 0.3, easing: 'cubic-bezier(0.25,0.1,0.25,0.75)'});
+			this._tileBg.transition.on('end', this._onZoomTransitionEnd, this);
+		}
+
+		this._stopLoadingBgTiles();
+	},
+
+	// stops loading all tiles in the background layer
+	_stopLoadingBgTiles: function () {
+		var tiles = [].slice.call(this._tileBg.getElementsByTagName('img'));
+
+		for (var i = 0, len = tiles.length; i < len; i++) {
+			if (!tiles[i].complete) {
+				// tiles[i].src = '' - evil, doesn't cancel the request!
+				tiles[i].parentNode.removeChild(tiles[i]);
+				tiles[i] = null;
+			}
+		}
+	},
+
+	_onZoomTransitionEnd: function () {
+		this._restoreTileFront();
+
+		L.Util.falseFn(this._tileBg.offsetWidth);
+		this._resetView(this._animateToCenter, this._animateToZoom, true, true);
+
+		this._mapPane.className = this._mapPane.className.replace(' leaflet-zoom-anim', ''); //TODO toggleClass util
+		this._animatingZoom = false;
+	},
+
+	_restoreTileFront: function () {
+		this._tilePane.innerHTML = '';
+		this._tilePane.style.visibility = '';
+		this._tilePane.style.zIndex = 2;
+		this._tileBg.style.zIndex = 1;
+	},
+
+	_clearTileBg: function () {
+		if (!this._animatingZoom && !this.touchZoom._zooming) {
+			this._tileBg.innerHTML = '';
+		}
+	}
+});
+
+
+/*
+ * Provides L.Map with convenient shortcuts for W3C geolocation.
+ */
+
+L.Map.include({
+	locate: function (/*Object*/ options) {
+
+		this._locationOptions = options = L.Util.extend({
+			watch: false,
+			setView: false,
+			maxZoom: Infinity,
+			timeout: 10000,
+			maximumAge: 0,
+			enableHighAccuracy: false
+		}, options);
+
+		if (!navigator.geolocation) {
+			return this.fire('locationerror', {
+				code: 0,
+				message: "Geolocation not supported."
+			});
+		}
+
+		var onResponse = L.Util.bind(this._handleGeolocationResponse, this),
+			onError = L.Util.bind(this._handleGeolocationError, this);
+
+		if (options.watch) {
+			this._locationWatchId = navigator.geolocation.watchPosition(onResponse, onError, options);
+		} else {
+			navigator.geolocation.getCurrentPosition(onResponse, onError, options);
+		}
+		return this;
+	},
+
+	stopLocate: function () {
+		if (navigator.geolocation) {
+			navigator.geolocation.clearWatch(this._locationWatchId);
+		}
+	},
+
+	locateAndSetView: function (maxZoom, options) {
+		options = L.Util.extend({
+			maxZoom: maxZoom || Infinity,
+			setView: true
+		}, options);
+		return this.locate(options);
+	},
+
+	_handleGeolocationError: function (error) {
+		var c = error.code,
+			message = (c === 1 ? "permission denied" :
+				(c === 2 ? "position unavailable" : "timeout"));
+
+		if (this._locationOptions.setView && !this._loaded) {
+			this.fitWorld();
+		}
+
+		this.fire('locationerror', {
+			code: c,
+			message: "Geolocation error: " + message + "."
+		});
+	},
+
+	_handleGeolocationResponse: function (pos) {
+		var latAccuracy = 180 * pos.coords.accuracy / 4e7,
+			lngAccuracy = latAccuracy * 2,
+			lat = pos.coords.latitude,
+			lng = pos.coords.longitude,
+			latlng = new L.LatLng(lat, lng);
+
+		var sw = new L.LatLng(lat - latAccuracy, lng - lngAccuracy),
+			ne = new L.LatLng(lat + latAccuracy, lng + lngAccuracy),
+			bounds = new L.LatLngBounds(sw, ne);
+
+		if (this._locationOptions.setView) {
+			var zoom = Math.min(this.getBoundsZoom(bounds), this._locationOptions.maxZoom);
+			this.setView(latlng, zoom);
+		}
+
+		this.fire('locationfound', {
+			latlng: latlng,
+			bounds: bounds,
+			accuracy: pos.coords.accuracy
+		});
+	}
+});
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/lib/leaflet/leaflet.css	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,323 @@
+/* required styles */
+
+.leaflet-map-pane,
+.leaflet-tile,
+.leaflet-marker-icon,
+.leaflet-marker-shadow,
+.leaflet-tile-pane,
+.leaflet-overlay-pane,
+.leaflet-shadow-pane,
+.leaflet-marker-pane,
+.leaflet-popup-pane,
+.leaflet-overlay-pane svg,
+.leaflet-zoom-box,
+.leaflet-image-layer { /* TODO optimize classes */
+	position: absolute;
+	}
+.leaflet-container {
+	overflow: hidden;
+	}
+.leaflet-tile-pane {
+	-webkit-transform: translate3d(0,0,0);
+	}
+.leaflet-tile,
+.leaflet-marker-icon,
+.leaflet-marker-shadow {
+	-moz-user-select: none;
+	-webkit-user-select: none;
+	user-select: none;
+	}
+.leaflet-marker-icon,
+.leaflet-marker-shadow {
+	display: block;
+	}
+.leaflet-clickable {
+	cursor: pointer;
+	}
+.leaflet-container img {
+	max-width: none !important;
+	}
+
+.leaflet-tile-pane { z-index: 2; }
+
+.leaflet-objects-pane { z-index: 3; }
+.leaflet-overlay-pane { z-index: 4; }
+.leaflet-shadow-pane { z-index: 5; }
+.leaflet-marker-pane { z-index: 6; }
+.leaflet-popup-pane { z-index: 7; }
+
+.leaflet-zoom-box {
+	width: 0;
+	height: 0;
+	}
+
+.leaflet-tile {
+	visibility: hidden;
+	}
+.leaflet-tile-loaded {
+	visibility: inherit;
+	}
+
+a.leaflet-active {
+	outline: 2px solid orange;
+	}
+
+
+/* Leaflet controls */
+
+.leaflet-control {
+	position: relative;
+	z-index: 7;
+	}
+.leaflet-top,
+.leaflet-bottom {
+	position: absolute;
+	}
+.leaflet-top {
+	top: 0;
+	}
+.leaflet-right {
+	right: 0;
+	}
+.leaflet-bottom {
+	bottom: 0;
+	}
+.leaflet-left {
+	left: 0;
+	}
+.leaflet-control {
+	float: left;
+	clear: both;
+	}
+.leaflet-right .leaflet-control {
+	float: right;
+	}
+.leaflet-top .leaflet-control {
+	margin-top: 10px;
+	}
+.leaflet-bottom .leaflet-control {
+	margin-bottom: 10px;
+	}
+.leaflet-left .leaflet-control {
+	margin-left: 10px;
+	}
+.leaflet-right .leaflet-control {
+	margin-right: 10px;
+	}
+
+.leaflet-control-zoom, .leaflet-control-layers {
+	-moz-border-radius: 7px;
+	-webkit-border-radius: 7px;
+	border-radius: 7px;
+	}
+.leaflet-control-zoom {
+	padding: 5px;
+	background: rgba(0, 0, 0, 0.25);
+	}
+.leaflet-control-zoom a {
+	background-color: rgba(255, 255, 255, 0.75);
+	}
+.leaflet-control-zoom a, .leaflet-control-layers a {
+	background-position: 50% 50%;
+	background-repeat: no-repeat;
+	display: block;
+	}
+.leaflet-control-zoom a {
+	-moz-border-radius: 4px;
+	-webkit-border-radius: 4px;
+	border-radius: 4px;
+	width: 19px;
+	height: 19px;
+	}
+.leaflet-control-zoom a:hover {
+	background-color: #fff;
+	}
+.leaflet-big-buttons .leaflet-control-zoom a {
+	width: 27px;
+	height: 27px;
+	}
+.leaflet-control-zoom-in {
+	background-image: url(images/zoom-in.png);
+	margin-bottom: 5px;
+	}
+.leaflet-control-zoom-out {
+	background-image: url(images/zoom-out.png);
+	}
+
+.leaflet-control-layers {
+	-moz-box-shadow: 0 0 7px #999;
+	-webkit-box-shadow: 0 0 7px #999;
+	box-shadow: 0 0 7px #999;
+
+	background: #f8f8f9;
+	}
+.leaflet-control-layers a {
+	background-image: url(images/layers.png);
+	width: 36px;
+	height: 36px;
+	}
+.leaflet-big-buttons .leaflet-control-layers a {
+	width: 44px;
+	height: 44px;
+	}
+.leaflet-control-layers .leaflet-control-layers-list,
+.leaflet-control-layers-expanded .leaflet-control-layers-toggle {
+	display: none;
+	}
+.leaflet-control-layers-expanded .leaflet-control-layers-list {
+	display: block;
+	position: relative;
+	}
+.leaflet-control-layers-expanded {
+	padding: 6px 10px 6px 6px;
+	font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;
+	color: #333;
+	background: #fff;
+	}
+.leaflet-control-layers input {
+	margin-top: 2px;
+	position: relative;
+	top: 1px;
+	}
+.leaflet-control-layers label {
+	display: block;
+	}
+.leaflet-control-layers-separator {
+	height: 0;
+	border-top: 1px solid #ddd;
+	margin: 5px -10px 5px -6px;
+	}
+
+.leaflet-container .leaflet-control-attribution {
+	margin: 0;
+	padding: 0 5px;
+
+	font: 11px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;
+	color: #333;
+
+	background-color: rgba(255, 255, 255, 0.7);
+
+	-moz-box-shadow: 0 0 7px #ccc;
+	-webkit-box-shadow: 0 0 7px #ccc;
+	box-shadow: 0 0 7px #ccc;
+	}
+
+
+/* Fade animations */
+
+.leaflet-fade-anim .leaflet-tile {
+	opacity: 0;
+
+	-webkit-transition: opacity 0.2s linear;
+	-moz-transition: opacity 0.2s linear;
+	-o-transition: opacity 0.2s linear;
+	transition: opacity 0.2s linear;
+	}
+.leaflet-fade-anim .leaflet-tile-loaded {
+	opacity: 1;
+	}
+
+.leaflet-fade-anim .leaflet-popup {
+	opacity: 0;
+
+	-webkit-transition: opacity 0.2s linear;
+	-moz-transition: opacity 0.2s linear;
+	-o-transition: opacity 0.2s linear;
+	transition: opacity 0.2s linear;
+	}
+.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
+	opacity: 1;
+	}
+
+.leaflet-zoom-anim .leaflet-tile {
+	-webkit-transition: none;
+	-moz-transition: none;
+	-o-transition: none;
+	transition: none;
+	}
+
+.leaflet-zoom-anim .leaflet-objects-pane {
+	visibility: hidden;
+	}
+
+
+/* Popup layout */
+
+.leaflet-popup {
+	position: absolute;
+	text-align: center;
+	-webkit-transform: translate3d(0,0,0);
+	}
+.leaflet-popup-content-wrapper {
+	padding: 1px;
+	text-align: left;
+	}
+.leaflet-popup-content {
+	margin: 19px;
+	}
+.leaflet-popup-tip-container {
+	margin: 0 auto;
+	width: 40px;
+	height: 16px;
+	position: relative;
+	overflow: hidden;
+	}
+.leaflet-popup-tip {
+	width: 15px;
+	height: 15px;
+	padding: 1px;
+
+	margin: -8px auto 0;
+
+	-moz-transform: rotate(45deg);
+	-webkit-transform: rotate(45deg);
+	-ms-transform: rotate(45deg);
+	-o-transform: rotate(45deg);
+	transform: rotate(45deg);
+	}
+.leaflet-popup-close-button {
+	position: absolute;
+	top: 9px;
+	right: 9px;
+
+	width: 10px;
+	height: 10px;
+
+	overflow: hidden;
+	}
+.leaflet-popup-content p {
+	margin: 18px 0;
+	}
+
+
+/* Visual appearance */
+
+.leaflet-container {
+	background: #ddd;
+	}
+.leaflet-container a {
+	color: #0078A8;
+	}
+.leaflet-zoom-box {
+	border: 2px dotted #05f;
+	background: white;
+	opacity: 0.5;
+	}
+.leaflet-popup-content-wrapper, .leaflet-popup-tip {
+	background: white;
+
+	box-shadow: 0 1px 10px #888;
+	-moz-box-shadow: 0 1px 10px #888;
+	 -webkit-box-shadow: 0 1px 14px #999;
+	}
+.leaflet-popup-content-wrapper {
+	-moz-border-radius: 20px;
+	-webkit-border-radius: 20px;
+	border-radius: 20px;
+	}
+.leaflet-popup-content {
+	font: 12px/1.4 "Helvetica Neue", Arial, Helvetica, sans-serif;
+	}
+.leaflet-popup-close-button {
+	background: white url(images/popup-close.png);
+	}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/lib/leaflet/leaflet.ie.css	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,48 @@
+.leaflet-tile {
+	filter: inherit;
+	}
+
+.leaflet-vml-shape {
+	width: 1px;
+	height: 1px;
+	}
+.lvml {
+	behavior: url(#default#VML); 
+	display: inline-block; 
+	position: absolute;
+	}
+	
+.leaflet-control {
+	display: inline;
+	}
+
+.leaflet-popup-tip {
+	width: 21px;
+	_width: 27px;
+	margin: 0 auto;
+	_margin-top: -3px;
+	
+	filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);
+	-ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";
+	}
+.leaflet-popup-tip-container {
+	margin-top: -1px;
+	}
+.leaflet-popup-content-wrapper, .leaflet-popup-tip {
+	border: 1px solid #bbb;
+	}
+
+.leaflet-control-zoom {
+	filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#3F000000',EndColorStr='#3F000000');
+	}
+.leaflet-control-zoom a {
+	background-color: #eee;
+	}
+.leaflet-control-zoom a:hover {
+	background-color: #fff;
+	}
+.leaflet-control-layers-toggle {
+	}
+.leaflet-control-attribution, .leaflet-control-layers {
+	background: white;
+	}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/lib/leaflet/leaflet.js	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,6 @@
+/*
+ Copyright (c) 2010-2011, CloudMade, Vladimir Agafonkin
+ Leaflet is a modern open-source JavaScript library for interactive maps.
+ http://leaflet.cloudmade.com
+*/
+(function(a){a.L={VERSION:"0.3",ROOT_URL:a.L_ROOT_URL||function(){var a=document.getElementsByTagName("script"),b=/\/?leaflet[\-\._]?([\w\-\._]*)\.js\??/,c,d,e,f;for(c=0,d=a.length;c<d;c++){e=a[c].src,f=e.match(b);if(f)return f[1]==="include"?"../../dist/":e.replace(b,"")+"/"}return""}(),noConflict:function(){return a.L=this._originalL,this},_originalL:a.L}})(this),L.Util={extend:function(a){var b=Array.prototype.slice.call(arguments,1);for(var c=0,d=b.length,e;c<d;c++){e=b[c]||{};for(var f in e)e.hasOwnProperty(f)&&(a[f]=e[f])}return a},bind:function(a,b){return function(){return a.apply(b,arguments)}},stamp:function(){var a=0,b="_leaflet_id";return function(c){return c[b]=c[b]||++a,c[b]}}(),requestAnimFrame:function(){function a(a){window.setTimeout(a,1e3/60)}var b=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||a;return function(c,d,e,f){c=d?L.Util.bind(c,d):c,e&&b===a?c():b(c,f)}}(),limitExecByInterval:function(a,b,c){function g(){d=!1,e&&(f.callee.apply(c,f),e=!1)}var d,e,f;return function(){f=arguments,d?e=!0:(d=!0,setTimeout(g,b),a.apply(c,f))}},falseFn:function(){return!1},formatNum:function(a,b){var c=Math.pow(10,b||5);return Math.round(a*c)/c},setOptions:function(a,b){a.options=L.Util.extend({},a.options,b)},getParamString:function(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(c+"="+a[c]);return"?"+b.join("&")},template:function(a,b){return a.replace(/\{ *([\w_]+) *\}/g,function(a,c){var d=b[c];if(!b.hasOwnProperty(c))throw Error("No value provided for variable "+a);return d})}},L.Class=function(){},L.Class.extend=function(a){var b=function(){this.initialize&&this.initialize.apply(this,arguments)},c=function(){};c.prototype=this.prototype;var d=new c;d.constructor=b,b.prototype=d,b.superclass=this.prototype;for(var e in this)this.hasOwnProperty(e)&&e!=="prototype"&&e!=="superclass"&&(b[e]=this[e]);return a.statics&&(L.Util.extend(b,a.statics),delete a.statics),a.includes&&(L.Util.extend.apply(null,[d].concat(a.includes)),delete a.includes),a.options&&d.options&&(a.options=L.Util.extend({},d.options,a.options)),L.Util.extend(d,a),b.extend=L.Class.extend,b.include=function(a){L.Util.extend(this.prototype,a)},b},L.Mixin={},L.Mixin.Events={addEventListener:function(a,b,c){var d=this._leaflet_events=this._leaflet_events||{};return d[a]=d[a]||[],d[a].push({action:b,context:c||this}),this},hasEventListeners:function(a){var b="_leaflet_events";return b in this&&a in this[b]&&this[b][a].length>0},removeEventListener:function(a,b,c){if(!this.hasEventListeners(a))return this;for(var d=0,e=this._leaflet_events,f=e[a].length;d<f;d++)if(e[a][d].action===b&&(!c||e[a][d].context===c))return e[a].splice(d,1),this;return this},fireEvent:function(a,b){if(!this.hasEventListeners(a))return this;var c=L.Util.extend({type:a,target:this},b),d=this._leaflet_events[a].slice();for(var e=0,f=d.length;e<f;e++)d[e].action.call(d[e].context||this,c);return this}},L.Mixin.Events.on=L.Mixin.Events.addEventListener,L.Mixin.Events.off=L.Mixin.Events.removeEventListener,L.Mixin.Events.fire=L.Mixin.Events.fireEvent,function(){var a=navigator.userAgent.toLowerCase(),b=!!window.ActiveXObject,c=a.indexOf("webkit")!==-1,d=typeof orientation!="undefined"?!0:!1,e=a.indexOf("android")!==-1,f=window.opera;L.Browser={ie:b,ie6:b&&!window.XMLHttpRequest,webkit:c,webkit3d:c&&"WebKitCSSMatrix"in window&&"m11"in new window.WebKitCSSMatrix,gecko:a.indexOf("gecko")!==-1,opera:f,android:e,mobileWebkit:d&&c,mobileOpera:d&&f,mobile:d,touch:function(){var a=!1,b="ontouchstart";if(b in document.documentElement)return!0;var c=document.createElement("div");return!c.setAttribute||!c.removeAttribute?!1:(c.setAttribute(b,"return;"),typeof c[b]=="function"&&(a=!0),c.removeAttribute(b),c=null,a)}()}}(),L.Point=function(a,b,c){this.x=c?Math.round(a):a,this.y=c?Math.round(b):b},L.Point.prototype={add:function(a){return this.clone()._add(a)},_add:function(a){return this.x+=a.x,this.y+=a.y,this},subtract:function(a){return this.clone()._subtract(a)},_subtract:function(a){return this.x-=a.x,this.y-=a.y,this},divideBy:function(a,b){return new L.Point(this.x/a,this.y/a,b)},multiplyBy:function(a){return new L.Point(this.x*a,this.y*a)},distanceTo:function(a){var b=a.x-this.x,c=a.y-this.y;return Math.sqrt(b*b+c*c)},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},clone:function(){return new L.Point(this.x,this.y)},toString:function(){return"Point("+L.Util.formatNum(this.x)+", "+L.Util.formatNum(this.y)+")"}},L.Bounds=L.Class.extend({initialize:function(a,b){if(!a)return;var c=a instanceof Array?a:[a,b];for(var d=0,e=c.length;d<e;d++)this.extend(c[d])},extend:function(a){!this.min&&!this.max?(this.min=new L.Point(a.x,a.y),this.max=new L.Point(a.x,a.y)):(this.min.x=Math.min(a.x,this.min.x),this.max.x=Math.max(a.x,this.max.x),this.min.y=Math.min(a.y,this.min.y),this.max.y=Math.max(a.y,this.max.y))},getCenter:function(a){return new L.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,a)},contains:function(a){var b,c;return a instanceof L.Bounds?(b=a.min,c=a.max):b=c=a,b.x>=this.min.x&&c.x<=this.max.x&&b.y>=this.min.y&&c.y<=this.max.y},intersects:function(a){var b=this.min,c=this.max,d=a.min,e=a.max,f=e.x>=b.x&&d.x<=c.x,g=e.y>=b.y&&d.y<=c.y;return f&&g}}),L.Transformation=L.Class.extend({initialize:function(a,b,c,d){this._a=a,this._b=b,this._c=c,this._d=d},transform:function(a,b){return this._transform(a.clone(),b)},_transform:function(a,b){return b=b||1,a.x=b*(this._a*a.x+this._b),a.y=b*(this._c*a.y+this._d),a},untransform:function(a,b){return b=b||1,new L.Point((a.x/b-this._b)/this._a,(a.y/b-this._d)/this._c)}}),L.DomUtil={get:function(a){return typeof a=="string"?document.getElementById(a):a},getStyle:function(a,b){var c=a.style[b];!c&&a.currentStyle&&(c=a.currentStyle[b]);if(!c||c==="auto"){var d=document.defaultView.getComputedStyle(a,null);c=d?d[b]:null}return c==="auto"?null:c},getViewportOffset:function(a){var b=0,c=0,d=a,e=document.body;do{b+=d.offsetTop||0,c+=d.offsetLeft||0;if(d.offsetParent===e&&L.DomUtil.getStyle(d,"position")==="absolute")break;d=d.offsetParent}while(d);d=a;do{if(d===e)break;b-=d.scrollTop||0,c-=d.scrollLeft||0,d=d.parentNode}while(d);return new L.Point(c,b)},create:function(a,b,c){var d=document.createElement(a);return d.className=b,c&&c.appendChild(d),d},disableTextSelection:function(){document.selection&&document.selection.empty&&document.selection.empty(),this._onselectstart||(this._onselectstart=document.onselectstart,document.onselectstart=L.Util.falseFn)},enableTextSelection:function(){document.onselectstart=this._onselectstart,this._onselectstart=null},hasClass:function(a,b){return a.className.length>0&&RegExp("(^|\\s)"+b+"(\\s|$)").test(a.className)},addClass:function(a,b){L.DomUtil.hasClass(a,b)||(a.className+=(a.className?" ":"")+b)},removeClass:function(a,b){a.className=a.className.replace(/(\S+)\s*/g,function(a,c){return c===b?"":a}).replace(/^\s+/,"")},setOpacity:function(a,b){L.Browser.ie?a.style.filter="alpha(opacity="+Math.round(b*100)+")":a.style.opacity=b},testProp:function(a){var b=document.documentElement.style;for(var c=0;c<a.length;c++)if(a[c]in b)return a[c];return!1},getTranslateString:function(a){return L.DomUtil.TRANSLATE_OPEN+a.x+"px,"+a.y+"px"+L.DomUtil.TRANSLATE_CLOSE},getScaleString:function(a,b){var c=L.DomUtil.getTranslateString(b),d=" scale("+a+") ",e=L.DomUtil.getTranslateString(b.multiplyBy(-1));return c+d+e},setPosition:function(a,b){a._leaflet_pos=b,L.Browser.webkit?a.style[L.DomUtil.TRANSFORM]=L.DomUtil.getTranslateString(b):(a.style.left=b.x+"px",a.style.top=b.y+"px")},getPosition:function(a){return a._leaflet_pos}},L.Util.extend(L.DomUtil,{TRANSITION:L.DomUtil.testProp(["transition","webkitTransition","OTransition","MozTransition","msTransition"]),TRANSFORM:L.DomUtil.testProp(["transformProperty","WebkitTransform","OTransform","MozTransform","msTransform"]),TRANSLATE_OPEN:"translate"+(L.Browser.webkit3d?"3d(":"("),TRANSLATE_CLOSE:L.Browser.webkit3d?",0)":")"}),L.LatLng=function(a,b,c){var d=parseFloat(a),e=parseFloat(b);if(isNaN(d)||isNaN(e))throw Error("Invalid LatLng object: ("+a+", "+b+")");c!==!0&&(d=Math.max(Math.min(d,90),-90),e=(e+180)%360+(e<-180||e===180?180:-180)),this.lat=d,this.lng=e},L.Util.extend(L.LatLng,{DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,MAX_MARGIN:1e-9}),L.LatLng.prototype={equals:function(a){if(a instanceof L.LatLng){var b=Math.max(Math.abs(this.lat-a.lat),Math.abs(this.lng-a.lng));return b<=L.LatLng.MAX_MARGIN}return!1},toString:function(){return"LatLng("+L.Util.formatNum(this.lat)+", "+L.Util.formatNum(this.lng)+")"},distanceTo:function(a){var b=6378137,c=L.LatLng.DEG_TO_RAD,d=(a.lat-this.lat)*c,e=(a.lng-this.lng)*c,f=this.lat*c,g=a.lat*c,h=Math.sin(d/2),i=Math.sin(e/2),j=h*h+i*i*Math.cos(f)*Math.cos(g);return b*2*Math.atan2(Math.sqrt(j),Math.sqrt(1-j))}},L.LatLngBounds=L.Class.extend({initialize:function(a,b){if(!a)return;var c=a instanceof Array?a:[a,b];for(var d=0,e=c.length;d<e;d++)this.extend(c[d])},extend:function(a){!this._southWest&&!this._northEast?(this._southWest=new L.LatLng(a.lat,a.lng,!0),this._northEast=new L.LatLng(a.lat,a.lng,!0)):(this._southWest.lat=Math.min(a.lat,this._southWest.lat),this._southWest.lng=Math.min(a.lng,this._southWest.lng),this._northEast.lat=Math.max(a.lat,this._northEast.lat),this._northEast.lng=Math.max(a.lng,this._northEast.lng))},getCenter:function(){return new L.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new L.LatLng(this._northEast.lat,this._southWest.lng,!0)},getSouthEast:function(){return new L.LatLng(this._southWest.lat,this._northEast.lng,!0)},contains:function(a){var b=this._southWest,c=this._northEast,d,e;return a instanceof L.LatLngBounds?(d=a.getSouthWest(),e=a.getNorthEast()):d=e=a,d.lat>=b.lat&&e.lat<=c.lat&&d.lng>=b.lng&&e.lng<=c.lng},intersects:function(a){var b=this._southWest,c=this._northEast,d=a.getSouthWest(),e=a.getNorthEast(),f=e.lat>=b.lat&&d.lat<=c.lat,g=e.lng>=b.lng&&d.lng<=c.lng;return f&&g},toBBoxString:function(){var a=this._southWest,b=this._northEast;return[a.lng,a.lat,b.lng,b.lat].join(",")}}),L.Projection={},L.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(a){var b=L.LatLng.DEG_TO_RAD,c=this.MAX_LATITUDE,d=Math.max(Math.min(c,a.lat),-c),e=a.lng*b,f=d*b;return f=Math.log(Math.tan(Math.PI/4+f/2)),new L.Point(e,f)},unproject:function(a,b){var c=L.LatLng.RAD_TO_DEG,d=a.x*c,e=(2*Math.atan(Math.exp(a.y))-Math.PI/2)*c;return new L.LatLng(e,d,b)}},L.Projection.LonLat={project:function(a){return new L.Point(a.lng,a.lat)},unproject:function(a,b){return new L.LatLng(a.y,a.x,b)}},L.CRS={latLngToPoint:function(a,b){var c=this.projection.project(a);return this.transformation._transform(c,b)},pointToLatLng:function(a,b,c){var d=this.transformation.untransform(a,b);return this.projection.unproject(d,c)},project:function(a){return this.projection.project(a)}},L.CRS.EPSG3857=L.Util.extend({},L.CRS,{code:"EPSG:3857",projection:L.Projection.SphericalMercator,transformation:new L.Transformation(.5/Math.PI,.5,-0.5/Math.PI,.5),project:function(a){var b=this.projection.project(a),c=6378137;return b.multiplyBy(c)}}),L.CRS.EPSG900913=L.Util.extend({},L.CRS.EPSG3857,{code:"EPSG:900913"}),L.CRS.EPSG4326=L.Util.extend({},L.CRS,{code:"EPSG:4326",projection:L.Projection.LonLat,transformation:new L.Transformation(1/360,.5,-1/360,.5)}),L.Map=L.Class.extend({includes:L.Mixin.Events,options:{crs:L.CRS.EPSG3857||L.CRS.EPSG4326,scale:function(a){return 256*Math.pow(2,a)},center:null,zoom:null,layers:[],dragging:!0,touchZoom:L.Browser.touch&&!L.Browser.android,scrollWheelZoom:!L.Browser.touch,doubleClickZoom:!0,boxZoom:!0,zoomControl:!0,attributionControl:!0,fadeAnimation:L.DomUtil.TRANSITION&&!L.Browser.android,zoomAnimation:L.DomUtil.TRANSITION&&!L.Browser.android&&!L.Browser.mobileOpera,trackResize:!0,closePopupOnClick:!0,worldCopyJump:!0},initialize:function(a,b){L.Util.setOptions(this,b),this._container=L.DomUtil.get(a);if(this._container._leaflet)throw Error("Map container is already initialized.");this._container._leaflet=!0,this._initLayout(),L.DomEvent&&(this._initEvents(),L.Handler&&this._initInteraction(),L.Control&&this._initControls()),this.options.maxBounds&&this.setMaxBounds(this.options.maxBounds);var c=this.options.center,d=this.options.zoom;c!==null&&d!==null&&this.setView(c,d,!0);var e=this.options.layers;e=e instanceof Array?e:[e],this._tileLayersNum=0,this._initLayers(e)},setView:function(a,b){return this._resetView(a,this._limitZoom(b)),this},setZoom:function(a){return this.setView(this.getCenter(),a)},zoomIn:function(){return this.setZoom(this._zoom+1)},zoomOut:function(){return this.setZoom(this._zoom-1)},fitBounds:function(a){var b=this.getBoundsZoom(a);return this.setView(a.getCenter(),b)},fitWorld:function(){var a=new L.LatLng(-60,-170),b=new L.LatLng(85,179);return this.fitBounds(new L.LatLngBounds(a,b))},panTo:function(a){return this.setView(a,this._zoom)},panBy:function(a){return this.fire("movestart"),this._rawPanBy(a),this.fire("move"),this.fire("moveend"),this},setMaxBounds:function(a){this.options.maxBounds=a;if(!a)return this._boundsMinZoom=null,this;var b=this.getBoundsZoom(a,!0);return this._boundsMinZoom=b,this._loaded&&(this._zoom<b?this.setView(a.getCenter(),b):this.panInsideBounds(a)),this},panInsideBounds:function(a){var b=this.getBounds(),c=this.project(b.getSouthWest()),d=this.project(b.getNorthEast()),e=this.project(a.getSouthWest()),f=this.project(a.getNorthEast()),g=0,h=0;return d.y<f.y&&(h=f.y-d.y),d.x>f.x&&(g=f.x-d.x),c.y>e.y&&(h=e.y-c.y),c.x<e.x&&(g=e.x-c.x),this.panBy(new L.Point(g,h,!0))},addLayer:function(a,b){var c=L.Util.stamp(a);if(this._layers[c])return this;this._layers[c]=a,a.options&&!isNaN(a.options.maxZoom)&&(this._layersMaxZoom=Math.max(this._layersMaxZoom||0,a.options.maxZoom)),a.options&&!isNaN(a.options.minZoom)&&(this._layersMinZoom=Math.min(this._layersMinZoom||Infinity,a.options.minZoom)),this.options.zoomAnimation&&L.TileLayer&&a instanceof L.TileLayer&&(this._tileLayersNum++,a.on("load",this._onTileLayerLoad,this)),this.attributionControl&&a.getAttribution&&this.attributionControl.addAttribution(a.getAttribution());var d=function(){a.onAdd(this,b),this.fire("layeradd",{layer:a})};return this._loaded?d.call(this):this.on("load",d,this),this},removeLayer:function(a){var b=L.Util.stamp(a);return this._layers[b]&&(a.onRemove(this),delete this._layers[b],this.options.zoomAnimation&&L.TileLayer&&a instanceof L.TileLayer&&(this._tileLayersNum--,a.off("load",this._onTileLayerLoad,this)),this.attributionControl&&a.getAttribution&&this.attributionControl.removeAttribution(a.getAttribution()),this.fire("layerremove",{layer:a})),this},hasLayer:function(a){var b=L.Util.stamp(a);return this._layers.hasOwnProperty(b)},invalidateSize:function(){var a=this.getSize();return this._sizeChanged=!0,this.options.maxBounds&&this.setMaxBounds(this.options.maxBounds),this._loaded?(this._rawPanBy(a.subtract(this.getSize()).divideBy(2,!0)),this.fire("move"),clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(L.Util.bind(function(){this.fire("moveend")},this),200),this):this},getCenter:function(a){var b=this.getSize().divideBy(2),c=this._getTopLeftPoint().add(b);return this.unproject(c,this._zoom,a)},getZoom:function(){return this._zoom},getBounds:function(){var a=this.getPixelBounds(),b=this.unproject(new L.Point(a.min.x,a.max.y),this._zoom,!0),c=this.unproject(new L.Point(a.max.x,a.min.y),this._zoom,!0);return new L.LatLngBounds(b,c)},getMinZoom:function(){var a=this.options.minZoom||0,b=this._layersMinZoom||0,c=this._boundsMinZoom||0;return Math.max(a,b,c)},getMaxZoom:function(){var a=isNaN(this.options.maxZoom)?Infinity:this.options.maxZoom,b=this._layersMaxZoom||Infinity;return Math.min(a,b)},getBoundsZoom:function(a,b){var c=this.getSize(),d=this.options.minZoom||0,e=this.getMaxZoom(),f=a.getNorthEast(),g=a.getSouthWest(),h,i,j,k=!0;b&&d--;do d++,i=this.project(f,d),j=this.project(g,d),h=new L.Point(i.x-j.x,j.y-i.y),b?k=h.x<c.x||h.y<c.y:k=h.x<=c.x&&h.y<=c.y;while(k&&d<=e);return k&&b?null:b?d:d-1},getSize:function(){if(!this._size||this._sizeChanged)this._size=new L.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1;return this._size},getPixelBounds:function(){var a=this._getTopLeftPoint(),b=this.getSize();return new L.Bounds(a,a.add(b))},getPixelOrigin:function(){return this._initialTopLeftPoint},getPanes:function(){return this._panes},mouseEventToContainerPoint:function(a){return L.DomEvent.getMousePosition(a,this._container)},mouseEventToLayerPoint:function(a){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(a))},mouseEventToLatLng:function(a){return this.layerPointToLatLng(this.mouseEventToLayerPoint(a))},containerPointToLayerPoint:function(a){return a.subtract(L.DomUtil.getPosition(this._mapPane))},layerPointToContainerPoint:function(a){return a.add(L.DomUtil.getPosition(this._mapPane))},layerPointToLatLng:function(a){return this.unproject(a.add(this._initialTopLeftPoint))},latLngToLayerPoint:function(a){return this.project(a)._round()._subtract(this._initialTopLeftPoint)},project:function(a,b){return b=typeof b=="undefined"?this._zoom:b,this.options.crs.latLngToPoint(a,this.options.scale(b))},unproject:function(a,b,c){return b=typeof b=="undefined"?this._zoom:b,this.options.crs.pointToLatLng(a,this.options.scale(b),c)},_initLayout:function(){var a=this._container;a.innerHTML="",a.className+=" leaflet-container",this.options.fadeAnimation&&(a.className+=" leaflet-fade-anim");var b=L.DomUtil.getStyle(a,"position");b!=="absolute"&&b!=="relative"&&(a.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var a=this._panes={};this._mapPane=a.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=a.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),this._objectsPane=a.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),a.shadowPane=this._createPane("leaflet-shadow-pane"),a.overlayPane=this._createPane("leaflet-overlay-pane"),a.markerPane=this._createPane("leaflet-marker-pane"),a.popupPane=this._createPane("leaflet-popup-pane")},_createPane:function(a,b){return L.DomUtil.create("div",a,b||this._objectsPane)},_resetView:function(a,b,c,d){var e=this._zoom!==b;d||(this.fire("movestart"),e&&this.fire("zoomstart")),this._zoom=b,this._initialTopLeftPoint=this._getNewTopLeftPoint(a);if(!c)L.DomUtil.setPosition(this._mapPane,new L.Point(0,0));else{var f=L.DomUtil.getPosition(this._mapPane);this._initialTopLeftPoint._add(f)}this._tileLayersToLoad=this._tileLayersNum,this.fire("viewreset",{hard:!c}),this.fire("move"),(e||d)&&this.fire("zoomend"),this.fire("moveend"),this._loaded||(this._loaded=!0,this.fire("load"))},_initLayers:function(a){this._layers={};var b,c;for(b=0,c=a.length;b<c;b++)this.addLayer(a[b])},_initControls:function(){this.options.zoomControl&&this.addControl(new L.Control.Zoom),this.options.attributionControl&&(this.attributionControl=new L.Control.Attribution,this.addControl(this.attributionControl))},_rawPanBy:function(a){var b=L.DomUtil.getPosition(this._mapPane);L.DomUtil.setPosition(this._mapPane,b.subtract(a))},_initEvents:function(){L.DomEvent.addListener(this._container,"click",this._onMouseClick,this);var a=["dblclick","mousedown","mouseenter","mouseleave","mousemove","contextmenu"],b,c;for(b=0,c=a.length;b<c;b++)L.DomEvent.addListener(this._container,a[b],this._fireMouseEvent,this);this.options.trackResize&&L.DomEvent.addListener(window,"resize",this._onResize,this)},_onResize:function(){L.Util.requestAnimFrame(this.invalidateSize,this,!1,this._container)},_onMouseClick:function(a){if(!this._loaded||this.dragging&&this.dragging.moved())return;this.fire("pre"+a.type),this._fireMouseEvent(a)},_fireMouseEvent:function(a){if(!this._loaded)return;var b=a.type;b=b==="mouseenter"?"mouseover":b==="mouseleave"?"mouseout":b;if(!this.hasEventListeners(b))return;b==="contextmenu"&&L.DomEvent.preventDefault(a),this.fire(b,{latlng:this.mouseEventToLatLng(a),layerPoint:this.mouseEventToLayerPoint(a)})},_initInteraction:function(){var a={dragging:L.Map.Drag,touchZoom:L.Map.TouchZoom,doubleClickZoom:L.Map.DoubleClickZoom,scrollWheelZoom:L.Map.ScrollWheelZoom,boxZoom:L.Map.BoxZoom},b;for(b in a)a.hasOwnProperty(b)&&a[b]&&(this[b]=new a[b](this),this.options[b]&&this[b].enable())},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this._tileBg&&(clearTimeout(this._clearTileBgTimer),this._clearTileBgTimer=setTimeout(L.Util.bind(this._clearTileBg,this),500))},_getTopLeftPoint:function(){if(!this._loaded)throw Error("Set map center and zoom first.");var a=L.DomUtil.getPosition(this._mapPane);return this._initialTopLeftPoint.subtract(a)},_getNewTopLeftPoint:function(a){var b=this.getSize().divideBy(2);return this.project(a).subtract(b).round()},_limitZoom:function(a){var b=this.getMinZoom(),c=this.getMaxZoom();return Math.max(b,Math.min(c,a))}}),L.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.3142,R_MAJOR:6378137,project:function(a){var b=L.LatLng.DEG_TO_RAD,c=this.MAX_LATITUDE,d=Math.max(Math.min(c,a.lat),-c),e=this.R_MAJOR,f=this.R_MINOR,g=a.lng*b*e,h=d*b,i=f/e,j=Math.sqrt(1-i*i),k=j*Math.sin(h);k=Math.pow((1-k)/(1+k),j*.5);var l=Math.tan(.5*(Math.PI*.5-h))/k;return h=-f*Math.log(l),new L.Point(g,h)},unproject:function(a,b){var c=L.LatLng.RAD_TO_DEG,d=this.R_MAJOR,e=this.R_MINOR,f=a.x*c/d,g=e/d,h=Math.sqrt(1-g*g),i=Math.exp(-a.y/e),j=Math.PI/2-2*Math.atan(i),k=15,l=1e-7,m=k,n=.1,o;while(Math.abs(n)>l&&--m>0)o=h*Math.sin(j),n=Math.PI/2-2*Math.atan(i*Math.pow((1-o)/(1+o),.5*h))-j,j+=n;return new L.LatLng(j*c,f,b)}},L.CRS.EPSG3395=L.Util.extend({},L.CRS,{code:"EPSG:3395",projection:L.Projection.Mercator,transformation:function(){var a=L.Projection.Mercator,b=a.R_MAJOR,c=a.R_MINOR;return new L.Transformation(.5/(Math.PI*b),.5,-0.5/(Math.PI*c),.5)}()}),L.TileLayer=L.Class.extend({includes:L.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",opacity:1,scheme:"xyz",continuousWorld:!1,noWrap:!1,zoomOffset:0,zoomReverse:!1,unloadInvisibleTiles:L.Browser.mobile,updateWhenIdle:L.Browser.mobile},initialize:function(a,b,c){L.Util.setOptions(this,b),this._url=a,this._urlParams=c,typeof this.options.subdomains=="string"&&(this.options.subdomains=this.options.subdomains.split(""))},onAdd:function(a,b){this._map=a,this._insertAtTheBottom=b,this._initContainer(),this._createTileProto(),a.on("viewreset",this._resetCallback,this),this.options.updateWhenIdle?a.on("moveend",this._update,this):(this._limitedUpdate=L.Util.limitExecByInterval(this._update,150,this),a.on("move",this._limitedUpdate,this)),this._reset(),this._update()},onRemove:function(a){this._map.getPanes().tilePane.removeChild(this._container),this._container=null,this._map.off("viewreset",this._resetCallback,this),this.options.updateWhenIdle?this._map.off("moveend",this._update,this):this._map.off("move",this._limitedUpdate,this)},getAttribution:function(){return this.options.attribution},setOpacity:function(a){this.options.opacity=a,this._setOpacity(a);if(L.Browser.webkit)for(var b in this._tiles)this._tiles.hasOwnProperty(b)&&(this._tiles[b].style.webkitTransform+=" translate(0,0)")},_setOpacity:function(a){a<1&&L.DomUtil.setOpacity(this._container,a)},_initContainer:function(){var a=this._map.getPanes().tilePane,b=a.firstChild;if(!this._container||a.empty)this._container=L.DomUtil.create("div","leaflet-layer"),this._insertAtTheBottom&&b?a.insertBefore(this._container,b):a.appendChild(this._container),this._setOpacity(this.options.opacity)},_resetCallback:function(a){this._reset(a.hard)},_reset:function(a){var b;for(b in this._tiles)this._tiles.hasOwnProperty(b)&&this.fire("tileunload",{tile:this._tiles[b]});this._tiles={},this.options.reuseTiles&&(this._unusedTiles=[]),a&&this._container&&(this._container.innerHTML=""),this._initContainer()},_update:function(){var a=this._map.getPixelBounds(),b=this.options.tileSize,c=new L.Point(Math.floor(a.min.x/b),Math.floor(a.min.y/b)),d=new L.Point(Math.floor(a.max.x/b),Math.floor(a.max.y/b)),e=new L.Bounds(c,d);this._addTilesFromCenterOut(e),(this.options.unloadInvisibleTiles||this.options.reuseTiles)&&this._removeOtherTiles(e)},_addTilesFromCenterOut:function(a){var b=[],c=a.getCenter();for(var d=a.min.y;d<=a.max.y;d++)for(var e=a.min.x;e<=a.max.x;e++){if(e+":"+d in this._tiles)continue;b.push(new L.Point(e,d))}b.sort(function(a,b){return a.distanceTo(c)-b.distanceTo(c)});var f=document.createDocumentFragment();this._tilesToLoad=b.length;for(var g=0,h=this._tilesToLoad;g<h;g++)this._addTile(b[g],f);this._container.appendChild(f)},_removeOtherTiles:function(a){var b,c,d,e,f;for(e in this._tiles)if(this._tiles.hasOwnProperty(e)){b=e.split(":"),c=parseInt(b[0],10),d=parseInt(b[1],10);if(c<a.min.x||c>a.max.x||d<a.min.y||d>a.max.y)f=this._tiles[e],this.fire("tileunload",{tile:f,url:f.src}),f.parentNode===this._container&&this._container.removeChild(f),this.options.reuseTiles&&this._unusedTiles.push(this._tiles[e]),delete this._tiles[e]}},_addTile:function(a,b){var c=this._getTilePos(a),d=this._map.getZoom(),e=a.x+":"+a.y,f=Math.pow(2,this._getOffsetZoom(d));if(!this.options.continuousWorld){if(!this.options.noWrap)a.x=(a.x%f+f)%f;else if(a.x<0||a.x>=f){this._tilesToLoad--;return}if(a.y<0||a.y>=f){this._tilesToLoad--;return}}var g=this._getTile();L.DomUtil.setPosition(g,c),this._tiles[e]=g,this.options.scheme==="tms"&&(a.y=f-a.y-1),this._loadTile(g,a,d),b.appendChild(g)},_getOffsetZoom:function(a){return a=this.options.zoomReverse?this.options.maxZoom-a:a,a+this.options.zoomOffset},_getTilePos:function(a){var b=this._map.getPixelOrigin(),c=this.options.tileSize;return a.multiplyBy(c).subtract(b)},getTileUrl:function(a,b){var c=this.options.subdomains,d=this.options.subdomains[(a.x+a.y)%c.length];return L.Util.template(this._url,L.Util.extend({s:d,z:this._getOffsetZoom(b),x:a.x,y:a.y},this._urlParams))},_createTileProto:function(){this._tileImg=L.DomUtil.create("img","leaflet-tile"),this._tileImg.galleryimg="no";var a=this.options.tileSize;this._tileImg.style.width=a+"px",this._tileImg.style.height=a+"px"},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var a=this._unusedTiles.pop();return this._resetTile(a),a}return this._createTile()},_resetTile:function(a){},_createTile:function(){var a=this._tileImg.cloneNode(!1);return a.onselectstart=a.onmousemove=L.Util.falseFn,a},_loadTile:function(a,b,c){a._layer=this,a.onload=this._tileOnLoad,a.onerror=this._tileOnError,a.src=this.getTileUrl(b,c)},_tileOnLoad:function(a){var b=this._layer;this.className+=" leaflet-tile-loaded",b.fire("tileload",{tile:this,url:this.src}),b._tilesToLoad--,b._tilesToLoad||b.fire("load")},_tileOnError:function(a){var b=this._layer;b.fire("tileerror",{tile:this,url:this.src});var c=b.options.errorTileUrl;c&&(this.src=c)}}),L.TileLayer.WMS=L.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(a,b){this._url=a,this.wmsParams=L.Util.extend({},this.defaultWmsParams),this.wmsParams.width=this.wmsParams.height=this.options.tileSize;for(var c in b)this.options.hasOwnProperty(c)||(this.wmsParams[c]=b[c]);L.Util.setOptions(this,b)},onAdd:function(a){var b=parseFloat(this.wmsParams.version)<1.3?"srs":"crs";this.wmsParams[b]=a.options.crs.code,L.TileLayer.prototype.onAdd.call(this,a)},getTileUrl:function(a,b){var c=this.options.tileSize,d=a.multiplyBy(c),e=d.add(new L.Point(c,c)),f=this._map.unproject(d,this._zoom,!0),g=this._map.unproject(e,this._zoom,!0),h=this._map.options.crs.project(f),i=this._map.options.crs.project(g),j=[h.x,i.y,i.x,h.y].join(",");return this._url+L.Util.getParamString(this.wmsParams)+"&bbox="+j}}),L.TileLayer.Canvas=L.TileLayer.extend({options:{async:!1},initialize:function(a){L.Util.setOptions(this,a)},redraw:function(){for(var a in this._tiles){var b=this._tiles[a];this._redrawTile(b)}},_redrawTile:function(a){this.drawTile(a,a._tilePoint,a._zoom)},_createTileProto:function(){this._canvasProto=L.DomUtil.create("canvas","leaflet-tile");var a=this.options.tileSize;this._canvasProto.width=a,this._canvasProto.height=a},_createTile:function(){var a=this._canvasProto.cloneNode(!1);return a.onselectstart=a.onmousemove=L.Util.falseFn,a},_loadTile:function(a,b,c){a._layer=this,a._tilePoint=b,a._zoom=c,this.drawTile(a,b,c),this.options.async||this.tileDrawn(a)},drawTile:function(a,b,c){},tileDrawn:function(a){this._tileOnLoad.call(a)}}),L.ImageOverlay=L.Class.extend({includes:L.Mixin.Events,initialize:function(a,b){this._url=a,this._bounds=b},onAdd:function(a){this._map=a,this._image||this._initImage(),a.getPanes().overlayPane.appendChild(this._image),a.on("viewreset",this._reset,this),this._reset()},onRemove:function(a){a.getPanes().overlayPane.removeChild(this._image),a.off("viewreset",this._reset,this)},_initImage:function(){this._image=L.DomUtil.create("img","leaflet-image-layer"),this._image.style.visibility="hidden",L.Util.extend(this._image,{galleryimg:"no",onselectstart:L.Util.falseFn,onmousemove:L.Util.falseFn,onload:L.Util.bind(this._onImageLoad,this),src:this._url})},_reset:function(){var a=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),b=this._map.latLngToLayerPoint(this._bounds.getSouthEast()),c=b.subtract(a);L.DomUtil.setPosition(this._image,a),this._image.style.width=c.x+"px",this._image.style.height=c.y+"px"},_onImageLoad:function(){this._image.style.visibility="",this.fire("load")}}),L.Icon=L.Class.extend({iconUrl:L.ROOT_URL+"images/marker.png",shadowUrl:L.ROOT_URL+"images/marker-shadow.png",iconSize:new L.Point(25,41),shadowSize:new L.Point(41,41),iconAnchor:new L.Point(13,41),popupAnchor:new L.Point(0,-33),initialize:function(a){a&&(this.iconUrl=a)},createIcon:function(){return this._createIcon("icon")},createShadow:function(){return this._createIcon("shadow")},_createIcon:function(a){var b=this[a+"Size"],c=this[a+"Url"];if(!c&&a==="shadow")return null;var d;return c?d=this._createImg(c):d=this._createDiv(),d.className="leaflet-marker-"+a,d.style.marginLeft=-this.iconAnchor.x+"px",d.style.marginTop=-this.iconAnchor.y+"px",b&&(d.style.width=b.x+"px",d.style.height=b.y+"px"),d},_createImg:function(a){var b;return L.Browser.ie6?(b=document.createElement("div"),b.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+a+'")'):(b=document.createElement("img"),b.src=a),b},_createDiv:function(){return document.createElement("div")}}),L.Marker=L.Class.extend({includes:L.Mixin.Events,options:{icon:new L.Icon,title:"",clickable:!0,draggable:!1,zIndexOffset:0},initialize:function(a,b){L.Util.setOptions(this,b),this._latlng=a},onAdd:function(a){this._map=a,this._initIcon(),a.on("viewreset",this._reset,this),this._reset()},onRemove:function(a){this._removeIcon(),this.closePopup&&this.closePopup(),this._map=null,a.off("viewreset",this._reset,this)},getLatLng:function(){return this._latlng},setLatLng:function(a){this._latlng=a,this._icon&&(this._reset(),this._popup&&this._popup.setLatLng(this._latlng))},setIcon:function(a){this._map&&this._removeIcon(),this.options.icon=a,this._map&&(this._initIcon(),this._reset())},_initIcon:function(){this._icon||(this._icon=this.options.icon.createIcon(),this.options.title&&(this._icon.title=this.options.title),this._initInteraction()),this._shadow||(this._shadow=this.options.icon.createShadow()),this._map._panes.markerPane.appendChild(this._icon),this._shadow&&this._map._panes.shadowPane.appendChild(this._shadow)},_removeIcon:function(){this._map._panes.markerPane.removeChild(this._icon),this._shadow&&this._map._panes.shadowPane.removeChild(this._shadow),this._icon=this._shadow=null},_reset:function(){var a=this._map.latLngToLayerPoint(this._latlng).round();L.DomUtil.setPosition(this._icon,a),this._shadow&&L.DomUtil.setPosition(this._shadow,a),this._icon.style.zIndex=a.y+this.options.zIndexOffset},_initInteraction:function(){if(this.options.clickable){this._icon.className+=" leaflet-clickable",L.DomEvent.addListener(this._icon,"click",this._onMouseClick,this);var a=["dblclick","mousedown","mouseover","mouseout"];for(var b=0;b<a.length;b++)L.DomEvent.addListener(this._icon,a[b],this._fireMouseEvent,this)}L.Handler.MarkerDrag&&(this.dragging=new L.Handler.MarkerDrag(this),this.options.draggable&&this.dragging.enable())},_onMouseClick:function(a){L.DomEvent.stopPropagation(a);if(this.dragging&&this.dragging.moved())return;this.fire(a.type)},_fireMouseEvent:function(a){this.fire(a.type),L.DomEvent.stopPropagation(a)}}),L.Popup=L.Class.extend({includes:L.Mixin.Events,options:{minWidth:50,maxWidth:300,autoPan:!0,closeButton:!0,offset:new L.Point(0,2),autoPanPadding:new L.Point(5,5),className:""},initialize:function(a,b){L.Util.setOptions(this,a),this._source=b},onAdd:function(a){this._map=a,this._container||this._initLayout(),this._updateContent(),this._container.style.opacity="0",this._map._panes.popupPane.appendChild(this._container),this._map.on("viewreset",this._updatePosition,this),this._map.options.closePopupOnClick&&this._map.on("preclick",this._close,this),this._update(),this._container.style.opacity="1",this._opened=!0},onRemove:function(a){a._panes.popupPane.removeChild(this._container),L.Util.falseFn(this._container.offsetWidth),a.off("viewreset",this._updatePosition,this),a.off("click",this._close,this),this._container.style.opacity="0",this._opened=!1},setLatLng:function(a){return this._latlng=a,this._opened&&this._update(),this},setContent:function(a){return this._content=a,this._opened&&this._update(),this},_close:function(){this._opened&&this._map.closePopup()},_initLayout:function(){this._container=L.DomUtil.create("div","leaflet-popup "+this.options.className),this.options.closeButton&&(this._closeButton=L.DomUtil.create("a","leaflet-popup-close-button",this._container),this._closeButton.href="#close",L.DomEvent.addListener(this._closeButton,"click",this._onCloseButtonClick,this)),this._wrapper=L.DomUtil.create("div","leaflet-popup-content-wrapper",this._container),L.DomEvent.disableClickPropagation(this._wrapper),this._contentNode=L.DomUtil.create("div","leaflet-popup-content",this._wrapper),this._tipContainer=L.DomUtil.create("div","leaflet-popup-tip-container",this._container),this._tip=L.DomUtil.create("div","leaflet-popup-tip",this._tipContainer)},_update:function(){this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan()},_updateContent:function(){if(!this._content)return;typeof this._content=="string"?this._contentNode.innerHTML=this._content:(this._contentNode.innerHTML="",this._contentNode.appendChild(this._content))},_updateLayout:function(){this._container.style.width="",this._container.style.whiteSpace="nowrap";var a=this._container.offsetWidth;this._container.style.width=(a>this.options.maxWidth?this.options.maxWidth:a<this.options.minWidth?this.options.minWidth:a)+"px",this._container.style.whiteSpace="",this._containerWidth=this._container.offsetWidth},_updatePosition:function(){var a=this._map.latLngToLayerPoint(this._latlng);this._containerBottom=-a.y-this.options.offset.y,this._containerLeft=a.x-Math.round(this._containerWidth/2)+this.options.offset.x,this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"},_adjustPan:function(){if(!this.options.autoPan)return;var a=this._container.offsetHeight,b=new L.Point(this._containerLeft,-a-this._containerBottom),c=this._map.layerPointToContainerPoint(b),d=new L.Point(0,0),e=this.options.autoPanPadding,f=this._map.getSize();c.x<0&&(d.x=c.x-e.x),c.x+this._containerWidth>f.x&&(d.x=c.x+this._containerWidth-f.x+e.x),c.y<0&&(d.y=c.y-e.y),c.y+a>f.y&&(d.y=c.y+a-f.y+e.y),(d.x||d.y)&&this._map.panBy(d)},_onCloseButtonClick:function(a){this._close(),L.DomEvent.stop(a)}}),L.Marker.include({openPopup:function(){return this._popup.setLatLng(this._latlng),this._map&&this._map.openPopup(this._popup),this},closePopup:function(){return this._popup&&this._popup._close(),this},bindPopup:function(a,b){return b=L.Util.extend({offset:this.options.icon.popupAnchor},b),this._popup||this.on("click",this.openPopup,this),this._popup=new L.Popup(b,this),this._popup.setContent(a),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.openPopup)),this}}),L.Map.include({openPopup:function(a){return this.closePopup(),this._popup=a,this.addLayer(a),this.fire("popupopen",{popup:this._popup}),this},closePopup:function(){return this._popup&&(this.removeLayer(this._popup),this.fire("popupclose",{popup:this._popup}),this._popup=null),this}}),L.LayerGroup=L.Class.extend({initialize:function(a){this._layers={};if(a)for(var b=0,c=a.length;b<c;b++)this.addLayer(a[b])},addLayer:function(a){var b=L.Util.stamp(a);return this._layers[b]=a,this._map&&this._map.addLayer(a),this},removeLayer:function(a){var b=L.Util.stamp(a);return delete this._layers[b],this._map&&this._map.removeLayer(a),this},clearLayers:function(){return this._iterateLayers(this.removeLayer,this),this},invoke:function(a){var b=Array.prototype.slice.call(arguments,1),c,d;for(c in this._layers)this._layers.hasOwnProperty(c)&&(d=this._layers[c],d[a]&&d[a].apply(d,b));return this},onAdd:function(a){this._map=a,this._iterateLayers(a.addLayer,a)},onRemove:function(a){this._iterateLayers(a.removeLayer,a),delete this._map},_iterateLayers:function(a,b){for(var c in this._layers)this._layers.hasOwnProperty(c)&&a.call(b,this._layers[c])}}),L.FeatureGroup=L.LayerGroup.extend({includes:L.Mixin.Events,addLayer:function(a){this._initEvents(a),L.LayerGroup.prototype.addLayer.call(this,a),this._popupContent&&a.bindPopup&&a.bindPopup(this._popupContent)},bindPopup:function(a){return this._popupContent=a,this.invoke("bindPopup",a)},setStyle:function(a){return this.invoke("setStyle",a)},_events:["click","dblclick","mouseover","mouseout"],_initEvents:function(a){for(var b=0,c=this._events.length;b<c;b++)a.on(this._events[b],this._propagateEvent,this)},_propagateEvent:function(a){a.layer=a.target,a.target=this,this.fire(a.type,a)}}),L.Path=L.Class.extend({includes:[L.Mixin.Events],statics:{CLIP_PADDING:.5},options:{stroke:!0,color:"#0033ff",weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0,updateOnMoveEnd:!0},initialize:function(a){L.Util.setOptions(this,a)},onAdd:function(a){this._map=a,this._initElements(),this._initEvents(),this.projectLatlngs(),this._updatePath(),a.on("viewreset",this.projectLatlngs,this),this._updateTrigger=this.options.updateOnMoveEnd?"moveend":"viewreset",a.on(this._updateTrigger,this._updatePath,this)},onRemove:function(a){this._map=null,a._pathRoot.removeChild(this._container),a.off("viewreset",this.projectLatlngs,this),a.off(this._updateTrigger,this._updatePath,this)},projectLatlngs:function(){},setStyle:function(a){return L.Util.setOptions(this,a),this._container&&this._updateStyle(),this},_redraw:function(){this._map&&(this.projectLatlngs(),this._updatePath())}}),L.Map.include({_updatePathViewport:function(){var a=L.Path.CLIP_PADDING,b=this.getSize(),c=L.DomUtil.getPosition(this._mapPane),d=c.multiplyBy(-1).subtract(b.multiplyBy(a)),e=d.add(b.multiplyBy(1+a*2));this._pathViewport=new L.Bounds(d,e)}}),L.Path.SVG_NS="http://www.w3.org/2000/svg",L.Browser.svg=!!document.createElementNS&&!!document.createElementNS(L.Path.SVG_NS,"svg").createSVGRect,L.Path=L.Path.extend({statics:{SVG:L.Browser.svg,_createElement:function(a){return document.createElementNS(L.Path.SVG_NS,a)}},getPathString:function(){},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=L.Path._createElement("g"),this._path=L.Path._createElement("path"),this._container.appendChild(this._path),this._map._pathRoot.appendChild(this._container)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill?this._path.setAttribute("fill-rule","evenodd"):this._path.setAttribute("fill","none"),this._updateStyle()},_updateStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight)),this.options.fill&&(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity))},_updatePath:function(){var a=this.getPathString();a||(a="M0 0"),this._path.setAttribute("d",a)},_initEvents:function(){if(this.options.clickable){L.Browser.vml||this._path.setAttribute("class","leaflet-clickable"),L.DomEvent.addListener(this._container,"click",this._onMouseClick,this);var a=["dblclick","mousedown","mouseover","mouseout","mousemove"];for(var b=0;b<a.length;b++)L.DomEvent.addListener(this._container,a[b],this._fireMouseEvent,this)}},_onMouseClick:function(a){if(this._map.dragging&&this._map.dragging.moved())return;this._fireMouseEvent(a)},_fireMouseEvent:function(a){if(!this.hasEventListeners(a.type))return;this.fire(a.type,{latlng:this._map.mouseEventToLatLng(a),layerPoint:this._map.mouseEventToLayerPoint(a)}),L.DomEvent.stopPropagation(a)}}),L.Map.include({_initPathRoot:function(){this._pathRoot||(this._pathRoot=L.Path._createElement("svg"),this._panes.overlayPane.appendChild(this._pathRoot),this.on("moveend",this._updateSvgViewport),this._updateSvgViewport())},_updateSvgViewport:function(){this._updatePathViewport();var a=this._pathViewport,b=a.min,c=a.max,d=c.x-b.x,e=c.y-b.y,f=this._pathRoot,g=this._panes.overlayPane;L.Browser.webkit&&g.removeChild(f),L.DomUtil.setPosition(f,b),f.setAttribute("width",d),f.setAttribute("height",e),f.setAttribute("viewBox",[b.x,b.y,d,e].join(" ")),L.Browser.webkit&&g.appendChild(f)}}),L.Path.include({bindPopup:function(a,b){if(!this._popup||this._popup.options!==b)this._popup=new L.Popup(b,this);return this._popup.setContent(a),this._openPopupAdded||(this.on("click",this._openPopup,this),this._openPopupAdded=!0),this},_openPopup:function(a){this._popup.setLatLng(a.latlng),this._map.openPopup(this._popup)}}),L.Browser.vml=function(){var a=document.createElement("div"),b;return a.innerHTML='<v:shape adj="1"/>',b=a.firstChild,b.style.behavior="url(#default#VML)",b&&typeof b.adj=="object"}(),L.Path=L.Browser.svg||!L.Browser.vml?L.Path:L.Path.extend({statics:{VML:!0,CLIP_PADDING:.02,_createElement:function(){try{return document.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(a){return document.createElement("<lvml:"+a+' class="lvml">')}}catch(a){return function(a){return document.createElement("<"+a+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}()},_initPath:function(){this._container=L.Path._createElement("shape"),this._container.className+=" leaflet-vml-shape"+(this.options.clickable?" leaflet-clickable":""),this._container.coordsize="1 1",this._path=L.Path._createElement("path"),this._container.appendChild(this._path),this._map._pathRoot.appendChild(this._container)},_initStyle:function(){this.options.stroke?(this._stroke=L.Path._createElement("stroke"),this._stroke.endcap="round",this._container.appendChild(this._stroke)):this._container.stroked=!1,this.options.fill?(this._container.filled=!0,this._fill=L.Path._createElement("fill"),this._container.appendChild(this._fill)):this._container.filled=!1,this._updateStyle()},_updateStyle:function(){this.options.stroke&&(this._stroke.weight=this.options.weight+"px",this._stroke.color=this.options.color,this._stroke.opacity=this.options.opacity),this.options.fill&&(this._fill.color=this.options.fillColor||this.options.color,this._fill.opacity=this.options.fillOpacity)},_updatePath:function(){this._container.style.display="none",this._path.v=this.getPathString()+" ",this._container.style.display=""}}),L.Map.include(L.Browser.svg||!L.Browser.vml?{}:{_initPathRoot:function(){this._pathRoot||(this._pathRoot=document.createElement("div"),this._pathRoot.className="leaflet-vml-container",this._panes.overlayPane.appendChild(this._pathRoot),this.on("moveend",this._updatePathViewport),this._updatePathViewport())}}),L.LineUtil={simplify:function(a,b){if(!b||!a.length)return a.slice();var c=b*b;return a=this._reducePoints(a,c),a=this._simplifyDP(a,c),a},pointToSegmentDistance:function(a,b,c){return Math.sqrt(this._sqClosestPointOnSegment(a,b,c,!0))},closestPointOnSegment:function(a,b,c){return this._sqClosestPointOnSegment(a,b,c)},_simplifyDP:function(a,b){var c=a.length,d=typeof Uint8Array!="undefined"?Uint8Array:Array,e=new d(c);e[0]=e[c-1]=1,this._simplifyDPStep(a,e,b,0,c-1);var f,g=[];for(f=0;f<c;f++)e[f]&&g.push(a[f]);return g},_simplifyDPStep:function(a,b,c,d,e){var f=0,g,h,i;for(h=d+1;h<=e-1;h++)i=this._sqClosestPointOnSegment(a[h],a[d],a[e],!0),i>f&&(g=h,f=i);f>c&&(b[g]=1,this._simplifyDPStep(a,b,c,d,g),this._simplifyDPStep(a,b,c,g,e))},_reducePoints:function(a,b){var c=[a[0]];for(var d=1,e=0,f=a.length;d<f;d++)this._sqDist(a[d],a[e])>b&&(c.push(a[d]),e=d);return e<f-1&&c.push(a[f-1]),c},clipSegment:function(a,b,c,d){var e=c.min,f=c.max,g=d?this._lastCode:this._getBitCode(a,c),h=this._getBitCode(b,c);this._lastCode=h;for(;;){if(!(g|h))return[a,b];if(g&h)return!1;var i=g||h,j=this._getEdgeIntersection(a,b,i,c),k=this._getBitCode(j,c);i===g?(a=j,g=k):(b=j,h=k)}},_getEdgeIntersection:function(a,b,c,d){var e=b.x-a.x,f=b.y-a.y,g=d.min,h=d.max;if(c&8)return new L.Point(a.x+e*(h.y-a.y)/f,h.y);if(c&4)return new L.Point(a.x+e*(g.y-a.y)/f,g.y);if(c&2)return new L.Point(h.x,a.y+f*(h.x-a.x)/e);if(c&1)return new L.Point(g.x,a.y+f*(g.x-a.x)/e)},_getBitCode:function(a,b){var c=0;return a.x<b.min.x?c|=1:a.x>b.max.x&&(c|=2),a.y<b.min.y?c|=4:a.y>b.max.y&&(c|=8),c},_sqDist:function(a,b){var c=b.x-a.x,d=b.y-a.y;return c*c+d*d},_sqClosestPointOnSegment:function(a,b,c,d){var e=b.x,f=b.y,g=c.x-e,h=c.y-f,i=g*g+h*h,j;return i>0&&(j=((a.x-e)*g+(a.y-f)*h)/i,j>1?(e=c.x,f=c.y):j>0&&(e+=g*j,f+=h*j)),g=a.x-e,h=a.y-f,d?g*g+h*h:new L.Point(e,f)}},L.Polyline=L.Path.extend({initialize:function(a,b){L.Path.prototype.initialize.call(this,b),this._latlngs=a},options:{smoothFactor:1,noClip:!1,updateOnMoveEnd:!0},projectLatlngs:function(){this._originalPoints=[];for(var a=0,b=this._latlngs.length;a<b;a++)this._originalPoints[a]=this._map.latLngToLayerPoint(this._latlngs[a])},getPathString:function(){for(var a=0,b=this._parts.length,c="";a<b;a++)c+=this._getPathPartStr(this._parts[a]);return c},getLatLngs:function(){return this._latlngs},setLatLngs:function(a){return this._latlngs=a,this._redraw(),this},addLatLng:function(a){return this._latlngs.push(a),this._redraw(),this},spliceLatLngs:function(a,b){var c=[].splice.apply(this._latlngs,arguments);return this._redraw(),c},closestLayerPoint:function(a){var b=Infinity,c=this._parts,d,e,f=null;for(var g=0,h=c.length;g<h;g++){var i=c[g];for(var j=1,k=i.length;j<k;j++){d=i[j-1],e=i[j];var l=L.LineUtil._sqClosestPointOnSegment(a,d,e);l._sqDist<b&&(b=l._sqDist,f=l)}}return f&&(f.distance=Math.sqrt(b)),f},getBounds:function(){var a=new L.LatLngBounds,b=this.getLatLngs();for(var c=0,d=b.length;c<d;c++)a.extend(b[c]);return a},_getPathPartStr:function(a){var b=L.Path.VML;for(var c=0,d=a.length,e="",f;c<d;c++)f=a[c],b&&f._round(),e+=(c?"L":"M")+f.x+" "+f.y;return e},_clipPoints:function(){var a=this._originalPoints,b=a.length,c,d,e;if(this.options.noClip){this._parts=[a];return}this._parts=[];var f=this._parts,g=this._map._pathViewport,h=L.LineUtil;for(c=0,d=0;c<b-1;c++){e=h.clipSegment(a[c],a[c+1],g,c);if(!e)continue;f[d]=f[d]||[],f[d].push(e[0]);if(e[1]!==a[c+1]||c===b-2)f[d].push(e[1]),d++}},_simplifyPoints:function(){var a=this._parts,b=L.LineUtil;for(var c=0,d=a.length;c<d;c++)a[c]=b.simplify(a[c],this.options.smoothFactor)},_updatePath:function(){this._clipPoints(),this._simplifyPoints(),L.Path.prototype._updatePath.call(this)}}),L.PolyUtil={},L.PolyUtil.clipPolygon=function(a,b){var c=b.min,d=b.max,e,f=[1,4,2,8],g,h,i,j,k,l,m,n,o=L.LineUtil;for(g=0,l=a.length;g<l;g++)a[g]._code=o._getBitCode(a[g],b);for(i=0;i<4;i++){m=f[i],e=[];for(g=0,l=a.length,h=l-1;g<l;h=g++)j=a[g],k=a[h],j._code&m?k._code&m||(n=o._getEdgeIntersection(k,j,m,b),n._code=o._getBitCode(n,b),e.push(n)):(k._code&m&&(n=o._getEdgeIntersection(k,j,m,b),n._code=o._getBitCode(n,b),e.push(n)),e.push(j));a=e}return a},L.Polygon=L.Polyline.extend({options:{fill:!0},initialize:function(a,b){L.Polyline.prototype.initialize.call(this,a,b),a&&a[0]instanceof Array&&(this._latlngs=a[0],this._holes=a.slice(1))},projectLatlngs:function(){L.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[];if(!this._holes)return;for(var a=0,b=this._holes.length,c;a<b;a++){this._holePoints[a]=[];for(var d=0,e=this._holes[a].length;d<e;d++)this._holePoints[a][d]=this._map.latLngToLayerPoint(this._holes[a][d])}},_clipPoints:function(){var a=this._originalPoints,b=[];this._parts=[a].concat(this._holePoints);if(this.options.noClip)return;for(var c=0,d=this._parts.length;c<d;c++){var e=L.PolyUtil.clipPolygon(this._parts[c],this._map._pathViewport);if(!e.length)continue;b.push(e)}this._parts=b},_getPathPartStr:function(a){var b=L.Polyline.prototype._getPathPartStr.call(this,a);return b+(L.Browser.svg?"z":"x")}}),function(){function a(a){return L.FeatureGroup.extend({initialize:function(a,b){this._layers={},this._options=b,this.setLatLngs(a)},setLatLngs:function(b){var c=0,d=b.length;this._iterateLayers(function(a){c<d?a.setLatLngs(b[c++]):this.removeLayer(a)},this);while(c<d)this.addLayer(new a(b[c++],this._options))}})}L.MultiPolyline=a(L.Polyline),L.MultiPolygon=a(L.Polygon)}(),L.Circle=L.Path.extend({initialize:function(a,b,c){L.Path.prototype.initialize.call(this,c),this._latlng=a,this._mRadius=b},options:{fill:!0},setLatLng:function(a){return this._latlng=a,this._redraw(),this},setRadius:function(a){return this._mRadius=a,this._redraw(),this},projectLatlngs:function(){var a=40075017,b=a*Math.cos(L.LatLng.DEG_TO_RAD*this._latlng.lat),c=this._mRadius/b*360,d=new L.LatLng(this._latlng.lat,this._latlng.lng-c,!0),e=this._map.latLngToLayerPoint(d);this._point=this._map.latLngToLayerPoint(this._latlng),this._radius=Math.round(this._point.x-e.x)},getPathString:function(){var a=this._point,b=this._radius;return this._checkIfEmpty()?"":L.Browser.svg?"M"+a.x+","+(a.y-b)+"A"+b+","+b+",0,1,1,"+(a.x-.1)+","+(a.y-b)+" z":(a._round(),b=Math.round(b),"AL "+a.x+","+a.y+" "+b+","+b+" 0,"+23592600)},_checkIfEmpty:function(){var a=this._map._pathViewport,b=this._radius,c=this._point;return c.x-b>a.max.x||c.y-b>a.max.y||c.x+b<a.min.x||c.y+b<a.min.y}}),L.CircleMarker=L.Circle.extend({options:{radius:10,weight:2},initialize:function(a,b){L.Circle.prototype.initialize.call(this,a,null,b),this._radius=this.options.radius},projectLatlngs:function(){this._point=this._map.latLngToLayerPoint(this._latlng)},setRadius:function(a){return this._radius=a,this._redraw(),this}}),L.Browser.canvas=function(){return!!document.createElement("canvas").getContext}(),L.Path=L.Path.SVG&&!window.L_PREFER_CANVAS||!L.Browser.canvas?L.Path:L.Path.extend({statics:{CANVAS:!0,SVG:!1},options:{updateOnMoveEnd:!0},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){this.options.stroke&&(this._ctx.lineWidth=this.options.weight,this._ctx.strokeStyle=this.options.color),this.options.fill&&(this._ctx.fillStyle=this.options.fillColor||this.options.color)},_drawPath:function(){var a,b,c,d,e,f;this._ctx.beginPath();for(a=0,c=this._parts.length;a<c;a++){for(b=0,d=this._parts[a].length;b<d;b++)e=this._parts[a][b],f=(b===0?"move":"line")+"To",this._ctx[f](e.x,e.y);this instanceof L.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(this._checkIfEmpty())return;this._drawPath(),this._ctx.save(),this._updateStyle();var a=this.options.opacity,b=this.options.fillOpacity;this.options.fill&&(b<1&&(this._ctx.globalAlpha=b),this._ctx.fill()),this.options.stroke&&(a<1&&(this._ctx.globalAlpha=a),this._ctx.stroke()),this._ctx.restore()},_initEvents:function(){this.options.clickable&&this._map.on("click",this._onClick,this)},_onClick:function(a){this._containsPoint(a.layerPoint)&&this.fire("click",a)},onRemove:function(a){a.off("viewreset",this._projectLatlngs,this),a.off(this._updateTrigger,this._updatePath,this),a.fire(this._updateTrigger)}}),L.Map.include(L.Path.SVG&&!window.L_PREFER_CANVAS||!L.Browser.canvas?{}:{_initPathRoot:function(){var a=this._pathRoot,b;a||(a=this._pathRoot=document.createElement("canvas"),a.style.position="absolute",b=this._canvasCtx=a.getContext("2d"),b.lineCap="round",b.lineJoin="round",this._panes.overlayPane.appendChild(a),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){this._updatePathViewport();var a=this._pathViewport,b=a.min,c=a.max.subtract(b),d=this._pathRoot;L.DomUtil.setPosition(d,b),d.width=c.x,d.height=c.y,d.getContext("2d").translate(-b.x,-b.y)}}),L.Polyline.include(L.Path.CANVAS?{_containsPoint:function(a,b){var c,d,e,f,g,h,i,j=this.options.weight/2;L.Browser.touch&&(j+=10);for(c=0,f=this._parts.length;c<f;c++){i=this._parts[c];for(d=0,g=i.length,e=g-1;d<g;e=d++){if(!b&&d===0)continue;h=L.LineUtil.pointToSegmentDistance(a,i[e],i[d]);if(h<=j)return!0}}return!1}}:{}),L.Polygon.include(L.Path.CANVAS?{_containsPoint:function(a){var b=!1,c,d,e,f,g,h,i,j;if(L.Polyline.prototype._containsPoint.call(this,a,!0))return!0;for(f=0,i=this._parts.length;f<i;f++){c=this._parts[f];for(g=0,j=c.length,h=j-1;g<j;h=g++)d=c[g],e=c[h],d.y>a.y!=e.y>a.y&&a.x<(e.x-d.x)*(a.y-d.y)/(e.y-d.y)+d.x&&(b=!b)}return b}}:{}),L.Circle.include(L.Path.CANVAS?{_drawPath:function(){var a=this._point;this._ctx.beginPath(),this._ctx.arc(a.x,a.y,this._radius,0,Math.PI*2)},_containsPoint:function(a){var b=this._point,c=this.options.stroke?this.options.weight/2:0;return a.distanceTo(b)<=this._radius+c}}:{}),L.GeoJSON=L.FeatureGroup.extend({initialize:function(a,b){L.Util.setOptions(this,b),this._geojson=a,this._layers={},a&&this.addGeoJSON(a)},addGeoJSON:function(a){if(a.features){for(var b=0,c=a.features.length;b<c;b++)this.addGeoJSON(a.features[b]);return}var d=a.type==="Feature",e=d?a.geometry:a,f=L.GeoJSON.geometryToLayer(e,this.options.pointToLayer);this.fire("featureparse",{layer:f,properties:a.properties,geometryType:e.type,bbox:a.bbox,id:a.id}),this.addLayer(f)}}),L.Util.extend(L.GeoJSON,{geometryToLayer:function(a,b){var c=a.coordinates,d,e,f,g,h,i=[];switch(a.type){case"Point":return d=this.coordsToLatLng(c),b?b(d):new L.Marker(d);case"MultiPoint":for(f=0,g=c.length;f<g;f++)d=this.coordsToLatLng(c[f]),h=b?b(d):new L.Marker(d),i.push(h);return new L.FeatureGroup(i);case"LineString":return e=this.coordsToLatLngs(c),new L.Polyline(e);case"Polygon":return e=this.coordsToLatLngs(c,1),new L.Polygon(e);case"MultiLineString":return e=this.coordsToLatLngs(c,1),new L.MultiPolyline(e);case"MultiPolygon":return e=this.coordsToLatLngs(c,2),new L.MultiPolygon(e);case"GeometryCollection":for(f=0,g=a.geometries.length;f<g;f++)h=this.geometryToLayer(a.geometries[f],b),i.push(h);return new L.FeatureGroup(i);default:throw Error("Invalid GeoJSON object.")}},coordsToLatLng:function(a,b){var c=parseFloat(a[b?0:1]),d=parseFloat(a[b?1:0]);return new L.LatLng(c,d,!0)},coordsToLatLngs:function(a,b,c){var d,e=[],f,g=a.length;for(f=0;f<g;f++)d=b?this.coordsToLatLngs(a[f],b-1,c):this.coordsToLatLng(a[f],c),e.push(d);return e}}),L.DomEvent={addListener:function(a,b,c,d){var e=L.Util.stamp(c),f="_leaflet_"+b+e;if(a[f])return;var g=function(b){return c.call(d||a,b||L.DomEvent._getEvent())};if(L.Browser.touch&&b==="dblclick"&&this.addDoubleTapListener)this.addDoubleTapListener(a,g,e);else if("addEventListener"in a)if(b==="mousewheel")a.addEventListener("DOMMouseScroll",g,!1),a.addEventListener(b,g,!1);else if(b==="mouseenter"||b==="mouseleave"){var h=g,i=b==="mouseenter"?"mouseover":"mouseout";g=function(b){if(!L.DomEvent._checkMouse(a,b))return;return h(b)},a.addEventListener(i,g,!1)}else a.addEventListener(b,g,!1);else"attachEvent"in a&&a.attachEvent("on"+b,g);a[f]=g},removeListener:function(a,b,c){var d=L.Util.stamp(c),e="_leaflet_"+b+d,f=a[e];if(!f)return;L.Browser.touch&&b==="dblclick"&&this.removeDoubleTapListener?this.removeDoubleTapListener(a,d):"removeEventListener"in a?b==="mousewheel"?(a.removeEventListener("DOMMouseScroll",f,!1),a.removeEventListener(b,f,!1)):b==="mouseenter"||b==="mouseleave"?a.removeEventListener(b==="mouseenter"?"mouseover":"mouseout",f,!1):a.removeEventListener(b,f,!1):"detachEvent"in a&&a.detachEvent("on"+b,f),a[e]=null},_checkMouse:function(a,b){var c=b.relatedTarget;if(!c)return!0;try{while(c&&c!==a)c=c.parentNode}catch(d){return!1}return c!==a},_getEvent:function(){var a=window.event;if(!a){var b=arguments.callee.caller;while(b){a=b.arguments[0];if(a&&window.Event===a.constructor)break;b=b.caller}}return a},stopPropagation:function(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0},disableClickPropagation:function(a){L.DomEvent.addListener(a,L.Draggable.START,L.DomEvent.stopPropagation),L.DomEvent.addListener(a,"click",L.DomEvent.stopPropagation),L.DomEvent.addListener(a,"dblclick",L.DomEvent.stopPropagation)},preventDefault:function(a){a.preventDefault?a.preventDefault():a.returnValue=!1},stop:function(a){L.DomEvent.preventDefault(a),L.DomEvent.stopPropagation(a)},getMousePosition:function(a,b){var c=a.pageX?a.pageX:a.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,d=a.pageY?a.pageY:a.clientY+document.body.scrollTop+document.documentElement.scrollTop,e=new L.Point(c,d);return b?e.subtract(L.DomUtil.getViewportOffset(b)):e},getWheelDelta:function(a){var b=0;return a.wheelDelta&&(b=a.wheelDelta/120),a.detail&&(b=-a.detail/3),b}},L.Draggable=L.Class.extend({includes:L.Mixin.Events,statics:{START:L.Browser.touch?"touchstart":"mousedown",END:L.Browser.touch?"touchend":"mouseup",MOVE:L.Browser.touch?"touchmove":"mousemove",TAP_TOLERANCE:15},initialize:function(a,b){this._element=a,this._dragStartTarget=b||a},enable:function(){if(this._enabled)return;L.DomEvent.addListener(this._dragStartTarget,L.Draggable.START,this._onDown,this),this._enabled=!0},disable:function(){if(!this._enabled)return;L.DomEvent.removeListener(this._dragStartTarget,L.Draggable.START,this._onDown),this._enabled=!1},_onDown:function(a){if(!L.Browser.touch&&a.shiftKey||a.which!==1&&a.button!==1&&!a.touches)return;if(a.touches&&a.touches.length>1)return;var b=a.touches&&a.touches.length===1?a.touches[0]:a,c=b.target;L.DomEvent.preventDefault(a),L.Browser.touch&&c.tagName.toLowerCase()==="a"&&(c.className+=" leaflet-active"),this._moved=!1;if(this._moving)return;L.Browser.touch||(L.DomUtil.disableTextSelection(),this._setMovingCursor()),this._startPos=this._newPos=L.DomUtil.getPosition(this._element),this._startPoint=new L.Point(b.clientX,b.clientY),L.DomEvent.addListener(document,L.Draggable.MOVE,this._onMove,this),L.DomEvent.addListener(document,L.Draggable.END,this._onUp,this)},_onMove:function(a){if(a.touches&&a.touches.length>1)return;L.DomEvent.preventDefault(a);var b=a.touches&&a.touches.length===1?a.touches[0]:a;this._moved||(this.fire("dragstart"),this._moved=!0),this._moving=!0;var c=new L.Point(b.clientX,b.clientY);this._newPos=this._startPos.add(c).subtract(this._startPoint),L.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget)},_updatePosition:function(){this.fire("predrag"),L.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(a){if(a.changedTouches){var b=a.changedTouches[0],c=b.target,d=this._newPos&&this._newPos.distanceTo(this._startPos)||0;c.tagName.toLowerCase()==="a"&&(c.className=c.className.replace(" leaflet-active","")),d<L.Draggable.TAP_TOLERANCE&&this._simulateEvent("click",b)}L.Browser.touch||(L.DomUtil.enableTextSelection(),this._restoreCursor()),L.DomEvent.removeListener(document,L.Draggable.MOVE,this._onMove),L.DomEvent.removeListener(document,L.Draggable.END,this._onUp),this._moved&&this.fire("dragend"),this._moving=!1},_setMovingCursor:function(){this._bodyCursor=document.body.style.cursor,document.body.style.cursor="move"},_restoreCursor:function(){document.body.style.cursor=this._bodyCursor},_simulateEvent:function(a,b){var c=document.createEvent("MouseEvents");c.initMouseEvent(a,!0,!0,window,1,b.screenX,b.screenY,b.clientX,b.clientY,!1,!1,!1,!1,0,null),b.target.dispatchEvent(c)}}),L.Handler=L.Class.extend({initialize:function(a){this._map=a},enable:function(){if(this._enabled)return;this._enabled=!0,this.addHooks()},disable:function(){if(!this._enabled)return;this._enabled=!1,this.removeHooks()},enabled:function(){return!!this._enabled}}),L.Map.Drag=L.Handler.extend({addHooks:function(){if(!this._draggable){this._draggable=new L.Draggable(this._map._mapPane,this._map._container),this._draggable.on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this);var a=this._map.options;a.worldCopyJump&&!a.continuousWorld&&(this._draggable.on("predrag",this._onPreDrag,this),this._map.on("viewreset",this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._map.fire("movestart").fire("dragstart")},_onDrag:function(){this._map.fire("move").fire("drag")},_onViewReset:function(){var a=this._map.getSize().divideBy(2),b=this._map.latLngToLayerPoint(new L.LatLng(0,0));this._initialWorldOffset=b.subtract(a)},_onPreDrag:function(){var a=this._map,b=a.options.scale(a.getZoom()),c=Math.round(b/2),d=this._initialWorldOffset.x,e=this._draggable._newPos.x,f=(e-c+d)%b+c-d,g=(e+c+d)%b-c-d,h=Math.abs(f+d)<Math.abs(g+d)?f:g;this._draggable._newPos.x=h},_onDragEnd:function(){var a=this._map;a.fire("moveend").fire("dragend"),a.options.maxBounds&&L.Util.requestAnimFrame(this._panInsideMaxBounds,a,!0,a._container)},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)}}),L.Map.DoubleClickZoom=L.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick)},_onDoubleClick:function(a){this.setView(a.latlng,this._zoom+1)}}),L.Map.ScrollWheelZoom=L.Handler.extend({addHooks:function(){L.DomEvent.addListener(this._map._container,"mousewheel",this._onWheelScroll,this),this._delta=0},removeHooks:function(){L.DomEvent.removeListener(this._map._container,"mousewheel",this._onWheelScroll)},_onWheelScroll:function(a){var b=L.DomEvent.getWheelDelta(a);this._delta+=b,this._lastMousePos=this._map.mouseEventToContainerPoint(a),clearTimeout(this._timer),this._timer=setTimeout(L.Util.bind(this._performZoom,this),50),L.DomEvent.preventDefault(a)},_performZoom:function(){var a=this._map,b=Math.round(this._delta),c=a.getZoom();b=Math.max(Math.min(b,4),-4),b=a._limitZoom(c+b)-c,this._delta=0;if(!b)return;var d=this._getCenterForScrollWheelZoom(this._lastMousePos,b),e=c+b;a.setView(d,e)},_getCenterForScrollWheelZoom:function(a,b){var c=this._map,d=c.getPixelBounds().getCenter(),e=c.getSize().divideBy(2),f=a.subtract(e).multiplyBy(1-Math.pow(2,-b)),g=d.add(f);return c.unproject(g,c._zoom,!0)}}),L.Util.extend(L.DomEvent,{addDoubleTapListener:function(a,b,c){function k(a){if(a.touches.length!==1)return;var b=Date.now(),c=b-(d||b);g=a.touches[0],e=c>0&&c<=f,d=b}function l(a){e&&(g.type="dblclick",b(g),d=null)}var d,e=!1,f=250,g,h="_leaflet_",i="touchstart",j="touchend";a[h+i+c]=k,a[h+j+c]=l,a.addEventListener(i,k,!1),a.addEventListener(j,l,!1)},removeDoubleTapListener:function(a,b){var c="_leaflet_";a.removeEventListener(a,a[c+"touchstart"+b],!1),a.removeEventListener(a,a[c+"touchend"+b],!1)}}),L.Map.TouchZoom=L.Handler.extend({addHooks:function(){L.DomEvent.addListener(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){L.DomEvent.removeListener(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(a){if(!a.touches||a.touches.length!==2||this._map._animatingZoom)return;var b=this._map.mouseEventToLayerPoint(a.touches[0]),c=this._map.mouseEventToLayerPoint(a.touches[1]),d=this._map.containerPointToLayerPoint(this._map.getSize().divideBy(2));this._startCenter=b.add(c).divideBy(2,!0),this._startDist=b.distanceTo(c),this._moved=!1,this._zooming=!0,this._centerOffset=d.subtract(this._startCenter),L.DomEvent.addListener(document,"touchmove",this._onTouchMove,this),L.DomEvent.addListener(document,"touchend",this._onTouchEnd,this),L.DomEvent.preventDefault(a)},_onTouchMove:function(a){if(!a.touches||a.touches.length!==2)return;this._moved||(this._map._mapPane.className+=" leaflet-zoom-anim",this._map.fire("zoomstart").fire("movestart")._prepareTileBg(),this._moved=!0);var b=this._map.mouseEventToLayerPoint(a.touches[0]),c=this._map.mouseEventToLayerPoint(a.touches[1]);this._scale=b.distanceTo(c)/this._startDist,this._delta=b.add(c).divideBy(2,!0).subtract(this._startCenter),this._map._tileBg.style.webkitTransform=[L.DomUtil.getTranslateString(this._delta),L.DomUtil.getScaleString(this._scale,this._startCenter)].join(" "),L.DomEvent.preventDefault(a)},_onTouchEnd:function(a){if(!this._moved||!this._zooming)return;this._zooming=!1;var b=this._map.getZoom(),c=Math.log(this._scale)/Math.LN2,d=c>0?Math.ceil(c):Math.floor(c),e=this._map._limitZoom(b+d),f=e-b,g=this._centerOffset.subtract(this._delta).divideBy(this._scale),h=this._map.getPixelOrigin().add(this._startCenter).add(g),i=this._map.unproject(h);L.DomEvent.removeListener(document,"touchmove",this._onTouchMove),L.DomEvent.removeListener(document,"touchend",this._onTouchEnd);var j=Math.pow(2,f);this._map._runAnimation(i,e,j/this._scale,this._startCenter.add(g))}}),L.Map.BoxZoom=L.Handler.extend({initialize:function(a){this._map=a,this._container=a._container,this._pane=a._panes.overlayPane},addHooks:function(){L.DomEvent.addListener(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){L.DomEvent.removeListener(this._container,"mousedown",this._onMouseDown)},_onMouseDown:function(a){if(!a.shiftKey||a.which!==1&&a.button!==1)return!1;L.DomUtil.disableTextSelection(),this._startLayerPoint=this._map.mouseEventToLayerPoint(a),this._box=L.DomUtil.create("div","leaflet-zoom-box",this._pane),L.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",L.DomEvent.addListener(document,"mousemove",this._onMouseMove,this),L.DomEvent.addListener(document,"mouseup",this._onMouseUp,this),L.DomEvent.preventDefault(a)},_onMouseMove:function(a){var b=this._map.mouseEventToLayerPoint(a),c=b.x-this._startLayerPoint.x,d=b.y-this._startLayerPoint.y,e=Math.min(b.x,this._startLayerPoint.x),f=Math.min(b.y,this._startLayerPoint.y),g=new L.Point(e,f);L.DomUtil.setPosition(this._box,g),this._box.style.width=Math.abs(c)-4+"px",this._box.style.height=Math.abs(d)-4+"px"},_onMouseUp:function(a){this._pane.removeChild(this._box),this._container.style.cursor="",L.DomUtil.enableTextSelection(),L.DomEvent.removeListener(document,"mousemove",this._onMouseMove),L.DomEvent.removeListener(document,"mouseup",this._onMouseUp);var b=this._map.mouseEventToLayerPoint(a),c=new L.LatLngBounds(this._map.layerPointToLatLng(this._startLayerPoint),this._map.layerPointToLatLng(b));this._map.fitBounds(c)}}),L.Handler.MarkerDrag=L.Handler.extend({initialize:function(a){this._marker=a},addHooks:function(){var a=this._marker._icon;this._draggable||(this._draggable=new L.Draggable(a,a),this._draggable.on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this)),this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(a){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(a){var b=L.DomUtil.getPosition(this._marker._icon);this._marker._shadow&&L.DomUtil.setPosition(this._marker._shadow,b),this._marker._latlng=this._marker._map.layerPointToLatLng(b),this._marker.fire("move").fire("drag")},_onDragEnd:function(){this._marker.fire("moveend").fire("dragend")}}),L.Control={},L.Control.Position={TOP_LEFT:"topLeft",TOP_RIGHT:"topRight",BOTTOM_LEFT:"bottomLeft",BOTTOM_RIGHT:"bottomRight"},L.Map.include({addControl:function(a){a.onAdd(this);var b=a.getPosition(),c=this._controlCorners[b],d=a.getContainer();return L.DomUtil.addClass(d,"leaflet-control"),b.indexOf("bottom")!==-1?c.insertBefore(d,c.firstChild):c.appendChild(d),this},removeControl:function(a){var b=a.getPosition(),c=this._controlCorners[b],d=a.getContainer();return c.removeChild(d),a.onRemove&&a.onRemove(this),this},_initControlPos:function(){var a=this._controlCorners={},b="leaflet-",c=b+"top",d=b+"bottom",e=b+"left",f=b+"right",g=L.DomUtil.create("div",b+"control-container",this._container);L.Browser.touch&&(g.className+=" "+b+"big-buttons"),a.topLeft=L.DomUtil.create("div",c+" "+e,g),a.topRight=L.DomUtil.create("div",c+" "+f,g),a.bottomLeft=L.DomUtil.create("div",d+" "+e,g),a.bottomRight=L.DomUtil.create("div",d+" "+f,g)}}),L.Control.Zoom=L.Class.extend({onAdd:function(a){this._map=a,this._container=L.DomUtil.create("div","leaflet-control-zoom"),this._zoomInButton=this._createButton("Zoom in","leaflet-control-zoom-in",this._map.zoomIn,this._map),this._zoomOutButton=this._createButton("Zoom out","leaflet-control-zoom-out",this._map.zoomOut,this._map),this._container.appendChild(this._zoomInButton),this._container.appendChild(this._zoomOutButton)},getContainer:function(){return this._container},getPosition:function(){return L.Control.Position.TOP_LEFT},_createButton:function(a,b,c,d){var e=document.createElement("a");return e.href="#",e.title=a,e.className=b,L.DomEvent.disableClickPropagation(e),L.DomEvent.addListener(e,"click",L.DomEvent.preventDefault),L.DomEvent.addListener(e,"click",c,d),e}}),L.Control.Attribution=L.Class.extend({initialize:function(a){this._prefix=a||'Powered by <a href="http://leaflet.cloudmade.com">Leaflet</a>',this._attributions={}},onAdd:function(a){this._container=L.DomUtil.create("div","leaflet-control-attribution"),L.DomEvent.disableClickPropagation(this._container),this._map=a,this._update()},getPosition:function(){return L.Control.Position.BOTTOM_RIGHT},getContainer:function(){return this._container},setPrefix:function(a){this._prefix=a,this._update()},addAttribution:function(a){if(!a)return;this._attributions[a]=!0,this._update()},removeAttribution:function(a){if(!a)return;delete this._attributions[a],this._update()},_update:function(){if(!this._map)return;var a=[];for(var b in this._attributions)this._attributions.hasOwnProperty(b)&&a.push(b);var c=[];this._prefix&&c.push(this._prefix),a.length&&c.push(a.join(", ")),this._container.innerHTML=c.join(" &mdash; ")}}),L.Control.Layers=L.Class.extend({options:{collapsed:!L.Browser.touch},initialize:function(a,b,c){L.Util.setOptions(this,c),this._layers={};for(var d in a)a.hasOwnProperty(d)&&this._addLayer(a[d],d);for(d in b)b.hasOwnProperty(d)&&this._addLayer(b[d],d,!0)},onAdd:function(a){this._map=a,this._initLayout(),this._update()},getContainer:function(){return this._container},getPosition:function(){return L.Control.Position.TOP_RIGHT},addBaseLayer:function(a,b){return this._addLayer(a,b),this._update(),this},addOverlay:function(a,b){return this._addLayer(a,b,!0),this._update(),this},removeLayer:function(a){var b=L.Util.stamp(a);return delete this._layers[b],this._update(),this},_initLayout:function(){this._container=L.DomUtil.create("div","leaflet-control-layers"),L.DomEvent.disableClickPropagation(this._container),this._form=L.DomUtil.create("form","leaflet-control-layers-list");if(this.options.collapsed){L.DomEvent.addListener(this._container,"mouseover",this._expand,this),L.DomEvent.addListener(this._container,"mouseout",this._collapse,this);var a=this._layersLink=L.DomUtil.create("a","leaflet-control-layers-toggle");a.href="#",a.title="Layers",L.DomEvent.addListener(a,"focus",this._expand,this),L.DomEvent.addListener(this._map,L.Draggable.START,this._collapse,this),this._container.appendChild(a)}else this._expand();this._baseLayersList=L.DomUtil.create("div","leaflet-control-layers-base",this._form),this._separator=L.DomUtil.create("div","leaflet-control-layers-separator",this._form),this._overlaysList=L.DomUtil.create("div","leaflet-control-layers-overlays",this._form),this._container.appendChild(this._form)},_addLayer:function(a,b,c){var d=L.Util.stamp(a);this._layers[d]={layer:a,name:b,overlay:c}},_update:function(){if(!this._container)return;this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var a=!1,b=!1;for(var c in this._layers)if(this._layers.hasOwnProperty(c)){var d=this._layers[c];this._addItem(d),b=b||d.overlay,a=a||!d.overlay}this._separator.style.display=b&&a?"":"none"},_addItem:function(a,b){var c=document.createElement("label"),d=document.createElement("input");a.overlay||(d.name="leaflet-base-layers"),d.type=a.overlay?"checkbox":"radio",d.checked=this._map.hasLayer(a.layer),d.layerId=L.Util.stamp(a.layer),L.DomEvent.addListener(d,"click",this._onInputClick,this);var e=document.createTextNode(" "+a.name);c.appendChild(d),c.appendChild(e);var f=a.overlay?this._overlaysList:this._baseLayersList;f.appendChild(c)},_onInputClick:function(){var a,b,c,d=this._form.getElementsByTagName("input"),e=d.length;for(a=0;a<e;a++)b=d[a],c=this._layers[b.layerId],b.checked?this._map.addLayer(c.layer,!c.overlay):this._map.removeLayer(c.layer)},_expand:function(){L.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),L.Transition=L.Class.extend({includes:L.Mixin.Events,statics:{CUSTOM_PROPS_SETTERS:{position:L.DomUtil.setPosition},implemented:function(){return L.Transition.NATIVE||L.Transition.TIMER}},options:{easing:"ease",duration:.5},_setProperty:function(a,b){var c=L.Transition.CUSTOM_PROPS_SETTERS;a in c?c[a](this._el,b):this._el.style[a]=b}}),L.Transition=L.Transition.extend({statics:function(){var a=L.DomUtil.TRANSITION,b=a==="webkitTransition"||a==="OTransition"?a+"End":"transitionend";return{NATIVE:!!a,TRANSITION:a,PROPERTY:a+"Property",DURATION:a+"Duration",EASING:a+"TimingFunction",END:b,CUSTOM_PROPS_PROPERTIES:{position:L.Browser.webkit?L.DomUtil.TRANSFORM:"top, left"}}}(),options:{fakeStepInterval:100},initialize:function(a,b){this._el=a,L.Util.setOptions(this,b),L.DomEvent.addListener(a,L.Transition.END,this._onTransitionEnd,this),this._onFakeStep=L.Util.bind(this._onFakeStep,this)},run:function(a){var b,c=[],d=L.Transition.CUSTOM_PROPS_PROPERTIES;for(b in a)a.hasOwnProperty(b)&&(b=d[b]?d[b]:b,b=this._dasherize(b),c.push(b));this._el.style[L.Transition.DURATION]=this.options.duration+"s",this._el.style[L.Transition.EASING]=this.options.easing,this._el.style[L.Transition.PROPERTY]=c.join(", ");for(b in a)a.hasOwnProperty(b)&&this._setProperty(b,a[b]);this._inProgress=!0,this.fire("start"),L.Transition.NATIVE?(clearInterval(this._timer),this._timer=setInterval(this._onFakeStep,this.options.fakeStepInterval)):this._onTransitionEnd()},_dasherize:function(){function b(a){return"-"+a.toLowerCase()}var a=/([A-Z])/g;return function(c){return c.replace(a,b)}}(),_onFakeStep:function(){this.fire("step")},_onTransitionEnd:function(){this._inProgress&&(this._inProgress=!1,clearInterval(this._timer),this._el.style[L.Transition.PROPERTY]="none",this.fire("step"),this.fire("end"))}}),L.Transition=L.Transition.NATIVE?L.Transition:L.Transition.extend({statics:{getTime:Date.now||function(){return+(new Date)},TIMER:!0,EASINGS:{ease:[.25,.1,.25,1],linear:[0,0,1,1],"ease-in":[.42,0,1,1],"ease-out":[0,0,.58,1],"ease-in-out":[.42,0,.58,1]},CUSTOM_PROPS_GETTERS:{position:L.DomUtil.getPosition},UNIT_RE:/^[\d\.]+(\D*)$/},options:{fps:50},initialize:function(a,b){this._el=a,L.Util.extend(this.options,b);var c=L.Transition.EASINGS[this.options.easing]||L.Transition.EASINGS.ease;this._p1=new L.Point(0,0),this._p2=new L.Point(c[0],c[1]),this._p3=new L.Point(c[2],c[3]),this._p4=new L.Point(1,1),this._step=L.Util.bind(this._step,this),this._interval=Math.round(1e3/this.options.fps)},run:function(a){this._props={};var b=L.Transition.CUSTOM_PROPS_GETTERS,c=L.Transition.UNIT_RE;this.fire("start");for(var d in a)if(a.hasOwnProperty(d)){var e={};if(d in b)e.from=b[d](this._el);else{var f=this._el.style[d].match(c);e.from=parseFloat(f[0]),e.unit=f[1]}e.to=a[d],this._props[d]=e}clearInterval(this._timer),this._timer=setInterval(this._step,this._interval),this._startTime=L.Transition.getTime()},_step:function(){var a=L.Transition.getTime(),b=a-this._startTime,c=this.options.duration*1e3;b<c?this._runFrame(this._cubicBezier(b/c)):(this._runFrame(1),this._complete())},_runFrame:function(a){var b=L.Transition.CUSTOM_PROPS_SETTERS,c,d,e;for(c in this._props)this._props.hasOwnProperty(c)&&(d=this._props[c],c in b?(e=d.to.subtract(d.from).multiplyBy(a).add(d.from),b[c](this._el,e)):this._el.style[c]=(d.to-d.from)*a+d.from+d.unit);this.fire("step")},_complete:function(){clearInterval(this._timer),this.fire("end")},_cubicBezier:function(a){var b=Math.pow(1-a,3),c=3*Math.pow(1-a,2)*a,d=3*(1-a)*Math.pow(a,2),e=Math.pow(a,3),f=this._p1.multiplyBy(b),g=this._p2.multiplyBy(c),h=this._p3.multiplyBy(d),i=this._p4.multiplyBy(e);return f.add(g).add(h).add(i).y}}),L.Map.include(!L.Transition||!L.Transition.implemented()?{}:{setView:function(a,b,c){b=this._limitZoom(b);var d=this._zoom!==b;if(this._loaded&&!c&&this._layers){var e=this._getNewTopLeftPoint(a).subtract(this._getTopLeftPoint());a=new L.LatLng(a.lat,a.lng);var f=d?!!this._zoomToIfCenterInView&&this._zoomToIfCenterInView(a,b,e):this._panByIfClose(e);if(f)return this}return this._resetView(a,b),this},panBy:function(a){return!a.x&&!a.y?this:(this._panTransition||(this._panTransition=new L.Transition(this._mapPane,{duration:.3}),this._panTransition.on("step",this._onPanTransitionStep,this),this._panTransition.on("end",this._onPanTransitionEnd,this)),this.fire("movestart"),this._panTransition.run({position:L.DomUtil.getPosition(this._mapPane).subtract(a)}),this)},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){this.fire("moveend")},_panByIfClose:function(a){return this._offsetIsWithinView(a)?(this.panBy(a),!0):!1},_offsetIsWithinView:function(a,b){var c=b||1,d=this.getSize();return Math.abs(a.x)<=d.x*c&&Math.abs(a.y)<=d.y*c}}),L.Map.include(L.DomUtil.TRANSITION?{_zoomToIfCenterInView:function(a,b,c){if(this._animatingZoom)return!0;if(!this.options.zoomAnimation)return!1;var d=b-this._zoom,e=Math.pow(2,d),f=c.divideBy(1-1/e);if(!this._offsetIsWithinView(f,1))return!1;this._mapPane.className+=" leaflet-zoom-anim",this.fire("movestart").fire("zoomstart");var g=this.containerPointToLayerPoint(this.getSize().divideBy(2)),h=g.add(f);return this._prepareTileBg(),this._runAnimation(a,b,e,h),!0},_runAnimation:function(a,b,c,d){this._animatingZoom=!0,this._animateToCenter=a,this._animateToZoom=b;var e=L.DomUtil.TRANSFORM;if(L.Browser.gecko||window.opera)this._tileBg.style[e]+=" translate(0,0)";var f;L.Browser.android?(this._tileBg.style[e+"Origin"]=d.x+"px "+d.y+"px",f="scale("+c+")"):f=L.DomUtil.getScaleString(c,d),L.Util.falseFn(this._tileBg.offsetWidth);var g={};g[e]=this._tileBg.style[e]+" "+f,this._tileBg.transition.run(g)},_prepareTileBg:function(){this._tileBg||(this._tileBg=this._createPane("leaflet-tile-pane",this._mapPane),this._tileBg.style.zIndex=1);var a=this._tilePane,b=this._tileBg;b.style[L.DomUtil.TRANSFORM]="",b.style.visibility="hidden",b.empty=!0,a.empty=!1,this._tilePane=this._panes.tilePane=b,this._tileBg=a,this._tileBg.transition||(this._tileBg.transition=new L.Transition(this._tileBg,{duration:.3,easing:"cubic-bezier(0.25,0.1,0.25,0.75)"}),this._tileBg.transition.on("end",this._onZoomTransitionEnd,this)),this._stopLoadingBgTiles()},_stopLoadingBgTiles:function(){var a=[].slice.call(this._tileBg.getElementsByTagName("img"));for(var b=0,c=a.length;b<c;b++)a[b].complete||(a[b].parentNode.removeChild(a[b]),a[b]=null)},_onZoomTransitionEnd:function(){this._restoreTileFront(),L.Util.falseFn(this._tileBg.offsetWidth),this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),this._mapPane.className=this._mapPane.className.replace(" leaflet-zoom-anim",""),this._animatingZoom=!1},_restoreTileFront:function(){this._tilePane.innerHTML="",this._tilePane.style.visibility="",this._tilePane.style.zIndex=2,this._tileBg.style.zIndex=1},_clearTileBg:function(){!this._animatingZoom&&!this.touchZoom._zooming&&(this._tileBg.innerHTML="")}}:{}),L.Map.include({locate:function(a){this._locationOptions=a=L.Util.extend({watch:!1,setView:!1,maxZoom:Infinity,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},a);if(!navigator.geolocation)return this.fire("locationerror",{code:0,message:"Geolocation not supported."});var b=L.Util.bind(this._handleGeolocationResponse,this),c=L.Util.bind(this._handleGeolocationError,this);return a.watch?this._locationWatchId=navigator.geolocation.watchPosition(b,c,a):navigator.geolocation.getCurrentPosition(b,c,a),this},stopLocate:function(){navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId)},locateAndSetView:function(a,b){return b=L.Util.extend({maxZoom:a||Infinity,setView:!0},b),this.locate(b)},_handleGeolocationError:function(a){var b=a.code,c=b===1?"permission denied":b===2?"position unavailable":"timeout";this._locationOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:b,message:"Geolocation error: "+c+"."})},_handleGeolocationResponse:function(a){var b=180*a.coords.accuracy/4e7,c=b*2,d=a.coords.latitude,e=a.coords.longitude,f=new L.LatLng(d,e),g=new L.LatLng(d-b,e-c),h=new L.LatLng(d+b,e+c),i=new L.LatLngBounds(g,h);if(this._locationOptions.setView){var j=Math.min(this.getBoundsZoom(i),this._locationOptions.maxZoom);this.setView(f,j)}this.fire("locationfound",{latlng:f,bounds:i,accuracy:a.coords.accuracy})}});
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/lib/mustache.js	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,436 @@
+/*
+  mustache.js — Logic-less templates in JavaScript
+
+  See http://mustache.github.com/ for more info.
+*/
+
+var Mustache = function () {
+  var _toString = Object.prototype.toString;
+
+  Array.isArray = Array.isArray || function (obj) {
+    return _toString.call(obj) == "[object Array]";
+  }
+
+  var _trim = String.prototype.trim, trim;
+
+  if (_trim) {
+    trim = function (text) {
+      return text == null ? "" : _trim.call(text);
+    }
+  } else {
+    var trimLeft, trimRight;
+
+    // IE doesn't match non-breaking spaces with \s.
+    if ((/\S/).test("\xA0")) {
+      trimLeft = /^[\s\xA0]+/;
+      trimRight = /[\s\xA0]+$/;
+    } else {
+      trimLeft = /^\s+/;
+      trimRight = /\s+$/;
+    }
+
+    trim = function (text) {
+      return text == null ? "" :
+        text.toString().replace(trimLeft, "").replace(trimRight, "");
+    }
+  }
+
+  var escapeMap = {
+    "&": "&amp;",
+    "<": "&lt;",
+    ">": "&gt;",
+    '"': '&quot;',
+    "'": '&#39;'
+  };
+
+  function escapeHTML(string) {
+    return String(string).replace(/&(?!\w+;)|[<>"']/g, function (s) {
+      return escapeMap[s] || s;
+    });
+  }
+
+  var regexCache = {};
+  var Renderer = function () {};
+
+  Renderer.prototype = {
+    otag: "{{",
+    ctag: "}}",
+    pragmas: {},
+    buffer: [],
+    pragmas_implemented: {
+      "IMPLICIT-ITERATOR": true
+    },
+    context: {},
+
+    render: function (template, context, partials, in_recursion) {
+      // reset buffer & set context
+      if (!in_recursion) {
+        this.context = context;
+        this.buffer = []; // TODO: make this non-lazy
+      }
+
+      // fail fast
+      if (!this.includes("", template)) {
+        if (in_recursion) {
+          return template;
+        } else {
+          this.send(template);
+          return;
+        }
+      }
+
+      // get the pragmas together
+      template = this.render_pragmas(template);
+
+      // render the template
+      var html = this.render_section(template, context, partials);
+
+      // render_section did not find any sections, we still need to render the tags
+      if (html === false) {
+        html = this.render_tags(template, context, partials, in_recursion);
+      }
+
+      if (in_recursion) {
+        return html;
+      } else {
+        this.sendLines(html);
+      }
+    },
+
+    /*
+      Sends parsed lines
+    */
+    send: function (line) {
+      if (line !== "") {
+        this.buffer.push(line);
+      }
+    },
+
+    sendLines: function (text) {
+      if (text) {
+        var lines = text.split("\n");
+        for (var i = 0; i < lines.length; i++) {
+          this.send(lines[i]);
+        }
+      }
+    },
+
+    /*
+      Looks for %PRAGMAS
+    */
+    render_pragmas: function (template) {
+      // no pragmas
+      if (!this.includes("%", template)) {
+        return template;
+      }
+
+      var that = this;
+      var regex = this.getCachedRegex("render_pragmas", function (otag, ctag) {
+        return new RegExp(otag + "%([\\w-]+) ?([\\w]+=[\\w]+)?" + ctag, "g");
+      });
+
+      return template.replace(regex, function (match, pragma, options) {
+        if (!that.pragmas_implemented[pragma]) {
+          throw({message:
+            "This implementation of mustache doesn't understand the '" +
+            pragma + "' pragma"});
+        }
+        that.pragmas[pragma] = {};
+        if (options) {
+          var opts = options.split("=");
+          that.pragmas[pragma][opts[0]] = opts[1];
+        }
+        return "";
+        // ignore unknown pragmas silently
+      });
+    },
+
+    /*
+      Tries to find a partial in the curent scope and render it
+    */
+    render_partial: function (name, context, partials) {
+      name = trim(name);
+      if (!partials || partials[name] === undefined) {
+        throw({message: "unknown_partial '" + name + "'"});
+      }
+      if (!context || typeof context[name] != "object") {
+        return this.render(partials[name], context, partials, true);
+      }
+      return this.render(partials[name], context[name], partials, true);
+    },
+
+    /*
+      Renders inverted (^) and normal (#) sections
+    */
+    render_section: function (template, context, partials) {
+      if (!this.includes("#", template) && !this.includes("^", template)) {
+        // did not render anything, there were no sections
+        return false;
+      }
+
+      var that = this;
+
+      var regex = this.getCachedRegex("render_section", function (otag, ctag) {
+        // This regex matches _the first_ section ({{#foo}}{{/foo}}), and captures the remainder
+        return new RegExp(
+          "^([\\s\\S]*?)" +         // all the crap at the beginning that is not {{*}} ($1)
+
+          otag +                    // {{
+          "(\\^|\\#)\\s*(.+)\\s*" + //  #foo (# == $2, foo == $3)
+          ctag +                    // }}
+
+          "\n*([\\s\\S]*?)" +       // between the tag ($2). leading newlines are dropped
+
+          otag +                    // {{
+          "\\/\\s*\\3\\s*" +        //  /foo (backreference to the opening tag).
+          ctag +                    // }}
+
+          "\\s*([\\s\\S]*)$",       // everything else in the string ($4). leading whitespace is dropped.
+
+        "g");
+      });
+
+
+      // for each {{#foo}}{{/foo}} section do...
+      return template.replace(regex, function (match, before, type, name, content, after) {
+        // before contains only tags, no sections
+        var renderedBefore = before ? that.render_tags(before, context, partials, true) : "",
+
+        // after may contain both sections and tags, so use full rendering function
+            renderedAfter = after ? that.render(after, context, partials, true) : "",
+
+        // will be computed below
+            renderedContent,
+
+            value = that.find(name, context);
+
+        if (type === "^") { // inverted section
+          if (!value || Array.isArray(value) && value.length === 0) {
+            // false or empty list, render it
+            renderedContent = that.render(content, context, partials, true);
+          } else {
+            renderedContent = "";
+          }
+        } else if (type === "#") { // normal section
+          if (Array.isArray(value)) { // Enumerable, Let's loop!
+            renderedContent = that.map(value, function (row) {
+              return that.render(content, that.create_context(row), partials, true);
+            }).join("");
+          } else if (that.is_object(value)) { // Object, Use it as subcontext!
+            renderedContent = that.render(content, that.create_context(value),
+              partials, true);
+          } else if (typeof value == "function") {
+            // higher order section
+            renderedContent = value.call(context, content, function (text) {
+              return that.render(text, context, partials, true);
+            });
+          } else if (value) { // boolean section
+            renderedContent = that.render(content, context, partials, true);
+          } else {
+            renderedContent = "";
+          }
+        }
+
+        return renderedBefore + renderedContent + renderedAfter;
+      });
+    },
+
+    /*
+      Replace {{foo}} and friends with values from our view
+    */
+    render_tags: function (template, context, partials, in_recursion) {
+      // tit for tat
+      var that = this;
+
+      var new_regex = function () {
+        return that.getCachedRegex("render_tags", function (otag, ctag) {
+          return new RegExp(otag + "(=|!|>|&|\\{|%)?([^#\\^]+?)\\1?" + ctag + "+", "g");
+        });
+      };
+
+      var regex = new_regex();
+      var tag_replace_callback = function (match, operator, name) {
+        switch(operator) {
+        case "!": // ignore comments
+          return "";
+        case "=": // set new delimiters, rebuild the replace regexp
+          that.set_delimiters(name);
+          regex = new_regex();
+          return "";
+        case ">": // render partial
+          return that.render_partial(name, context, partials);
+        case "{": // the triple mustache is unescaped
+        case "&": // & operator is an alternative unescape method
+          return that.find(name, context);
+        default: // escape the value
+          return escapeHTML(that.find(name, context));
+        }
+      };
+      var lines = template.split("\n");
+      for(var i = 0; i < lines.length; i++) {
+        lines[i] = lines[i].replace(regex, tag_replace_callback, this);
+        if (!in_recursion) {
+          this.send(lines[i]);
+        }
+      }
+
+      if (in_recursion) {
+        return lines.join("\n");
+      }
+    },
+
+    set_delimiters: function (delimiters) {
+      var dels = delimiters.split(" ");
+      this.otag = this.escape_regex(dels[0]);
+      this.ctag = this.escape_regex(dels[1]);
+    },
+
+    escape_regex: function (text) {
+      // thank you Simon Willison
+      if (!arguments.callee.sRE) {
+        var specials = [
+          '/', '.', '*', '+', '?', '|',
+          '(', ')', '[', ']', '{', '}', '\\'
+        ];
+        arguments.callee.sRE = new RegExp(
+          '(\\' + specials.join('|\\') + ')', 'g'
+        );
+      }
+      return text.replace(arguments.callee.sRE, '\\$1');
+    },
+
+    /*
+      find `name` in current `context`. That is find me a value
+      from the view object
+    */
+    find: function (name, context) {
+      name = trim(name);
+
+      // Checks whether a value is thruthy or false or 0
+      function is_kinda_truthy(bool) {
+        return bool === false || bool === 0 || bool;
+      }
+
+      var value;
+
+      // check for dot notation eg. foo.bar
+      if (name.match(/([a-z_]+)\./ig)) {
+        var childValue = this.walk_context(name, context);
+        if (is_kinda_truthy(childValue)) {
+          value = childValue;
+        }
+      } else {
+        if (is_kinda_truthy(context[name])) {
+          value = context[name];
+        } else if (is_kinda_truthy(this.context[name])) {
+          value = this.context[name];
+        }
+      }
+
+      if (typeof value == "function") {
+        return value.apply(context);
+      }
+      if (value !== undefined) {
+        return value;
+      }
+      // silently ignore unkown variables
+      return "";
+    },
+
+    walk_context: function (name, context) {
+      var path = name.split('.');
+      // if the var doesn't exist in current context, check the top level context
+      var value_context = (context[path[0]] != undefined) ? context : this.context;
+      var value = value_context[path.shift()];
+      while (value != undefined && path.length > 0) {
+        value_context = value;
+        value = value[path.shift()];
+      }
+      // if the value is a function, call it, binding the correct context
+      if (typeof value == "function") {
+        return value.apply(value_context);
+      }
+      return value;
+    },
+
+    // Utility methods
+
+    /* includes tag */
+    includes: function (needle, haystack) {
+      return haystack.indexOf(this.otag + needle) != -1;
+    },
+
+    // by @langalex, support for arrays of strings
+    create_context: function (_context) {
+      if (this.is_object(_context)) {
+        return _context;
+      } else {
+        var iterator = ".";
+        if (this.pragmas["IMPLICIT-ITERATOR"]) {
+          iterator = this.pragmas["IMPLICIT-ITERATOR"].iterator;
+        }
+        var ctx = {};
+        ctx[iterator] = _context;
+        return ctx;
+      }
+    },
+
+    is_object: function (a) {
+      return a && typeof a == "object";
+    },
+
+    /*
+      Why, why, why? Because IE. Cry, cry cry.
+    */
+    map: function (array, fn) {
+      if (typeof array.map == "function") {
+        return array.map(fn);
+      } else {
+        var r = [];
+        var l = array.length;
+        for(var i = 0; i < l; i++) {
+          r.push(fn(array[i]));
+        }
+        return r;
+      }
+    },
+
+    getCachedRegex: function (name, generator) {
+      var byOtag = regexCache[this.otag];
+      if (!byOtag) {
+        byOtag = regexCache[this.otag] = {};
+      }
+
+      var byCtag = byOtag[this.ctag];
+      if (!byCtag) {
+        byCtag = byOtag[this.ctag] = {};
+      }
+
+      var regex = byCtag[name];
+      if (!regex) {
+        regex = byCtag[name] = generator(this.otag, this.ctag);
+      }
+
+      return regex;
+    }
+  };
+
+  return({
+    name: "mustache.js",
+    version: "0.5.0-dev",
+
+    /*
+      Turns a template and view into HTML
+    */
+    to_html: function (template, view, partials, send_fun) {
+      var renderer = new Renderer();
+      if (send_fun) {
+        renderer.send = send_fun;
+      }
+      renderer.render(template, view || {}, partials);
+      if (!send_fun) {
+        return renderer.buffer.join("\n");
+      }
+    }
+  });
+}();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/lib/raphael-min.js	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,116 @@
+/*
+ * Raphael 1.4.7 - JavaScript Vector Library
+ *
+ * Copyright (c) 2010 Dmitry Baranovskiy (http://raphaeljs.com)
+ * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
+ */
+Raphael=function(){function l(){if(l.is(arguments[0],U)){for(var a=arguments[0],b=Ca[K](l,a.splice(0,3+l.is(a[0],P))),c=b.set(),d=0,f=a[o];d<f;d++){var e=a[d]||{};sb.test(e.type)&&c[F](b[e.type]().attr(e))}return c}return Ca[K](l,arguments)}l.version="1.4.7";var V=/[, ]+/,sb=/^(circle|rect|path|ellipse|text|image)$/,p="prototype",z="hasOwnProperty",C=document,aa=window,Qa={was:Object[p][z].call(aa,"Raphael"),is:aa.Raphael};function H(){}var x="appendChild",K="apply",M="concat",Da="createTouch"in C,
+A="",N=" ",D=String,G="split",Ra="click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend orientationchange touchcancel gesturestart gesturechange gestureend"[G](N),Ea={mousedown:"touchstart",mousemove:"touchmove",mouseup:"touchend"},R="join",o="length",fa=String[p].toLowerCase,v=Math,Y=v.max,ba=v.min,P="number",ga="string",U="array",O="toString",ca="fill",tb=Object[p][O],E=v.pow,F="push",ja=/^(?=[\da-f]$)/,Sa=/^url\(['"]?([^\)]+?)['"]?\)$/i,ub=/^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+\s*,\s*[\d\.]+\s*,\s*[\d\.]+(?:\s*,\s*[\d\.]+)?)\s*\)|rgba?\(\s*([\d\.]+%\s*,\s*[\d\.]+%\s*,\s*[\d\.]+%(?:\s*,\s*[\d\.]+%)?)\s*\)|hsb\(\s*([\d\.]+(?:deg|\xb0)?\s*,\s*[\d\.]+\s*,\s*[\d\.]+)\s*\)|hsb\(\s*([\d\.]+(?:deg|\xb0|%)\s*,\s*[\d\.]+%\s*,\s*[\d\.]+%)\s*\)|hsl\(\s*([\d\.]+(?:deg|\xb0)?\s*,\s*[\d\.]+\s*,\s*[\d\.]+)\s*\)|hsl\(\s*([\d\.]+(?:deg|\xb0|%)\s*,\s*[\d\.]+%\s*,\s*[\d\.]+%)\s*\))\s*$/i,
+Q=v.round,W="setAttribute",y=parseFloat,ha=parseInt,Fa=" progid:DXImageTransform.Microsoft",sa=String[p].toUpperCase,ta={blur:0,"clip-rect":"0 0 1e9 1e9",cursor:"default",cx:0,cy:0,fill:"#fff","fill-opacity":1,font:'10px "Arial"',"font-family":'"Arial"',"font-size":"10","font-style":"normal","font-weight":400,gradient:0,height:0,href:"http://raphaeljs.com/",opacity:1,path:"M0,0",r:0,rotation:0,rx:0,ry:0,scale:"1 1",src:"",stroke:"#000","stroke-dasharray":"","stroke-linecap":"butt","stroke-linejoin":"butt",
+"stroke-miterlimit":0,"stroke-opacity":1,"stroke-width":1,target:"_blank","text-anchor":"middle",title:"Raphael",translation:"0 0",width:0,x:0,y:0},Ga={along:"along",blur:P,"clip-rect":"csv",cx:P,cy:P,fill:"colour","fill-opacity":P,"font-size":P,height:P,opacity:P,path:"path",r:P,rotation:"csv",rx:P,ry:P,scale:"csv",stroke:"colour","stroke-opacity":P,"stroke-width":P,translation:"csv",width:P,x:P,y:P},I="replace";l.type=aa.SVGAngle||C.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure",
+"1.1")?"SVG":"VML";if(l.type=="VML"){var da=C.createElement("div");da.innerHTML='<v:shape adj="1"/>';da=da.firstChild;da.style.behavior="url(#default#VML)";if(!(da&&typeof da.adj=="object"))return l.type=null;da=null}l.svg=!(l.vml=l.type=="VML");H[p]=l[p];l._id=0;l._oid=0;l.fn={};l.is=function(a,b){b=fa.call(b);return b=="object"&&a===Object(a)||b=="undefined"&&typeof a==b||b=="null"&&a==null||b=="array"&&Array.isArray&&Array.isArray(a)||fa.call(tb.call(a).slice(8,-1))==b};l.setWindow=function(a){aa=
+a;C=aa.document};function ua(a){if(l.vml){var b=/^\s+|\s+$/g;ua=Z(function(d){var f;d=D(d)[I](b,A);try{var e=new aa.ActiveXObject("htmlfile");e.write("<body>");e.close();f=e.body}catch(g){f=aa.createPopup().document.body}e=f.createTextRange();try{f.style.color=d;var h=e.queryCommandValue("ForeColor");h=(h&255)<<16|h&65280|(h&16711680)>>>16;return"#"+("000000"+h[O](16)).slice(-6)}catch(i){return"none"}})}else{var c=C.createElement("i");c.title="Rapha\u00ebl Colour Picker";c.style.display="none";C.body[x](c);
+ua=Z(function(d){c.style.color=d;return C.defaultView.getComputedStyle(c,A).getPropertyValue("color")})}return ua(a)}function Ta(){return"hsb("+[this.h,this.s,this.b]+")"}function vb(){return"hsl("+[this.h,this.s,this.l]+")"}function wb(){return this.hex}l.hsb2rgb=function(a,b,c){if(l.is(a,"object")&&"h"in a&&"s"in a&&"b"in a){c=a.b;b=a.s;a=a.h}return l.hsl2rgb(a,b,c/2)};l.hsl2rgb=function(a,b,c){if(l.is(a,"object")&&"h"in a&&"s"in a&&"l"in a){c=a.l;b=a.s;a=a.h}var d={},f=["r","g","b"],e;if(b){b=
+c<0.5?c*(1+b):c+b-c*b;c=2*c-b;for(var g=0,h=f.length;g<h;g++){e=a+1/3*-(g-1);e<0&&e++;e>1&&e--;d[f[g]]=e*6<1?c+(b-c)*6*e:e*2<1?b:e*3<2?c+(b-c)*(2/3-e)*6:c}}else d={r:c,g:c,b:c};d.r*=255;d.g*=255;d.b*=255;a=(~~d.r)[O](16);f=(~~d.g)[O](16);b=(~~d.b)[O](16);a=a[I](ja,"0");f=f[I](ja,"0");b=b[I](ja,"0");d.hex="#"+a+f+b;d.toString=wb;return d};l.rgb2hsb=function(a,b,c){if(b==null&&l.is(a,"object")&&"r"in a&&"g"in a&&"b"in a){c=a.b;b=a.g;a=a.r}if(b==null&&l.is(a,ga)){var d=l.getRGB(a);a=d.r;b=d.g;c=d.b}if(a>
+1||b>1||c>1){a/=255;b/=255;c/=255}var f=Y(a,b,c),e=ba(a,b,c);d=f;if(e==f)return{h:0,s:0,b:f,toString:Ta};else{var g=f-e;e=g/f;a=a==f?(b-c)/g:b==f?2+(c-a)/g:4+(a-b)/g;a/=6;a<0&&a++;a>1&&a--}return{h:a,s:e,b:d,toString:Ta}};l.rgb2hsl=function(a,b,c){if(b==null&&l.is(a,"object")&&"r"in a&&"g"in a&&"b"in a){c=a.b;b=a.g;a=a.r}if(b==null&&l.is(a,ga)){var d=l.getRGB(a);a=d.r;b=d.g;c=d.b}if(a>1||b>1||c>1){a/=255;b/=255;c/=255}var f=Y(a,b,c),e=ba(a,b,c);d=(f+e)/2;if(e==f)a={h:0,s:0,l:d};else{var g=f-e;e=d<
+0.5?g/(f+e):g/(2-f-e);a=a==f?(b-c)/g:b==f?2+(c-a)/g:4+(a-b)/g;a/=6;a<0&&a++;a>1&&a--;a={h:a,s:e,l:d}}a.toString=vb;return a};var xb=/,?([achlmqrstvxz]),?/gi,ka=/\s*,\s*/,yb={hs:1,rg:1};l._path2string=function(){return this.join(",")[I](xb,"$1")};function Z(a,b,c){function d(){var f=Array[p].slice.call(arguments,0),e=f[R]("\u25ba"),g=d.cache=d.cache||{},h=d.count=d.count||[];if(g[z](e))return c?c(g[e]):g[e];h[o]>=1000&&delete g[h.shift()];h[F](e);g[e]=a[K](b,f);return c?c(g[e]):g[e]}return d}l.getRGB=
+Z(function(a){if(!a||(a=D(a)).indexOf("-")+1)return{r:-1,g:-1,b:-1,hex:"none",error:1};if(a=="none")return{r:-1,g:-1,b:-1,hex:"none"};!(yb[z](a.substring(0,2))||a.charAt()=="#")&&(a=ua(a));var b,c,d,f,e;if(a=a.match(ub)){if(a[2]){d=ha(a[2].substring(5),16);c=ha(a[2].substring(3,5),16);b=ha(a[2].substring(1,3),16)}if(a[3]){d=ha((e=a[3].charAt(3))+e,16);c=ha((e=a[3].charAt(2))+e,16);b=ha((e=a[3].charAt(1))+e,16)}if(a[4]){a=a[4][G](ka);b=y(a[0]);c=y(a[1]);d=y(a[2]);f=y(a[3])}if(a[5]){a=a[5][G](ka);b=
+y(a[0])*2.55;c=y(a[1])*2.55;d=y(a[2])*2.55;f=y(a[3])}if(a[6]){a=a[6][G](ka);b=y(a[0]);c=y(a[1]);d=y(a[2]);(a[0].slice(-3)=="deg"||a[0].slice(-1)=="\u00b0")&&(b/=360);return l.hsb2rgb(b,c,d)}if(a[7]){a=a[7][G](ka);b=y(a[0])*2.55;c=y(a[1])*2.55;d=y(a[2])*2.55;(a[0].slice(-3)=="deg"||a[0].slice(-1)=="\u00b0")&&(b/=360*2.55);return l.hsb2rgb(b,c,d)}if(a[8]){a=a[8][G](ka);b=y(a[0]);c=y(a[1]);d=y(a[2]);(a[0].slice(-3)=="deg"||a[0].slice(-1)=="\u00b0")&&(b/=360);return l.hsl2rgb(b,c,d)}if(a[9]){a=a[9][G](ka);
+b=y(a[0])*2.55;c=y(a[1])*2.55;d=y(a[2])*2.55;(a[0].slice(-3)=="deg"||a[0].slice(-1)=="\u00b0")&&(b/=360*2.55);return l.hsl2rgb(b,c,d)}a={r:b,g:c,b:d};b=(~~b)[O](16);c=(~~c)[O](16);d=(~~d)[O](16);b=b[I](ja,"0");c=c[I](ja,"0");d=d[I](ja,"0");a.hex="#"+b+c+d;isFinite(y(f))&&(a.o=f);return a}return{r:-1,g:-1,b:-1,hex:"none",error:1}},l);l.getColor=function(a){a=this.getColor.start=this.getColor.start||{h:0,s:1,b:a||0.75};var b=this.hsb2rgb(a.h,a.s,a.b);a.h+=0.075;if(a.h>1){a.h=0;a.s-=0.2;a.s<=0&&(this.getColor.start=
+{h:0,s:1,b:a.b})}return b.hex};l.getColor.reset=function(){delete this.start};var zb=/([achlmqstvz])[\s,]*((-?\d*\.?\d*(?:e[-+]?\d+)?\s*,?\s*)+)/ig,Ab=/(-?\d*\.?\d*(?:e[-+]?\d+)?)\s*,?\s*/ig;l.parsePathString=Z(function(a){if(!a)return null;var b={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},c=[];if(l.is(a,U)&&l.is(a[0],U))c=va(a);c[o]||D(a)[I](zb,function(d,f,e){var g=[];d=fa.call(f);e[I](Ab,function(h,i){i&&g[F](+i)});if(d=="m"&&g[o]>2){c[F]([f][M](g.splice(0,2)));d="l";f=f=="m"?"l":"L"}for(;g[o]>=
+b[d];){c[F]([f][M](g.splice(0,b[d])));if(!b[d])break}});c[O]=l._path2string;return c});l.findDotsAtSegment=function(a,b,c,d,f,e,g,h,i){var j=1-i,m=E(j,3)*a+E(j,2)*3*i*c+j*3*i*i*f+E(i,3)*g;j=E(j,3)*b+E(j,2)*3*i*d+j*3*i*i*e+E(i,3)*h;var n=a+2*i*(c-a)+i*i*(f-2*c+a),r=b+2*i*(d-b)+i*i*(e-2*d+b),q=c+2*i*(f-c)+i*i*(g-2*f+c),k=d+2*i*(e-d)+i*i*(h-2*e+d);a=(1-i)*a+i*c;b=(1-i)*b+i*d;f=(1-i)*f+i*g;e=(1-i)*e+i*h;h=90-v.atan((n-q)/(r-k))*180/v.PI;(n>q||r<k)&&(h+=180);return{x:m,y:j,m:{x:n,y:r},n:{x:q,y:k},start:{x:a,
+y:b},end:{x:f,y:e},alpha:h}};var xa=Z(function(a){if(!a)return{x:0,y:0,width:0,height:0};a=wa(a);for(var b=0,c=0,d=[],f=[],e,g=0,h=a[o];g<h;g++){e=a[g];if(e[0]=="M"){b=e[1];c=e[2];d[F](b);f[F](c)}else{b=Bb(b,c,e[1],e[2],e[3],e[4],e[5],e[6]);d=d[M](b.min.x,b.max.x);f=f[M](b.min.y,b.max.y);b=e[5];c=e[6]}}a=ba[K](0,d);e=ba[K](0,f);return{x:a,y:e,width:Y[K](0,d)-a,height:Y[K](0,f)-e}});function va(a){var b=[];if(!l.is(a,U)||!l.is(a&&a[0],U))a=l.parsePathString(a);for(var c=0,d=a[o];c<d;c++){b[c]=[];for(var f=
+0,e=a[c][o];f<e;f++)b[c][f]=a[c][f]}b[O]=l._path2string;return b}var Ha=Z(function(a){if(!l.is(a,U)||!l.is(a&&a[0],U))a=l.parsePathString(a);var b=[],c=0,d=0,f=0,e=0,g=0;if(a[0][0]=="M"){c=a[0][1];d=a[0][2];f=c;e=d;g++;b[F](["M",c,d])}g=g;for(var h=a[o];g<h;g++){var i=b[g]=[],j=a[g];if(j[0]!=fa.call(j[0])){i[0]=fa.call(j[0]);switch(i[0]){case "a":i[1]=j[1];i[2]=j[2];i[3]=j[3];i[4]=j[4];i[5]=j[5];i[6]=+(j[6]-c).toFixed(3);i[7]=+(j[7]-d).toFixed(3);break;case "v":i[1]=+(j[1]-d).toFixed(3);break;case "m":f=
+j[1];e=j[2];default:for(var m=1,n=j[o];m<n;m++)i[m]=+(j[m]-(m%2?c:d)).toFixed(3)}}else{b[g]=[];if(j[0]=="m"){f=j[1]+c;e=j[2]+d}i=0;for(m=j[o];i<m;i++)b[g][i]=j[i]}j=b[g][o];switch(b[g][0]){case "z":c=f;d=e;break;case "h":c+=+b[g][j-1];break;case "v":d+=+b[g][j-1];break;default:c+=+b[g][j-2];d+=+b[g][j-1]}}b[O]=l._path2string;return b},0,va),oa=Z(function(a){if(!l.is(a,U)||!l.is(a&&a[0],U))a=l.parsePathString(a);var b=[],c=0,d=0,f=0,e=0,g=0;if(a[0][0]=="M"){c=+a[0][1];d=+a[0][2];f=c;e=d;g++;b[0]=["M",
+c,d]}g=g;for(var h=a[o];g<h;g++){var i=b[g]=[],j=a[g];if(j[0]!=sa.call(j[0])){i[0]=sa.call(j[0]);switch(i[0]){case "A":i[1]=j[1];i[2]=j[2];i[3]=j[3];i[4]=j[4];i[5]=j[5];i[6]=+(j[6]+c);i[7]=+(j[7]+d);break;case "V":i[1]=+j[1]+d;break;case "H":i[1]=+j[1]+c;break;case "M":f=+j[1]+c;e=+j[2]+d;default:for(var m=1,n=j[o];m<n;m++)i[m]=+j[m]+(m%2?c:d)}}else{m=0;for(n=j[o];m<n;m++)b[g][m]=j[m]}switch(i[0]){case "Z":c=f;d=e;break;case "H":c=i[1];break;case "V":d=i[1];break;case "M":f=b[g][b[g][o]-2];e=b[g][b[g][o]-
+1];default:c=b[g][b[g][o]-2];d=b[g][b[g][o]-1]}}b[O]=l._path2string;return b},null,va);function ya(a,b,c,d){return[a,b,c,d,c,d]}function Ua(a,b,c,d,f,e){var g=1/3,h=2/3;return[g*a+h*c,g*b+h*d,g*f+h*c,g*e+h*d,f,e]}function Va(a,b,c,d,f,e,g,h,i,j){var m=v.PI,n=m*120/180,r=m/180*(+f||0),q=[],k,t=Z(function(J,ia,za){var Cb=J*v.cos(za)-ia*v.sin(za);J=J*v.sin(za)+ia*v.cos(za);return{x:Cb,y:J}});if(j){w=j[0];k=j[1];e=j[2];B=j[3]}else{k=t(a,b,-r);a=k.x;b=k.y;k=t(h,i,-r);h=k.x;i=k.y;v.cos(m/180*f);v.sin(m/
+180*f);k=(a-h)/2;w=(b-i)/2;B=k*k/(c*c)+w*w/(d*d);if(B>1){B=v.sqrt(B);c=B*c;d=B*d}B=c*c;var L=d*d;B=(e==g?-1:1)*v.sqrt(v.abs((B*L-B*w*w-L*k*k)/(B*w*w+L*k*k)));e=B*c*w/d+(a+h)/2;var B=B*-d*k/c+(b+i)/2,w=v.asin(((b-B)/d).toFixed(7));k=v.asin(((i-B)/d).toFixed(7));w=a<e?m-w:w;k=h<e?m-k:k;w<0&&(w=m*2+w);k<0&&(k=m*2+k);if(g&&w>k)w-=m*2;if(!g&&k>w)k-=m*2}m=k-w;if(v.abs(m)>n){q=k;m=h;L=i;k=w+n*(g&&k>w?1:-1);h=e+c*v.cos(k);i=B+d*v.sin(k);q=Va(h,i,c,d,f,0,g,m,L,[k,q,e,B])}m=k-w;f=v.cos(w);e=v.sin(w);g=v.cos(k);
+k=v.sin(k);m=v.tan(m/4);c=4/3*c*m;m=4/3*d*m;d=[a,b];a=[a+c*e,b-m*f];b=[h+c*k,i-m*g];h=[h,i];a[0]=2*d[0]-a[0];a[1]=2*d[1]-a[1];if(j)return[a,b,h][M](q);else{q=[a,b,h][M](q)[R]()[G](",");j=[];h=0;for(i=q[o];h<i;h++)j[h]=h%2?t(q[h-1],q[h],r).y:t(q[h],q[h+1],r).x;return j}}function la(a,b,c,d,f,e,g,h,i){var j=1-i;return{x:E(j,3)*a+E(j,2)*3*i*c+j*3*i*i*f+E(i,3)*g,y:E(j,3)*b+E(j,2)*3*i*d+j*3*i*i*e+E(i,3)*h}}var Bb=Z(function(a,b,c,d,f,e,g,h){var i=f-2*c+a-(g-2*f+c),j=2*(c-a)-2*(f-c),m=a-c,n=(-j+v.sqrt(j*
+j-4*i*m))/2/i;i=(-j-v.sqrt(j*j-4*i*m))/2/i;var r=[b,h],q=[a,g];v.abs(n)>1000000000000&&(n=0.5);v.abs(i)>1000000000000&&(i=0.5);if(n>0&&n<1){n=la(a,b,c,d,f,e,g,h,n);q[F](n.x);r[F](n.y)}if(i>0&&i<1){n=la(a,b,c,d,f,e,g,h,i);q[F](n.x);r[F](n.y)}i=e-2*d+b-(h-2*e+d);j=2*(d-b)-2*(e-d);m=b-d;n=(-j+v.sqrt(j*j-4*i*m))/2/i;i=(-j-v.sqrt(j*j-4*i*m))/2/i;v.abs(n)>1000000000000&&(n=0.5);v.abs(i)>1000000000000&&(i=0.5);if(n>0&&n<1){n=la(a,b,c,d,f,e,g,h,n);q[F](n.x);r[F](n.y)}if(i>0&&i<1){n=la(a,b,c,d,f,e,g,h,i);
+q[F](n.x);r[F](n.y)}return{min:{x:ba[K](0,q),y:ba[K](0,r)},max:{x:Y[K](0,q),y:Y[K](0,r)}}}),wa=Z(function(a,b){var c=oa(a),d=b&&oa(b);a={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null};b={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null};function f(q,k){var t;if(!q)return["C",k.x,k.y,k.x,k.y,k.x,k.y];!(q[0]in{T:1,Q:1})&&(k.qx=k.qy=null);switch(q[0]){case "M":k.X=q[1];k.Y=q[2];break;case "A":q=["C"][M](Va[K](0,[k.x,k.y][M](q.slice(1))));break;case "S":t=k.x+(k.x-(k.bx||k.x));k=k.y+(k.y-(k.by||k.y));q=["C",t,k][M](q.slice(1));
+break;case "T":k.qx=k.x+(k.x-(k.qx||k.x));k.qy=k.y+(k.y-(k.qy||k.y));q=["C"][M](Ua(k.x,k.y,k.qx,k.qy,q[1],q[2]));break;case "Q":k.qx=q[1];k.qy=q[2];q=["C"][M](Ua(k.x,k.y,q[1],q[2],q[3],q[4]));break;case "L":q=["C"][M](ya(k.x,k.y,q[1],q[2]));break;case "H":q=["C"][M](ya(k.x,k.y,q[1],k.y));break;case "V":q=["C"][M](ya(k.x,k.y,k.x,q[1]));break;case "Z":q=["C"][M](ya(k.x,k.y,k.X,k.Y));break}return q}function e(q,k){if(q[k][o]>7){q[k].shift();for(var t=q[k];t[o];)q.splice(k++,0,["C"][M](t.splice(0,6)));
+q.splice(k,1);i=Y(c[o],d&&d[o]||0)}}function g(q,k,t,L,B){if(q&&k&&q[B][0]=="M"&&k[B][0]!="M"){k.splice(B,0,["M",L.x,L.y]);t.bx=0;t.by=0;t.x=q[B][1];t.y=q[B][2];i=Y(c[o],d&&d[o]||0)}}for(var h=0,i=Y(c[o],d&&d[o]||0);h<i;h++){c[h]=f(c[h],a);e(c,h);d&&(d[h]=f(d[h],b));d&&e(d,h);g(c,d,a,b,h);g(d,c,b,a,h);var j=c[h],m=d&&d[h],n=j[o],r=d&&m[o];a.x=j[n-2];a.y=j[n-1];a.bx=y(j[n-4])||a.x;a.by=y(j[n-3])||a.y;b.bx=d&&(y(m[r-4])||b.x);b.by=d&&(y(m[r-3])||b.y);b.x=d&&m[r-2];b.y=d&&m[r-1]}return d?[c,d]:c},null,
+va),Wa=Z(function(a){for(var b=[],c=0,d=a[o];c<d;c++){var f={},e=a[c].match(/^([^:]*):?([\d\.]*)/);f.color=l.getRGB(e[1]);if(f.color.error)return null;f.color=f.color.hex;e[2]&&(f.offset=e[2]+"%");b[F](f)}c=1;for(d=b[o]-1;c<d;c++)if(!b[c].offset){a=y(b[c-1].offset||0);e=0;for(f=c+1;f<d;f++)if(b[f].offset){e=b[f].offset;break}if(!e){e=100;f=d}e=y(e);for(e=(e-a)/(f-c+1);c<f;c++){a+=e;b[c].offset=a+"%"}}return b});function Xa(a,b,c,d){if(l.is(a,ga)||l.is(a,"object")){a=l.is(a,ga)?C.getElementById(a):
+a;if(a.tagName)return b==null?{container:a,width:a.style.pixelWidth||a.offsetWidth,height:a.style.pixelHeight||a.offsetHeight}:{container:a,width:b,height:c}}else return{container:1,x:a,y:b,width:c,height:d}}function Ia(a,b){var c=this;for(var d in b)if(b[z](d)&&!(d in a))switch(typeof b[d]){case "function":(function(f){a[d]=a===c?f:function(){return f[K](c,arguments)}})(b[d]);break;case "object":a[d]=a[d]||{};Ia.call(this,a[d],b[d]);break;default:a[d]=b[d];break}}function ma(a,b){a==b.top&&(b.top=
+a.prev);a==b.bottom&&(b.bottom=a.next);a.next&&(a.next.prev=a.prev);a.prev&&(a.prev.next=a.next)}function Ya(a,b){if(b.top!==a){ma(a,b);a.next=null;a.prev=b.top;b.top.next=a;b.top=a}}function Za(a,b){if(b.bottom!==a){ma(a,b);a.next=b.bottom;a.prev=null;b.bottom.prev=a;b.bottom=a}}function $a(a,b,c){ma(a,c);b==c.top&&(c.top=a);b.next&&(b.next.prev=a);a.next=b.next;a.prev=b;b.next=a}function ab(a,b,c){ma(a,c);b==c.bottom&&(c.bottom=a);b.prev&&(b.prev.next=a);a.prev=b.prev;b.prev=a;a.next=b}function bb(a){return function(){throw new Error("Rapha\u00ebl: you are calling to method \u201c"+
+a+"\u201d of removed object");}}var cb=/^r(?:\(([^,]+?)\s*,\s*([^\)]+?)\))?/;l.pathToRelative=Ha;if(l.svg){H[p].svgns="http://www.w3.org/2000/svg";H[p].xlink="http://www.w3.org/1999/xlink";Q=function(a){return+a+(~~a===a)*0.5};var u=function(a,b){if(b)for(var c in b)b[z](c)&&a[W](c,D(b[c]));else{a=C.createElementNS(H[p].svgns,a);a.style.webkitTapHighlightColor="rgba(0,0,0,0)";return a}};l[O]=function(){return"Your browser supports SVG.\nYou are running Rapha\u00ebl "+this.version};var db=function(a,
+b){var c=u("path");b.canvas&&b.canvas[x](c);b=new s(c,b);b.type="path";ea(b,{fill:"none",stroke:"#000",path:a});return b},pa=function(a,b,c){var d="linear",f=0.5,e=0.5,g=a.style;b=D(b)[I](cb,function(m,n,r){d="radial";if(n&&r){f=y(n);e=y(r);m=(e>0.5)*2-1;E(f-0.5,2)+E(e-0.5,2)>0.25&&(e=v.sqrt(0.25-E(f-0.5,2))*m+0.5)&&e!=0.5&&(e=e.toFixed(5)-1.0E-5*m)}return A});b=b[G](/\s*\-\s*/);if(d=="linear"){var h=b.shift();h=-y(h);if(isNaN(h))return null;h=[0,0,v.cos(h*v.PI/180),v.sin(h*v.PI/180)];var i=1/(Y(v.abs(h[2]),
+v.abs(h[3]))||1);h[2]*=i;h[3]*=i;if(h[2]<0){h[0]=-h[2];h[2]=0}if(h[3]<0){h[1]=-h[3];h[3]=0}}b=Wa(b);if(!b)return null;i=a.getAttribute(ca);(i=i.match(/^url\(#(.*)\)$/))&&c.defs.removeChild(C.getElementById(i[1]));i=u(d+"Gradient");i.id="r"+(l._id++)[O](36);u(i,d=="radial"?{fx:f,fy:e}:{x1:h[0],y1:h[1],x2:h[2],y2:h[3]});c.defs[x](i);c=0;for(h=b[o];c<h;c++){var j=u("stop");u(j,{offset:b[c].offset?b[c].offset:!c?"0%":"100%","stop-color":b[c].color||"#fff"});i[x](j)}u(a,{fill:"url(#"+i.id+")",opacity:1,
+"fill-opacity":1});g.fill=A;g.opacity=1;return g.fillOpacity=1},Ja=function(a){var b=a.getBBox();u(a.pattern,{patternTransform:l.format("translate({0},{1})",b.x,b.y)})},ea=function(a,b){var c={"":[0],none:[0],"-":[3,1],".":[1,1],"-.":[3,1,1,1],"-..":[3,1,1,1,1,1],". ":[1,3],"- ":[4,3],"--":[8,3],"- .":[4,3,1,3],"--.":[8,3,1,3],"--..":[8,3,1,3,1,3]},d=a.node,f=a.attrs,e=a.rotate();function g(k,t){if(t=c[fa.call(t)]){var L=k.attrs["stroke-width"]||"1";k={round:L,square:L,butt:0}[k.attrs["stroke-linecap"]||
+b["stroke-linecap"]]||0;for(var B=[],w=t[o];w--;)B[w]=t[w]*L+(w%2?1:-1)*k;u(d,{"stroke-dasharray":B[R](",")})}}b[z]("rotation")&&(e=b.rotation);var h=D(e)[G](V);if(h.length-1){h[1]=+h[1];h[2]=+h[2]}else h=null;y(e)&&a.rotate(0,true);for(var i in b)if(b[z](i))if(ta[z](i)){var j=b[i];f[i]=j;switch(i){case "blur":a.blur(j);break;case "rotation":a.rotate(j,true);break;case "href":case "title":case "target":var m=d.parentNode;if(fa.call(m.tagName)!="a"){var n=u("a");m.insertBefore(n,d);n[x](d);m=n}m.setAttributeNS(a.paper.xlink,
+i,j);break;case "cursor":d.style.cursor=j;break;case "clip-rect":m=D(j)[G](V);if(m[o]==4){a.clip&&a.clip.parentNode.parentNode.removeChild(a.clip.parentNode);var r=u("clipPath");n=u("rect");r.id="r"+(l._id++)[O](36);u(n,{x:m[0],y:m[1],width:m[2],height:m[3]});r[x](n);a.paper.defs[x](r);u(d,{"clip-path":"url(#"+r.id+")"});a.clip=n}if(!j){(j=C.getElementById(d.getAttribute("clip-path")[I](/(^url\(#|\)$)/g,A)))&&j.parentNode.removeChild(j);u(d,{"clip-path":A});delete a.clip}break;case "path":if(a.type==
+"path")u(d,{d:j?(f.path=oa(j)):"M0,0"});break;case "width":d[W](i,j);if(f.fx){i="x";j=f.x}else break;case "x":if(f.fx)j=-f.x-(f.width||0);case "rx":if(i=="rx"&&a.type=="rect")break;case "cx":h&&(i=="x"||i=="cx")&&(h[1]+=j-f[i]);d[W](i,j);a.pattern&&Ja(a);break;case "height":d[W](i,j);if(f.fy){i="y";j=f.y}else break;case "y":if(f.fy)j=-f.y-(f.height||0);case "ry":if(i=="ry"&&a.type=="rect")break;case "cy":h&&(i=="y"||i=="cy")&&(h[2]+=j-f[i]);d[W](i,j);a.pattern&&Ja(a);break;case "r":a.type=="rect"?
+u(d,{rx:j,ry:j}):d[W](i,j);break;case "src":a.type=="image"&&d.setAttributeNS(a.paper.xlink,"href",j);break;case "stroke-width":d.style.strokeWidth=j;d[W](i,j);f["stroke-dasharray"]&&g(a,f["stroke-dasharray"]);break;case "stroke-dasharray":g(a,j);break;case "translation":j=D(j)[G](V);j[0]=+j[0]||0;j[1]=+j[1]||0;if(h){h[1]+=j[0];h[2]+=j[1]}Aa.call(a,j[0],j[1]);break;case "scale":j=D(j)[G](V);a.scale(+j[0]||1,+j[1]||+j[0]||1,isNaN(y(j[2]))?null:+j[2],isNaN(y(j[3]))?null:+j[3]);break;case ca:if(m=D(j).match(Sa)){r=
+u("pattern");var q=u("image");r.id="r"+(l._id++)[O](36);u(r,{x:0,y:0,patternUnits:"userSpaceOnUse",height:1,width:1});u(q,{x:0,y:0});q.setAttributeNS(a.paper.xlink,"href",m[1]);r[x](q);j=C.createElement("img");j.style.cssText="position:absolute;left:-9999em;top-9999em";j.onload=function(){u(r,{width:this.offsetWidth,height:this.offsetHeight});u(q,{width:this.offsetWidth,height:this.offsetHeight});C.body.removeChild(this);a.paper.safari()};C.body[x](j);j.src=m[1];a.paper.defs[x](r);d.style.fill="url(#"+
+r.id+")";u(d,{fill:"url(#"+r.id+")"});a.pattern=r;a.pattern&&Ja(a);break}m=l.getRGB(j);if(m.error){if(({circle:1,ellipse:1}[z](a.type)||D(j).charAt()!="r")&&pa(d,j,a.paper)){f.gradient=j;f.fill="none";break}}else{delete b.gradient;delete f.gradient;!l.is(f.opacity,"undefined")&&l.is(b.opacity,"undefined")&&u(d,{opacity:f.opacity});!l.is(f["fill-opacity"],"undefined")&&l.is(b["fill-opacity"],"undefined")&&u(d,{"fill-opacity":f["fill-opacity"]})}m[z]("o")&&u(d,{"fill-opacity":m.o/100});case "stroke":m=
+l.getRGB(j);d[W](i,m.hex);i=="stroke"&&m[z]("o")&&u(d,{"stroke-opacity":m.o/100});break;case "gradient":(({circle:1,ellipse:1})[z](a.type)||D(j).charAt()!="r")&&pa(d,j,a.paper);break;case "opacity":case "fill-opacity":if(f.gradient){if(m=C.getElementById(d.getAttribute(ca)[I](/^url\(#|\)$/g,A))){m=m.getElementsByTagName("stop");m[m[o]-1][W]("stop-opacity",j)}break}default:i=="font-size"&&(j=ha(j,10)+"px");m=i[I](/(\-.)/g,function(k){return sa.call(k.substring(1))});d.style[m]=j;d[W](i,j);break}}Db(a,
+b);if(h)a.rotate(h.join(N));else y(e)&&a.rotate(e,true)},eb=1.2,Db=function(a,b){if(!(a.type!="text"||!(b[z]("text")||b[z]("font")||b[z]("font-size")||b[z]("x")||b[z]("y")))){var c=a.attrs,d=a.node,f=d.firstChild?ha(C.defaultView.getComputedStyle(d.firstChild,A).getPropertyValue("font-size"),10):10;if(b[z]("text")){for(c.text=b.text;d.firstChild;)d.removeChild(d.firstChild);b=D(b.text)[G]("\n");for(var e=0,g=b[o];e<g;e++)if(b[e]){var h=u("tspan");e&&u(h,{dy:f*eb,x:c.x});h[x](C.createTextNode(b[e]));
+d[x](h)}}else{b=d.getElementsByTagName("tspan");e=0;for(g=b[o];e<g;e++)e&&u(b[e],{dy:f*eb,x:c.x})}u(d,{y:c.y});a=a.getBBox();(a=c.y-(a.y+a.height/2))&&isFinite(a)&&u(d,{y:c.y+a})}},s=function(a,b){this[0]=a;this.id=l._oid++;this.node=a;a.raphael=this;this.paper=b;this.attrs=this.attrs||{};this.transformations=[];this._={tx:0,ty:0,rt:{deg:0,cx:0,cy:0},sx:1,sy:1};!b.bottom&&(b.bottom=this);(this.prev=b.top)&&(b.top.next=this);b.top=this;this.next=null};s[p].rotate=function(a,b,c){if(this.removed)return this;
+if(a==null){if(this._.rt.cx)return[this._.rt.deg,this._.rt.cx,this._.rt.cy][R](N);return this._.rt.deg}var d=this.getBBox();a=D(a)[G](V);if(a[o]-1){b=y(a[1]);c=y(a[2])}a=y(a[0]);if(b!=null)this._.rt.deg=a;else this._.rt.deg+=a;c==null&&(b=null);this._.rt.cx=b;this._.rt.cy=c;b=b==null?d.x+d.width/2:b;c=c==null?d.y+d.height/2:c;if(this._.rt.deg){this.transformations[0]=l.format("rotate({0} {1} {2})",this._.rt.deg,b,c);this.clip&&u(this.clip,{transform:l.format("rotate({0} {1} {2})",-this._.rt.deg,b,
+c)})}else{this.transformations[0]=A;this.clip&&u(this.clip,{transform:A})}u(this.node,{transform:this.transformations[R](N)});return this};s[p].hide=function(){!this.removed&&(this.node.style.display="none");return this};s[p].show=function(){!this.removed&&(this.node.style.display="");return this};s[p].remove=function(){if(!this.removed){ma(this,this.paper);this.node.parentNode.removeChild(this.node);for(var a in this)delete this[a];this.removed=true}};s[p].getBBox=function(){if(this.removed)return this;
+if(this.type=="path")return xa(this.attrs.path);if(this.node.style.display=="none"){this.show();var a=true}var b={};try{b=this.node.getBBox()}catch(c){}finally{b=b||{}}if(this.type=="text"){b={x:b.x,y:Infinity,width:0,height:0};for(var d=0,f=this.node.getNumberOfChars();d<f;d++){var e=this.node.getExtentOfChar(d);e.y<b.y&&(b.y=e.y);e.y+e.height-b.y>b.height&&(b.height=e.y+e.height-b.y);e.x+e.width-b.x>b.width&&(b.width=e.x+e.width-b.x)}}a&&this.hide();return b};s[p].attr=function(a,b){if(this.removed)return this;
+if(a==null){a={};for(var c in this.attrs)if(this.attrs[z](c))a[c]=this.attrs[c];this._.rt.deg&&(a.rotation=this.rotate());(this._.sx!=1||this._.sy!=1)&&(a.scale=this.scale());a.gradient&&a.fill=="none"&&(a.fill=a.gradient)&&delete a.gradient;return a}if(b==null&&l.is(a,ga)){if(a=="translation")return Aa.call(this);if(a=="rotation")return this.rotate();if(a=="scale")return this.scale();if(a==ca&&this.attrs.fill=="none"&&this.attrs.gradient)return this.attrs.gradient;return this.attrs[a]}if(b==null&&
+l.is(a,U)){b={};c=0;for(var d=a.length;c<d;c++)b[a[c]]=this.attr(a[c]);return b}if(b!=null){c={};c[a]=b;ea(this,c)}else a!=null&&l.is(a,"object")&&ea(this,a);return this};s[p].toFront=function(){if(this.removed)return this;this.node.parentNode[x](this.node);var a=this.paper;a.top!=this&&Ya(this,a);return this};s[p].toBack=function(){if(this.removed)return this;if(this.node.parentNode.firstChild!=this.node){this.node.parentNode.insertBefore(this.node,this.node.parentNode.firstChild);Za(this,this.paper)}return this};
+s[p].insertAfter=function(a){if(this.removed)return this;var b=a.node||a[a.length].node;b.nextSibling?b.parentNode.insertBefore(this.node,b.nextSibling):b.parentNode[x](this.node);$a(this,a,this.paper);return this};s[p].insertBefore=function(a){if(this.removed)return this;var b=a.node||a[0].node;b.parentNode.insertBefore(this.node,b);ab(this,a,this.paper);return this};s[p].blur=function(a){var b=this;if(+a!==0){var c=u("filter"),d=u("feGaussianBlur");b.attrs.blur=a;c.id="r"+(l._id++)[O](36);u(d,{stdDeviation:+a||
+1.5});c.appendChild(d);b.paper.defs.appendChild(c);b._blur=c;u(b.node,{filter:"url(#"+c.id+")"})}else{if(b._blur){b._blur.parentNode.removeChild(b._blur);delete b._blur;delete b.attrs.blur}b.node.removeAttribute("filter")}};var fb=function(a,b,c,d){var f=u("circle");a.canvas&&a.canvas[x](f);a=new s(f,a);a.attrs={cx:b,cy:c,r:d,fill:"none",stroke:"#000"};a.type="circle";u(f,a.attrs);return a},gb=function(a,b,c,d,f,e){var g=u("rect");a.canvas&&a.canvas[x](g);a=new s(g,a);a.attrs={x:b,y:c,width:d,height:f,
+r:e||0,rx:e||0,ry:e||0,fill:"none",stroke:"#000"};a.type="rect";u(g,a.attrs);return a},hb=function(a,b,c,d,f){var e=u("ellipse");a.canvas&&a.canvas[x](e);a=new s(e,a);a.attrs={cx:b,cy:c,rx:d,ry:f,fill:"none",stroke:"#000"};a.type="ellipse";u(e,a.attrs);return a},ib=function(a,b,c,d,f,e){var g=u("image");u(g,{x:c,y:d,width:f,height:e,preserveAspectRatio:"none"});g.setAttributeNS(a.xlink,"href",b);a.canvas&&a.canvas[x](g);a=new s(g,a);a.attrs={x:c,y:d,width:f,height:e,src:b};a.type="image";return a},
+jb=function(a,b,c,d){var f=u("text");u(f,{x:b,y:c,"text-anchor":"middle"});a.canvas&&a.canvas[x](f);a=new s(f,a);a.attrs={x:b,y:c,"text-anchor":"middle",text:d,font:ta.font,stroke:"none",fill:"#000"};a.type="text";ea(a,a.attrs);return a},kb=function(a,b){this.width=a||this.width;this.height=b||this.height;this.canvas[W]("width",this.width);this.canvas[W]("height",this.height);return this},Ca=function(){var a=Xa[K](0,arguments),b=a&&a.container,c=a.x,d=a.y,f=a.width;a=a.height;if(!b)throw new Error("SVG container not found.");
+var e=u("svg");c=c||0;d=d||0;f=f||512;a=a||342;u(e,{xmlns:"http://www.w3.org/2000/svg",version:1.1,width:f,height:a});if(b==1){e.style.cssText="position:absolute;left:"+c+"px;top:"+d+"px";C.body[x](e)}else b.firstChild?b.insertBefore(e,b.firstChild):b[x](e);b=new H;b.width=f;b.height=a;b.canvas=e;Ia.call(b,b,l.fn);b.clear();return b};H[p].clear=function(){for(var a=this.canvas;a.firstChild;)a.removeChild(a.firstChild);this.bottom=this.top=null;(this.desc=u("desc"))[x](C.createTextNode("Created with Rapha\u00ebl"));
+a[x](this.desc);a[x](this.defs=u("defs"))};H[p].remove=function(){this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas);for(var a in this)this[a]=bb(a)}}if(l.vml){var lb={M:"m",L:"l",C:"c",Z:"x",m:"t",l:"r",c:"v",z:"x"},Eb=/([clmz]),?([^clmz]*)/gi,Fb=/-?[^,\s-]+/g,qa=1000+N+1000,na=10,ra={path:1,rect:1},Gb=function(a){var b=/[ahqstv]/ig,c=oa;D(a).match(b)&&(c=wa);b=/[clmz]/g;if(c==oa&&!D(a).match(b))return a=D(a)[I](Eb,function(i,j,m){var n=[],r=fa.call(j)=="m",q=lb[j];m[I](Fb,function(k){if(r&&
+n[o]==2){q+=n+lb[j=="m"?"l":"L"];n=[]}n[F](Q(k*na))});return q+n});b=c(a);var d;a=[];for(var f=0,e=b[o];f<e;f++){c=b[f];d=fa.call(b[f][0]);d=="z"&&(d="x");for(var g=1,h=c[o];g<h;g++)d+=Q(c[g]*na)+(g!=h-1?",":A);a[F](d)}return a[R](N)};l[O]=function(){return"Your browser doesn\u2019t support SVG. Falling down to VML.\nYou are running Rapha\u00ebl "+this.version};db=function(a,b){var c=S("group");c.style.cssText="position:absolute;left:0;top:0;width:"+b.width+"px;height:"+b.height+"px";c.coordsize=
+b.coordsize;c.coordorigin=b.coordorigin;var d=S("shape"),f=d.style;f.width=b.width+"px";f.height=b.height+"px";d.coordsize=qa;d.coordorigin=b.coordorigin;c[x](d);d=new s(d,c,b);f={fill:"none",stroke:"#000"};a&&(f.path=a);d.isAbsolute=true;d.type="path";d.path=[];d.Path=A;ea(d,f);b.canvas[x](c);return d};ea=function(a,b){a.attrs=a.attrs||{};var c=a.node,d=a.attrs,f=c.style,e;e=(b.x!=d.x||b.y!=d.y||b.width!=d.width||b.height!=d.height||b.r!=d.r)&&a.type=="rect";var g=a;for(var h in b)if(b[z](h))d[h]=
+b[h];if(e){d.path=mb(d.x,d.y,d.width,d.height,d.r);a.X=d.x;a.Y=d.y;a.W=d.width;a.H=d.height}b.href&&(c.href=b.href);b.title&&(c.title=b.title);b.target&&(c.target=b.target);b.cursor&&(f.cursor=b.cursor);"blur"in b&&a.blur(b.blur);if(b.path&&a.type=="path"||e)c.path=Gb(d.path);b.rotation!=null&&a.rotate(b.rotation,true);if(b.translation){e=D(b.translation)[G](V);Aa.call(a,e[0],e[1]);if(a._.rt.cx!=null){a._.rt.cx+=+e[0];a._.rt.cy+=+e[1];a.setBox(a.attrs,e[0],e[1])}}if(b.scale){e=D(b.scale)[G](V);a.scale(+e[0]||
+1,+e[1]||+e[0]||1,+e[2]||null,+e[3]||null)}if("clip-rect"in b){e=D(b["clip-rect"])[G](V);if(e[o]==4){e[2]=+e[2]+ +e[0];e[3]=+e[3]+ +e[1];h=c.clipRect||C.createElement("div");var i=h.style,j=c.parentNode;i.clip=l.format("rect({1}px {2}px {3}px {0}px)",e);if(!c.clipRect){i.position="absolute";i.top=0;i.left=0;i.width=a.paper.width+"px";i.height=a.paper.height+"px";j.parentNode.insertBefore(h,j);h[x](j);c.clipRect=h}}if(!b["clip-rect"])c.clipRect&&(c.clipRect.style.clip=A)}if(a.type=="image"&&b.src)c.src=
+b.src;if(a.type=="image"&&b.opacity){c.filterOpacity=Fa+".Alpha(opacity="+b.opacity*100+")";f.filter=(c.filterMatrix||A)+(c.filterOpacity||A)}b.font&&(f.font=b.font);b["font-family"]&&(f.fontFamily='"'+b["font-family"][G](",")[0][I](/^['"]+|['"]+$/g,A)+'"');b["font-size"]&&(f.fontSize=b["font-size"]);b["font-weight"]&&(f.fontWeight=b["font-weight"]);b["font-style"]&&(f.fontStyle=b["font-style"]);if(b.opacity!=null||b["stroke-width"]!=null||b.fill!=null||b.stroke!=null||b["stroke-width"]!=null||b["stroke-opacity"]!=
+null||b["fill-opacity"]!=null||b["stroke-dasharray"]!=null||b["stroke-miterlimit"]!=null||b["stroke-linejoin"]!=null||b["stroke-linecap"]!=null){c=a.shape||c;f=c.getElementsByTagName(ca)&&c.getElementsByTagName(ca)[0];e=false;!f&&(e=f=S(ca));if("fill-opacity"in b||"opacity"in b){a=((+d["fill-opacity"]+1||2)-1)*((+d.opacity+1||2)-1)*((+l.getRGB(b.fill).o+1||2)-1);a<0&&(a=0);a>1&&(a=1);f.opacity=a}b.fill&&(f.on=true);if(f.on==null||b.fill=="none")f.on=false;if(f.on&&b.fill)if(a=b.fill.match(Sa)){f.src=
+a[1];f.type="tile"}else{f.color=l.getRGB(b.fill).hex;f.src=A;f.type="solid";if(l.getRGB(b.fill).error&&(g.type in{circle:1,ellipse:1}||D(b.fill).charAt()!="r")&&pa(g,b.fill)){d.fill="none";d.gradient=b.fill}}e&&c[x](f);f=c.getElementsByTagName("stroke")&&c.getElementsByTagName("stroke")[0];e=false;!f&&(e=f=S("stroke"));if(b.stroke&&b.stroke!="none"||b["stroke-width"]||b["stroke-opacity"]!=null||b["stroke-dasharray"]||b["stroke-miterlimit"]||b["stroke-linejoin"]||b["stroke-linecap"])f.on=true;(b.stroke==
+"none"||f.on==null||b.stroke==0||b["stroke-width"]==0)&&(f.on=false);a=l.getRGB(b.stroke);f.on&&b.stroke&&(f.color=a.hex);a=((+d["stroke-opacity"]+1||2)-1)*((+d.opacity+1||2)-1)*((+a.o+1||2)-1);h=(y(b["stroke-width"])||1)*0.75;a<0&&(a=0);a>1&&(a=1);b["stroke-width"]==null&&(h=d["stroke-width"]);b["stroke-width"]&&(f.weight=h);h&&h<1&&(a*=h)&&(f.weight=1);f.opacity=a;b["stroke-linejoin"]&&(f.joinstyle=b["stroke-linejoin"]||"miter");f.miterlimit=b["stroke-miterlimit"]||8;b["stroke-linecap"]&&(f.endcap=
+b["stroke-linecap"]=="butt"?"flat":b["stroke-linecap"]=="square"?"square":"round");if(b["stroke-dasharray"]){a={"-":"shortdash",".":"shortdot","-.":"shortdashdot","-..":"shortdashdotdot",". ":"dot","- ":"dash","--":"longdash","- .":"dashdot","--.":"longdashdot","--..":"longdashdotdot"};f.dashstyle=a[z](b["stroke-dasharray"])?a[b["stroke-dasharray"]]:A}e&&c[x](f)}if(g.type=="text"){f=g.paper.span.style;d.font&&(f.font=d.font);d["font-family"]&&(f.fontFamily=d["font-family"]);d["font-size"]&&(f.fontSize=
+d["font-size"]);d["font-weight"]&&(f.fontWeight=d["font-weight"]);d["font-style"]&&(f.fontStyle=d["font-style"]);g.node.string&&(g.paper.span.innerHTML=D(g.node.string)[I](/</g,"&#60;")[I](/&/g,"&#38;")[I](/\n/g,"<br>"));g.W=d.w=g.paper.span.offsetWidth;g.H=d.h=g.paper.span.offsetHeight;g.X=d.x;g.Y=d.y+Q(g.H/2);switch(d["text-anchor"]){case "start":g.node.style["v-text-align"]="left";g.bbx=Q(g.W/2);break;case "end":g.node.style["v-text-align"]="right";g.bbx=-Q(g.W/2);break;default:g.node.style["v-text-align"]=
+"center";break}}};pa=function(a,b){a.attrs=a.attrs||{};var c="linear",d=".5 .5";a.attrs.gradient=b;b=D(b)[I](cb,function(i,j,m){c="radial";if(j&&m){j=y(j);m=y(m);E(j-0.5,2)+E(m-0.5,2)>0.25&&(m=v.sqrt(0.25-E(j-0.5,2))*((m>0.5)*2-1)+0.5);d=j+N+m}return A});b=b[G](/\s*\-\s*/);if(c=="linear"){var f=b.shift();f=-y(f);if(isNaN(f))return null}var e=Wa(b);if(!e)return null;a=a.shape||a.node;b=a.getElementsByTagName(ca)[0]||S(ca);!b.parentNode&&a.appendChild(b);if(e[o]){b.on=true;b.method="none";b.color=e[0].color;
+b.color2=e[e[o]-1].color;a=[];for(var g=0,h=e[o];g<h;g++)e[g].offset&&a[F](e[g].offset+N+e[g].color);b.colors&&(b.colors.value=a[o]?a[R]():"0% "+b.color);if(c=="radial"){b.type="gradientradial";b.focus="100%";b.focussize=d;b.focusposition=d}else{b.type="gradient";b.angle=(270-f)%360}}return 1};s=function(a,b,c){this[0]=a;this.id=l._oid++;this.node=a;a.raphael=this;this.Y=this.X=0;this.attrs={};this.Group=b;this.paper=c;this._={tx:0,ty:0,rt:{deg:0},sx:1,sy:1};!c.bottom&&(c.bottom=this);(this.prev=
+c.top)&&(c.top.next=this);c.top=this;this.next=null};s[p].rotate=function(a,b,c){if(this.removed)return this;if(a==null){if(this._.rt.cx)return[this._.rt.deg,this._.rt.cx,this._.rt.cy][R](N);return this._.rt.deg}a=D(a)[G](V);if(a[o]-1){b=y(a[1]);c=y(a[2])}a=y(a[0]);if(b!=null)this._.rt.deg=a;else this._.rt.deg+=a;c==null&&(b=null);this._.rt.cx=b;this._.rt.cy=c;this.setBox(this.attrs,b,c);this.Group.style.rotation=this._.rt.deg;return this};s[p].setBox=function(a,b,c){if(this.removed)return this;var d=
+this.Group.style,f=this.shape&&this.shape.style||this.node.style;a=a||{};for(var e in a)if(a[z](e))this.attrs[e]=a[e];b=b||this._.rt.cx;c=c||this._.rt.cy;var g=this.attrs,h;switch(this.type){case "circle":a=g.cx-g.r;e=g.cy-g.r;h=g=g.r*2;break;case "ellipse":a=g.cx-g.rx;e=g.cy-g.ry;h=g.rx*2;g=g.ry*2;break;case "image":a=+g.x;e=+g.y;h=g.width||0;g=g.height||0;break;case "text":this.textpath.v=["m",Q(g.x),", ",Q(g.y-2),"l",Q(g.x)+1,", ",Q(g.y-2)][R](A);a=g.x-Q(this.W/2);e=g.y-this.H/2;h=this.W;g=this.H;
+break;case "rect":case "path":if(this.attrs.path){g=xa(this.attrs.path);a=g.x;e=g.y;h=g.width;g=g.height}else{e=a=0;h=this.paper.width;g=this.paper.height}break;default:e=a=0;h=this.paper.width;g=this.paper.height;break}b=b==null?a+h/2:b;c=c==null?e+g/2:c;b=b-this.paper.width/2;c=c-this.paper.height/2;var i;d.left!=(i=b+"px")&&(d.left=i);d.top!=(i=c+"px")&&(d.top=i);this.X=ra[z](this.type)?-b:a;this.Y=ra[z](this.type)?-c:e;this.W=h;this.H=g;if(ra[z](this.type)){f.left!=(i=-b*na+"px")&&(f.left=i);
+f.top!=(i=-c*na+"px")&&(f.top=i)}else if(this.type=="text"){f.left!=(i=-b+"px")&&(f.left=i);f.top!=(i=-c+"px")&&(f.top=i)}else{d.width!=(i=this.paper.width+"px")&&(d.width=i);d.height!=(i=this.paper.height+"px")&&(d.height=i);f.left!=(i=a-b+"px")&&(f.left=i);f.top!=(i=e-c+"px")&&(f.top=i);f.width!=(i=h+"px")&&(f.width=i);f.height!=(i=g+"px")&&(f.height=i)}};s[p].hide=function(){!this.removed&&(this.Group.style.display="none");return this};s[p].show=function(){!this.removed&&(this.Group.style.display=
+"block");return this};s[p].getBBox=function(){if(this.removed)return this;if(ra[z](this.type))return xa(this.attrs.path);return{x:this.X+(this.bbx||0),y:this.Y,width:this.W,height:this.H}};s[p].remove=function(){if(!this.removed){ma(this,this.paper);this.node.parentNode.removeChild(this.node);this.Group.parentNode.removeChild(this.Group);this.shape&&this.shape.parentNode.removeChild(this.shape);for(var a in this)delete this[a];this.removed=true}};s[p].attr=function(a,b){if(this.removed)return this;
+if(a==null){a={};for(var c in this.attrs)if(this.attrs[z](c))a[c]=this.attrs[c];this._.rt.deg&&(a.rotation=this.rotate());(this._.sx!=1||this._.sy!=1)&&(a.scale=this.scale());a.gradient&&a.fill=="none"&&(a.fill=a.gradient)&&delete a.gradient;return a}if(b==null&&l.is(a,ga)){if(a=="translation")return Aa.call(this);if(a=="rotation")return this.rotate();if(a=="scale")return this.scale();if(a==ca&&this.attrs.fill=="none"&&this.attrs.gradient)return this.attrs.gradient;return this.attrs[a]}if(this.attrs&&
+b==null&&l.is(a,U)){var d={};c=0;for(b=a[o];c<b;c++)d[a[c]]=this.attr(a[c]);return d}if(b!=null){d={};d[a]=b}b==null&&l.is(a,"object")&&(d=a);if(d){if(d.text&&this.type=="text")this.node.string=d.text;ea(this,d);if(d.gradient&&({circle:1,ellipse:1}[z](this.type)||D(d.gradient).charAt()!="r"))pa(this,d.gradient);(!ra[z](this.type)||this._.rt.deg)&&this.setBox(this.attrs)}return this};s[p].toFront=function(){!this.removed&&this.Group.parentNode[x](this.Group);this.paper.top!=this&&Ya(this,this.paper);
+return this};s[p].toBack=function(){if(this.removed)return this;if(this.Group.parentNode.firstChild!=this.Group){this.Group.parentNode.insertBefore(this.Group,this.Group.parentNode.firstChild);Za(this,this.paper)}return this};s[p].insertAfter=function(a){if(this.removed)return this;if(a.constructor==X)a=a[a.length];a.Group.nextSibling?a.Group.parentNode.insertBefore(this.Group,a.Group.nextSibling):a.Group.parentNode[x](this.Group);$a(this,a,this.paper);return this};s[p].insertBefore=function(a){if(this.removed)return this;
+if(a.constructor==X)a=a[0];a.Group.parentNode.insertBefore(this.Group,a.Group);ab(this,a,this.paper);return this};var Hb=/ progid:\S+Blur\([^\)]+\)/g;s[p].blur=function(a){var b=this.node.runtimeStyle,c=b.filter;c=c.replace(Hb,A);if(+a!==0){this.attrs.blur=a;b.filter=c+N+Fa+".Blur(pixelradius="+(+a||1.5)+")";b.margin=l.format("-{0}px 0 0 -{0}px",Q(+a||1.5))}else{b.filter=c;b.margin=0;delete this.attrs.blur}};fb=function(a,b,c,d){var f=S("group"),e=S("oval");f.style.cssText="position:absolute;left:0;top:0;width:"+
+a.width+"px;height:"+a.height+"px";f.coordsize=qa;f.coordorigin=a.coordorigin;f[x](e);e=new s(e,f,a);e.type="circle";ea(e,{stroke:"#000",fill:"none"});e.attrs.cx=b;e.attrs.cy=c;e.attrs.r=d;e.setBox({x:b-d,y:c-d,width:d*2,height:d*2});a.canvas[x](f);return e};function mb(a,b,c,d,f){return f?l.format("M{0},{1}l{2},0a{3},{3},0,0,1,{3},{3}l0,{5}a{3},{3},0,0,1,{4},{3}l{6},0a{3},{3},0,0,1,{4},{4}l0,{7}a{3},{3},0,0,1,{3},{4}z",a+f,b,c-f*2,f,-f,d-f*2,f*2-c,f*2-d):l.format("M{0},{1}l{2},0,0,{3},{4},0z",a,
+b,c,d,-c)}gb=function(a,b,c,d,f,e){var g=mb(b,c,d,f,e);a=a.path(g);var h=a.attrs;a.X=h.x=b;a.Y=h.y=c;a.W=h.width=d;a.H=h.height=f;h.r=e;h.path=g;a.type="rect";return a};hb=function(a,b,c,d,f){var e=S("group"),g=S("oval");e.style.cssText="position:absolute;left:0;top:0;width:"+a.width+"px;height:"+a.height+"px";e.coordsize=qa;e.coordorigin=a.coordorigin;e[x](g);g=new s(g,e,a);g.type="ellipse";ea(g,{stroke:"#000"});g.attrs.cx=b;g.attrs.cy=c;g.attrs.rx=d;g.attrs.ry=f;g.setBox({x:b-d,y:c-f,width:d*2,
+height:f*2});a.canvas[x](e);return g};ib=function(a,b,c,d,f,e){var g=S("group"),h=S("image");g.style.cssText="position:absolute;left:0;top:0;width:"+a.width+"px;height:"+a.height+"px";g.coordsize=qa;g.coordorigin=a.coordorigin;h.src=b;g[x](h);h=new s(h,g,a);h.type="image";h.attrs.src=b;h.attrs.x=c;h.attrs.y=d;h.attrs.w=f;h.attrs.h=e;h.setBox({x:c,y:d,width:f,height:e});a.canvas[x](g);return h};jb=function(a,b,c,d){var f=S("group"),e=S("shape"),g=e.style,h=S("path"),i=S("textpath");f.style.cssText=
+"position:absolute;left:0;top:0;width:"+a.width+"px;height:"+a.height+"px";f.coordsize=qa;f.coordorigin=a.coordorigin;h.v=l.format("m{0},{1}l{2},{1}",Q(b*10),Q(c*10),Q(b*10)+1);h.textpathok=true;g.width=a.width;g.height=a.height;i.string=D(d);i.on=true;e[x](i);e[x](h);f[x](e);g=new s(i,f,a);g.shape=e;g.textpath=h;g.type="text";g.attrs.text=d;g.attrs.x=b;g.attrs.y=c;g.attrs.w=1;g.attrs.h=1;ea(g,{font:ta.font,stroke:"none",fill:"#000"});g.setBox();a.canvas[x](f);return g};kb=function(a,b){var c=this.canvas.style;
+a==+a&&(a+="px");b==+b&&(b+="px");c.width=a;c.height=b;c.clip="rect(0 "+a+" "+b+" 0)";return this};var S;C.createStyleSheet().addRule(".rvml","behavior:url(#default#VML)");try{!C.namespaces.rvml&&C.namespaces.add("rvml","urn:schemas-microsoft-com:vml");S=function(a){return C.createElement("<rvml:"+a+' class="rvml">')}}catch(Pb){S=function(a){return C.createElement("<"+a+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}Ca=function(){var a=Xa[K](0,arguments),b=a.container,c=a.height,d=a.width,
+f=a.x;a=a.y;if(!b)throw new Error("VML container not found.");var e=new H,g=e.canvas=C.createElement("div"),h=g.style;f=f||0;a=a||0;d=d||512;c=c||342;d==+d&&(d+="px");c==+c&&(c+="px");e.width=1000;e.height=1000;e.coordsize=na*1000+N+na*1000;e.coordorigin="0 0";e.span=C.createElement("span");e.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;";g[x](e.span);h.cssText=l.format("width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden",
+d,c);if(b==1){C.body[x](g);h.left=f+"px";h.top=a+"px";h.position="absolute"}else b.firstChild?b.insertBefore(g,b.firstChild):b[x](g);Ia.call(e,e,l.fn);return e};H[p].clear=function(){this.canvas.innerHTML=A;this.span=C.createElement("span");this.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;";this.canvas[x](this.span);this.bottom=this.top=null};H[p].remove=function(){this.canvas.parentNode.removeChild(this.canvas);for(var a in this)this[a]=
+bb(a);return true}}H[p].safari=navigator.vendor=="Apple Computer, Inc."&&(navigator.userAgent.match(/Version\/(.*?)\s/)[1]<4||aa.navigator.platform.slice(0,2)=="iP")?function(){var a=this.rect(-99,-99,this.width+99,this.height+99).attr({stroke:"none"});aa.setTimeout(function(){a.remove()})}:function(){};function Ib(){this.returnValue=false}function Jb(){return this.originalEvent.preventDefault()}function Kb(){this.cancelBubble=true}function Lb(){return this.originalEvent.stopPropagation()}var Mb=
+function(){if(C.addEventListener)return function(a,b,c,d){var f=Da&&Ea[b]?Ea[b]:b;function e(g){if(Da&&Ea[z](b))for(var h=0,i=g.targetTouches&&g.targetTouches.length;h<i;h++)if(g.targetTouches[h].target==a){i=g;g=g.targetTouches[h];g.originalEvent=i;g.preventDefault=Jb;g.stopPropagation=Lb;break}return c.call(d,g)}a.addEventListener(f,e,false);return function(){a.removeEventListener(f,e,false);return true}};else if(C.attachEvent)return function(a,b,c,d){function f(g){g=g||aa.event;g.preventDefault=
+g.preventDefault||Ib;g.stopPropagation=g.stopPropagation||Kb;return c.call(d,g)}a.attachEvent("on"+b,f);function e(){a.detachEvent("on"+b,f);return true}return e}}(),$=[];function Ka(a){for(var b=a.clientX,c=a.clientY,d,f=$.length;f--;){d=$[f];if(Da)for(var e=a.touches.length,g;e--;){g=a.touches[e];if(g.identifier==d.el._drag.id){b=g.clientX;c=g.clientY;(a.originalEvent?a.originalEvent:a).preventDefault();break}}else a.preventDefault();d.move&&d.move.call(d.el,b-d.el._drag.x,c-d.el._drag.y,b,c)}}
+function La(){l.unmousemove(Ka).unmouseup(La);for(var a=$.length,b;a--;){b=$[a];b.el._drag={};b.end&&b.end.call(b.el)}$=[]}for(da=Ra[o];da--;)(function(a){l[a]=s[p][a]=function(b){if(l.is(b,"function")){this.events=this.events||[];this.events.push({name:a,f:b,unbind:Mb(this.shape||this.node||C,a,b,this)})}return this};l["un"+a]=s[p]["un"+a]=function(b){for(var c=this.events,d=c[o];d--;)if(c[d].name==a&&c[d].f==b){c[d].unbind();c.splice(d,1);!c.length&&delete this.events;return this}return this}})(Ra[da]);
+s[p].hover=function(a,b){return this.mouseover(a).mouseout(b)};s[p].unhover=function(a,b){return this.unmouseover(a).unmouseout(b)};s[p].drag=function(a,b,c){this._drag={};this.mousedown(function(d){(d.originalEvent||d).preventDefault();this._drag.x=d.clientX;this._drag.y=d.clientY;this._drag.id=d.identifier;b&&b.call(this,d.clientX,d.clientY);!$.length&&l.mousemove(Ka).mouseup(La);$.push({el:this,move:a,end:c})});return this};s[p].undrag=function(a,b,c){for(b=$.length;b--;){$[b].el==this&&$[b].move==
+a&&$[b].end==c&&$.splice(b,1);!$.length&&l.unmousemove(Ka).unmouseup(La)}};H[p].circle=function(a,b,c){return fb(this,a||0,b||0,c||0)};H[p].rect=function(a,b,c,d,f){return gb(this,a||0,b||0,c||0,d||0,f||0)};H[p].ellipse=function(a,b,c,d){return hb(this,a||0,b||0,c||0,d||0)};H[p].path=function(a){a&&!l.is(a,ga)&&!l.is(a[0],U)&&(a+=A);return db(l.format[K](l,arguments),this)};H[p].image=function(a,b,c,d,f){return ib(this,a||"about:blank",b||0,c||0,d||0,f||0)};H[p].text=function(a,b,c){return jb(this,
+a||0,b||0,c||A)};H[p].set=function(a){arguments[o]>1&&(a=Array[p].splice.call(arguments,0,arguments[o]));return new X(a)};H[p].setSize=kb;H[p].top=H[p].bottom=null;H[p].raphael=l;function nb(){return this.x+N+this.y}s[p].resetScale=function(){if(this.removed)return this;this._.sx=1;this._.sy=1;this.attrs.scale="1 1"};s[p].scale=function(a,b,c,d){if(this.removed)return this;if(a==null&&b==null)return{x:this._.sx,y:this._.sy,toString:nb};b=b||a;!+b&&(b=a);var f,e,g=this.attrs;if(a!=0){var h=this.getBBox(),
+i=h.x+h.width/2,j=h.y+h.height/2;f=a/this._.sx;e=b/this._.sy;c=+c||c==0?c:i;d=+d||d==0?d:j;h=~~(a/v.abs(a));var m=~~(b/v.abs(b)),n=this.node.style,r=c+(i-c)*f;j=d+(j-d)*e;switch(this.type){case "rect":case "image":var q=g.width*h*f,k=g.height*m*e;this.attr({height:k,r:g.r*ba(h*f,m*e),width:q,x:r-q/2,y:j-k/2});break;case "circle":case "ellipse":this.attr({rx:g.rx*h*f,ry:g.ry*m*e,r:g.r*ba(h*f,m*e),cx:r,cy:j});break;case "text":this.attr({x:r,y:j});break;case "path":i=Ha(g.path);for(var t=true,L=0,B=
+i[o];L<B;L++){var w=i[L],J=sa.call(w[0]);if(!(J=="M"&&t)){t=false;if(J=="A"){w[i[L][o]-2]*=f;w[i[L][o]-1]*=e;w[1]*=h*f;w[2]*=m*e;w[5]=+!(h+m?!+w[5]:+w[5])}else if(J=="H"){J=1;for(var ia=w[o];J<ia;J++)w[J]*=f}else if(J=="V"){J=1;for(ia=w[o];J<ia;J++)w[J]*=e}else{J=1;for(ia=w[o];J<ia;J++)w[J]*=J%2?f:e}}}e=xa(i);f=r-e.x-e.width/2;e=j-e.y-e.height/2;i[0][1]+=f;i[0][2]+=e;this.attr({path:i});break}if(this.type in{text:1,image:1}&&(h!=1||m!=1))if(this.transformations){this.transformations[2]="scale("[M](h,
+",",m,")");this.node[W]("transform",this.transformations[R](N));f=h==-1?-g.x-(q||0):g.x;e=m==-1?-g.y-(k||0):g.y;this.attr({x:f,y:e});g.fx=h-1;g.fy=m-1}else{this.node.filterMatrix=Fa+".Matrix(M11="[M](h,", M12=0, M21=0, M22=",m,", Dx=0, Dy=0, sizingmethod='auto expand', filtertype='bilinear')");n.filter=(this.node.filterMatrix||A)+(this.node.filterOpacity||A)}else if(this.transformations){this.transformations[2]=A;this.node[W]("transform",this.transformations[R](N));g.fx=0;g.fy=0}else{this.node.filterMatrix=
+A;n.filter=(this.node.filterMatrix||A)+(this.node.filterOpacity||A)}g.scale=[a,b,c,d][R](N);this._.sx=a;this._.sy=b}return this};s[p].clone=function(){if(this.removed)return null;var a=this.attr();delete a.scale;delete a.translation;return this.paper[this.type]().attr(a)};var ob=Z(function(a,b,c,d,f,e,g,h,i){for(var j=0,m,n=0;n<1.01;n+=0.01){var r=la(a,b,c,d,f,e,g,h,n);n&&(j+=E(E(m.x-r.x,2)+E(m.y-r.y,2),0.5));if(j>=i)return r;m=r}});function Ma(a,b){return function(c,d,f){c=wa(c);for(var e,g,h,i,
+j="",m={},n=0,r=0,q=c.length;r<q;r++){h=c[r];if(h[0]=="M"){e=+h[1];g=+h[2]}else{i=Nb(e,g,h[1],h[2],h[3],h[4],h[5],h[6]);if(n+i>d){if(b&&!m.start){e=ob(e,g,h[1],h[2],h[3],h[4],h[5],h[6],d-n);j+=["C",e.start.x,e.start.y,e.m.x,e.m.y,e.x,e.y];if(f)return j;m.start=j;j=["M",e.x,e.y+"C",e.n.x,e.n.y,e.end.x,e.end.y,h[5],h[6]][R]();n+=i;e=+h[5];g=+h[6];continue}if(!a&&!b){e=ob(e,g,h[1],h[2],h[3],h[4],h[5],h[6],d-n);return{x:e.x,y:e.y,alpha:e.alpha}}}n+=i;e=+h[5];g=+h[6]}j+=h}m.end=j;e=a?n:b?m:l.findDotsAtSegment(e,
+g,h[1],h[2],h[3],h[4],h[5],h[6],1);e.alpha&&(e={x:e.x,y:e.y,alpha:e.alpha});return e}}var Nb=Z(function(a,b,c,d,f,e,g,h){for(var i={x:0,y:0},j=0,m=0;m<1.01;m+=0.01){var n=la(a,b,c,d,f,e,g,h,m);m&&(j+=E(E(i.x-n.x,2)+E(i.y-n.y,2),0.5));i=n}return j}),pb=Ma(1),Ba=Ma(),Na=Ma(0,1);s[p].getTotalLength=function(){if(this.type=="path"){if(this.node.getTotalLength)return this.node.getTotalLength();return pb(this.attrs.path)}};s[p].getPointAtLength=function(a){if(this.type=="path"){if(this.node.getPointAtLength)return this.node.getPointAtLength(a);
+return Ba(this.attrs.path,a)}};s[p].getSubpath=function(a,b){if(this.type=="path"){if(v.abs(this.getTotalLength()-b)<1.0E-6)return Na(this.attrs.path,a).end;b=Na(this.attrs.path,b,1);return a?Na(b,a).end:b}};l.easing_formulas={linear:function(a){return a},"<":function(a){return E(a,3)},">":function(a){return E(a-1,3)+1},"<>":function(a){a*=2;if(a<1)return E(a,3)/2;a-=2;return(E(a,3)+2)/2},backIn:function(a){var b=1.70158;return a*a*((b+1)*a-b)},backOut:function(a){a-=1;var b=1.70158;return a*a*((b+
+1)*a+b)+1},elastic:function(a){if(a==0||a==1)return a;var b=0.3,c=b/4;return E(2,-10*a)*v.sin((a-c)*2*v.PI/b)+1},bounce:function(a){var b=7.5625,c=2.75;if(a<1/c)a=b*a*a;else if(a<2/c){a-=1.5/c;a=b*a*a+0.75}else if(a<2.5/c){a-=2.25/c;a=b*a*a+0.9375}else{a-=2.625/c;a=b*a*a+0.984375}return a}};var T={length:0};function qb(){var a=+new Date;for(var b in T)if(b!="length"&&T[z](b)){var c=T[b];if(c.stop||c.el.removed){delete T[b];T[o]--}else{var d=a-c.start,f=c.ms,e=c.easing,g=c.from,h=c.diff,i=c.to,j=c.t,
+m=c.prev||0,n=c.el,r=c.callback,q={},k;if(d<f){r=l.easing_formulas[e]?l.easing_formulas[e](d/f):d/f;for(var t in g)if(g[z](t)){switch(Ga[t]){case "along":k=r*f*h[t];i.back&&(k=i.len-k);e=Ba(i[t],k);n.translate(h.sx-h.x||0,h.sy-h.y||0);h.x=e.x;h.y=e.y;n.translate(e.x-h.sx,e.y-h.sy);i.rot&&n.rotate(h.r+e.alpha,e.x,e.y);break;case P:k=+g[t]+r*f*h[t];break;case "colour":k="rgb("+[Oa(Q(g[t].r+r*f*h[t].r)),Oa(Q(g[t].g+r*f*h[t].g)),Oa(Q(g[t].b+r*f*h[t].b))][R](",")+")";break;case "path":k=[];e=0;for(var L=
+g[t][o];e<L;e++){k[e]=[g[t][e][0]];for(var B=1,w=g[t][e][o];B<w;B++)k[e][B]=+g[t][e][B]+r*f*h[t][e][B];k[e]=k[e][R](N)}k=k[R](N);break;case "csv":switch(t){case "translation":k=h[t][0]*(d-m);e=h[t][1]*(d-m);j.x+=k;j.y+=e;k=k+N+e;break;case "rotation":k=+g[t][0]+r*f*h[t][0];g[t][1]&&(k+=","+g[t][1]+","+g[t][2]);break;case "scale":k=[+g[t][0]+r*f*h[t][0],+g[t][1]+r*f*h[t][1],2 in i[t]?i[t][2]:A,3 in i[t]?i[t][3]:A][R](N);break;case "clip-rect":k=[];for(e=4;e--;)k[e]=+g[t][e]+r*f*h[t][e];break}break}q[t]=
+k}n.attr(q);n._run&&n._run.call(n)}else{if(i.along){e=Ba(i.along,i.len*!i.back);n.translate(h.sx-(h.x||0)+e.x-h.sx,h.sy-(h.y||0)+e.y-h.sy);i.rot&&n.rotate(h.r+e.alpha,e.x,e.y)}(j.x||j.y)&&n.translate(-j.x,-j.y);i.scale&&(i.scale+=A);n.attr(i);delete T[b];T[o]--;n.in_animation=null;l.is(r,"function")&&r.call(n)}c.prev=d}}l.svg&&n&&n.paper&&n.paper.safari();T[o]&&aa.setTimeout(qb)}function Oa(a){return Y(ba(a,255),0)}function Aa(a,b){if(a==null)return{x:this._.tx,y:this._.ty,toString:nb};this._.tx+=
++a;this._.ty+=+b;switch(this.type){case "circle":case "ellipse":this.attr({cx:+a+this.attrs.cx,cy:+b+this.attrs.cy});break;case "rect":case "image":case "text":this.attr({x:+a+this.attrs.x,y:+b+this.attrs.y});break;case "path":var c=Ha(this.attrs.path);c[0][1]+=+a;c[0][2]+=+b;this.attr({path:c});break}return this}s[p].animateWith=function(a,b,c,d,f){T[a.id]&&(b.start=T[a.id].start);return this.animate(b,c,d,f)};s[p].animateAlong=rb();s[p].animateAlongBack=rb(1);function rb(a){return function(b,c,
+d,f){var e={back:a};l.is(d,"function")?(f=d):(e.rot=d);b&&b.constructor==s&&(b=b.attrs.path);b&&(e.along=b);return this.animate(e,c,f)}}s[p].onAnimation=function(a){this._run=a||0;return this};s[p].animate=function(a,b,c,d){if(l.is(c,"function")||!c)d=c||null;var f={},e={},g={};for(var h in a)if(a[z](h))if(Ga[z](h)){f[h]=this.attr(h);f[h]==null&&(f[h]=ta[h]);e[h]=a[h];switch(Ga[h]){case "along":var i=pb(a[h]),j=Ba(a[h],i*!!a.back),m=this.getBBox();g[h]=i/b;g.tx=m.x;g.ty=m.y;g.sx=j.x;g.sy=j.y;e.rot=
+a.rot;e.back=a.back;e.len=i;a.rot&&(g.r=y(this.rotate())||0);break;case P:g[h]=(e[h]-f[h])/b;break;case "colour":f[h]=l.getRGB(f[h]);i=l.getRGB(e[h]);g[h]={r:(i.r-f[h].r)/b,g:(i.g-f[h].g)/b,b:(i.b-f[h].b)/b};break;case "path":i=wa(f[h],e[h]);f[h]=i[0];j=i[1];g[h]=[];i=0;for(m=f[h][o];i<m;i++){g[h][i]=[0];for(var n=1,r=f[h][i][o];n<r;n++)g[h][i][n]=(j[i][n]-f[h][i][n])/b}break;case "csv":j=D(a[h])[G](V);i=D(f[h])[G](V);switch(h){case "translation":f[h]=[0,0];g[h]=[j[0]/b,j[1]/b];break;case "rotation":f[h]=
+i[1]==j[1]&&i[2]==j[2]?i:[0,j[1],j[2]];g[h]=[(j[0]-f[h][0])/b,0,0];break;case "scale":a[h]=j;f[h]=D(f[h])[G](V);g[h]=[(j[0]-f[h][0])/b,(j[1]-f[h][1])/b,0,0];break;case "clip-rect":f[h]=D(f[h])[G](V);g[h]=[];for(i=4;i--;)g[h][i]=(j[i]-f[h][i])/b;break}e[h]=j}}this.stop();this.in_animation=1;T[this.id]={start:a.start||+new Date,ms:b,easing:c,from:f,diff:g,to:e,el:this,callback:d,t:{x:0,y:0}};++T[o]==1&&qb();return this};s[p].stop=function(){T[this.id]&&T[o]--;delete T[this.id];return this};s[p].translate=
+function(a,b){return this.attr({translation:a+" "+b})};s[p][O]=function(){return"Rapha\u00ebl\u2019s object"};l.ae=T;function X(a){this.items=[];this[o]=0;this.type="set";if(a)for(var b=0,c=a[o];b<c;b++)if(a[b]&&(a[b].constructor==s||a[b].constructor==X)){this[this.items[o]]=this.items[this.items[o]]=a[b];this[o]++}}X[p][F]=function(){for(var a,b,c=0,d=arguments[o];c<d;c++)if((a=arguments[c])&&(a.constructor==s||a.constructor==X)){b=this.items[o];this[b]=this.items[b]=a;this[o]++}return this};X[p].pop=
+function(){delete this[this[o]--];return this.items.pop()};for(var Pa in s[p])if(s[p][z](Pa))X[p][Pa]=function(a){return function(){for(var b=0,c=this.items[o];b<c;b++)this.items[b][a][K](this.items[b],arguments);return this}}(Pa);X[p].attr=function(a,b){if(a&&l.is(a,U)&&l.is(a[0],"object")){b=0;for(var c=a[o];b<c;b++)this.items[b].attr(a[b])}else{c=0;for(var d=this.items[o];c<d;c++)this.items[c].attr(a,b)}return this};X[p].animate=function(a,b,c,d){(l.is(c,"function")||!c)&&(d=c||null);var f=this.items[o],
+e=f,g,h=this,i;d&&(i=function(){!--f&&d.call(h)});c=l.is(c,ga)?c:i;for(g=this.items[--e].animate(a,b,c,i);e--;)this.items[e].animateWith(g,a,b,c,i);return this};X[p].insertAfter=function(a){for(var b=this.items[o];b--;)this.items[b].insertAfter(a);return this};X[p].getBBox=function(){for(var a=[],b=[],c=[],d=[],f=this.items[o];f--;){var e=this.items[f].getBBox();a[F](e.x);b[F](e.y);c[F](e.x+e.width);d[F](e.y+e.height)}a=ba[K](0,a);b=ba[K](0,b);return{x:a,y:b,width:Y[K](0,c)-a,height:Y[K](0,d)-b}};
+X[p].clone=function(a){a=new X;for(var b=0,c=this.items[o];b<c;b++)a[F](this.items[b].clone());return a};l.registerFont=function(a){if(!a.face)return a;this.fonts=this.fonts||{};var b={w:a.w,face:{},glyphs:{}},c=a.face["font-family"];for(var d in a.face)if(a.face[z](d))b.face[d]=a.face[d];if(this.fonts[c])this.fonts[c][F](b);else this.fonts[c]=[b];if(!a.svg){b.face["units-per-em"]=ha(a.face["units-per-em"],10);for(var f in a.glyphs)if(a.glyphs[z](f)){c=a.glyphs[f];b.glyphs[f]={w:c.w,k:{},d:c.d&&"M"+
+c.d[I](/[mlcxtrv]/g,function(g){return{l:"L",c:"C",x:"z",t:"m",r:"l",v:"c"}[g]||"M"})+"z"};if(c.k)for(var e in c.k)if(c[z](e))b.glyphs[f].k[e]=c.k[e]}}return a};H[p].getFont=function(a,b,c,d){d=d||"normal";c=c||"normal";b=+b||{normal:400,bold:700,lighter:300,bolder:800}[b]||400;if(l.fonts){var f=l.fonts[a];if(!f){a=new RegExp("(^|\\s)"+a[I](/[^\w\d\s+!~.:_-]/g,A)+"(\\s|$)","i");for(var e in l.fonts)if(l.fonts[z](e))if(a.test(e)){f=l.fonts[e];break}}var g;if(f){e=0;for(a=f[o];e<a;e++){g=f[e];if(g.face["font-weight"]==
+b&&(g.face["font-style"]==c||!g.face["font-style"])&&g.face["font-stretch"]==d)break}}return g}};H[p].print=function(a,b,c,d,f,e){e=e||"middle";var g=this.set(),h=D(c)[G](A),i=0;l.is(d,c)&&(d=this.getFont(d));if(d){c=(f||16)/d.face["units-per-em"];var j=d.face.bbox.split(V);f=+j[0];e=+j[1]+(e=="baseline"?j[3]-j[1]+ +d.face.descent:(j[3]-j[1])/2);j=0;for(var m=h[o];j<m;j++){var n=j&&d.glyphs[h[j-1]]||{},r=d.glyphs[h[j]];i+=j?(n.w||d.w)+(n.k&&n.k[h[j]]||0):0;r&&r.d&&g[F](this.path(r.d).attr({fill:"#000",
+stroke:"none",translation:[i,0]}))}g.scale(c,c,f,e).translate(a-f,b-e)}return g};var Ob=/\{(\d+)\}/g;l.format=function(a,b){var c=l.is(b,U)?[0][M](b):arguments;a&&l.is(a,ga)&&c[o]-1&&(a=a[I](Ob,function(d,f){return c[++f]==null?A:c[f]}));return a||A};l.ninja=function(){Qa.was?(Raphael=Qa.is):delete Raphael;return l};l.el=s[p];return l}();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/lib/underscore-min.js	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,30 @@
+// Underscore.js 1.2.3
+// (c) 2009-2011 Jeremy Ashkenas, DocumentCloud Inc.
+// Underscore is freely distributable under the MIT license.
+// Portions of Underscore are inspired or borrowed from Prototype,
+// Oliver Steele's Functional, and John Resig's Micro-Templating.
+// For all details and documentation:
+// http://documentcloud.github.com/underscore
+(function(){function r(a,c,d){if(a===c)return a!==0||1/a==1/c;if(a==null||c==null)return a===c;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return false;switch(e){case "[object String]":return a==String(c);case "[object Number]":return a!=+a?c!=+c:a==0?1/a==1/c:a==+c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source==
+c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if(typeof a!="object"||typeof c!="object")return false;for(var f=d.length;f--;)if(d[f]==a)return true;d.push(a);var f=0,g=true;if(e=="[object Array]"){if(f=a.length,g=f==c.length)for(;f--;)if(!(g=f in a==f in c&&r(a[f],c[f],d)))break}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return false;for(var h in a)if(m.call(a,h)&&(f++,!(g=m.call(c,h)&&r(a[h],c[h],d))))break;if(g){for(h in c)if(m.call(c,
+h)&&!f--)break;g=!f}}d.pop();return g}var s=this,F=s._,o={},k=Array.prototype,p=Object.prototype,i=k.slice,G=k.concat,H=k.unshift,l=p.toString,m=p.hasOwnProperty,v=k.forEach,w=k.map,x=k.reduce,y=k.reduceRight,z=k.filter,A=k.every,B=k.some,q=k.indexOf,C=k.lastIndexOf,p=Array.isArray,I=Object.keys,t=Function.prototype.bind,b=function(a){return new n(a)};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports)exports=module.exports=b;exports._=b}else typeof define==="function"&&
+define.amd?define("underscore",function(){return b}):s._=b;b.VERSION="1.2.3";var j=b.each=b.forEach=function(a,c,b){if(a!=null)if(v&&a.forEach===v)a.forEach(c,b);else if(a.length===+a.length)for(var e=0,f=a.length;e<f;e++){if(e in a&&c.call(b,a[e],e,a)===o)break}else for(e in a)if(m.call(a,e)&&c.call(b,a[e],e,a)===o)break};b.map=function(a,c,b){var e=[];if(a==null)return e;if(w&&a.map===w)return a.map(c,b);j(a,function(a,g,h){e[e.length]=c.call(b,a,g,h)});return e};b.reduce=b.foldl=b.inject=function(a,
+c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(x&&a.reduce===x)return e&&(c=b.bind(c,e)),f?a.reduce(c,d):a.reduce(c);j(a,function(a,b,i){f?d=c.call(e,d,a,b,i):(d=a,f=true)});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(y&&a.reduceRight===y)return e&&(c=b.bind(c,e)),f?a.reduceRight(c,d):a.reduceRight(c);var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,
+c,d,e):b.reduce(g,c)};b.find=b.detect=function(a,c,b){var e;D(a,function(a,g,h){if(c.call(b,a,g,h))return e=a,true});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(z&&a.filter===z)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(A&&a.every===A)return a.every(c,
+b);j(a,function(a,g,h){if(!(e=e&&c.call(b,a,g,h)))return o});return e};var D=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(B&&a.some===B)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return o});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;return q&&a.indexOf===q?a.indexOf(c)!=-1:b=D(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(c.call?c||a:a[c]).apply(a,
+d)})};b.pluck=function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b<e.computed&&(e={value:a,
+computed:b})});return e.value};b.shuffle=function(a){var c=[],b;j(a,function(a,f){f==0?c[0]=a:(b=Math.floor(Math.random()*(f+1)),c[f]=c[b],c[b]=a)});return c};b.sortBy=function(a,c,d){return b.pluck(b.map(a,function(a,b,g){return{value:a,criteria:c.call(d,a,b,g)}}).sort(function(a,c){var b=a.criteria,d=c.criteria;return b<d?-1:b>d?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=
+function(a,c,d){d||(d=b.identity);for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?e=g+1:f=g}return e};b.toArray=function(a){return!a?[]:a.toArray?a.toArray():b.isArray(a)?i.call(a):b.isArguments(a)?i.call(a):b.values(a)};b.size=function(a){return b.toArray(a).length};b.first=b.head=function(a,b,d){return b!=null&&!d?i.call(a,0,b):a[0]};b.initial=function(a,b,d){return i.call(a,0,a.length-(b==null||d?1:b))};b.last=function(a,b,d){return b!=null&&!d?i.call(a,Math.max(a.length-b,0)):a[a.length-
+1]};b.rest=b.tail=function(a,b,d){return i.call(a,b==null||d?1:b)};b.compact=function(a){return b.filter(a,function(a){return!!a})};b.flatten=function(a,c){return b.reduce(a,function(a,e){if(b.isArray(e))return a.concat(c?e:b.flatten(e));a[a.length]=e;return a},[])};b.without=function(a){return b.difference(a,i.call(arguments,1))};b.uniq=b.unique=function(a,c,d){var d=d?b.map(a,d):a,e=[];b.reduce(d,function(d,g,h){if(0==h||(c===true?b.last(d)!=g:!b.include(d,g)))d[d.length]=g,e[e.length]=a[h];return d},
+[]);return e};b.union=function(){return b.uniq(b.flatten(arguments,true))};b.intersection=b.intersect=function(a){var c=i.call(arguments,1);return b.filter(b.uniq(a),function(a){return b.every(c,function(c){return b.indexOf(c,a)>=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1));return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e<c;e++)d[e]=b.pluck(a,""+e);return d};b.indexOf=function(a,
+c,d){if(a==null)return-1;var e;if(d)return d=b.sortedIndex(a,c),a[d]===c?d:-1;if(q&&a.indexOf===q)return a.indexOf(c);for(d=0,e=a.length;d<e;d++)if(d in a&&a[d]===c)return d;return-1};b.lastIndexOf=function(a,b){if(a==null)return-1;if(C&&a.lastIndexOf===C)return a.lastIndexOf(b);for(var d=a.length;d--;)if(d in a&&a[d]===b)return d;return-1};b.range=function(a,b,d){arguments.length<=1&&(b=a||0,a=0);for(var d=arguments[2]||1,e=Math.max(Math.ceil((b-a)/d),0),f=0,g=Array(e);f<e;)g[f++]=a,a+=d;return g};
+var E=function(){};b.bind=function(a,c){var d,e;if(a.bind===t&&t)return t.apply(a,i.call(arguments,1));if(!b.isFunction(a))throw new TypeError;e=i.call(arguments,2);return d=function(){if(!(this instanceof d))return a.apply(c,e.concat(i.call(arguments)));E.prototype=a.prototype;var b=new E,g=a.apply(b,e.concat(i.call(arguments)));return Object(g)===g?g:b}};b.bindAll=function(a){var c=i.call(arguments,1);c.length==0&&(c=b.functions(a));j(c,function(c){a[c]=b.bind(a[c],a)});return a};b.memoize=function(a,
+c){var d={};c||(c=b.identity);return function(){var b=c.apply(this,arguments);return m.call(d,b)?d[b]:d[b]=a.apply(this,arguments)}};b.delay=function(a,b){var d=i.call(arguments,2);return setTimeout(function(){return a.apply(a,d)},b)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(i.call(arguments,1)))};b.throttle=function(a,c){var d,e,f,g,h,i=b.debounce(function(){h=g=false},c);return function(){d=this;e=arguments;var b;f||(f=setTimeout(function(){f=null;h&&a.apply(d,e);i()},c));g?h=true:
+a.apply(d,e);i();g=true}};b.debounce=function(a,b){var d;return function(){var e=this,f=arguments;clearTimeout(d);d=setTimeout(function(){d=null;a.apply(e,f)},b)}};b.once=function(a){var b=false,d;return function(){if(b)return d;b=true;return d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var d=G.apply([a],arguments);return b.apply(this,d)}};b.compose=function(){var a=arguments;return function(){for(var b=arguments,d=a.length-1;d>=0;d--)b=[a[d].apply(this,b)];return b[0]}};b.after=
+function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=I||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var b=[],d;for(d in a)m.call(a,d)&&(b[b.length]=d);return b};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)b[d]!==void 0&&(a[d]=b[d])});return a};b.defaults=function(a){j(i.call(arguments,
+1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return r(a,b,[])};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(m.call(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=p||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===
+Object(a)};b.isArguments=function(a){return l.call(a)=="[object Arguments]"};if(!b.isArguments(arguments))b.isArguments=function(a){return!(!a||!m.call(a,"callee"))};b.isFunction=function(a){return l.call(a)=="[object Function]"};b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)==
+"[object Date]"};b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.noConflict=function(){s._=F;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e<a;e++)b.call(d,e)};b.escape=function(a){return(""+a).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;").replace(/\//g,"&#x2F;")};b.mixin=function(a){j(b.functions(a),function(c){J(c,
+b[c]=a[c])})};var K=0;b.uniqueId=function(a){var b=K++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};b.template=function(a,c){var d=b.templateSettings,d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.escape,function(a,b){return"',_.escape("+b.replace(/\\'/g,"'")+"),'"}).replace(d.interpolate,function(a,b){return"',"+b.replace(/\\'/g,
+"'")+",'"}).replace(d.evaluate||null,function(a,b){return"');"+b.replace(/\\'/g,"'").replace(/[\r\n\t]/g," ")+";__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",e=new Function("obj","_",d);return c?e(c,b):function(a){return e.call(this,a,b)}};var n=function(a){this._wrapped=a};b.prototype=n.prototype;var u=function(a,c){return c?b(a).chain():a},J=function(a,c){n.prototype[a]=function(){var a=i.call(arguments);H.call(a,this._wrapped);return u(c.apply(b,
+a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];n.prototype[a]=function(){b.apply(this._wrapped,arguments);return u(this._wrapped,this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];n.prototype[a]=function(){return u(b.apply(this._wrapped,arguments),this._chain)}});n.prototype.chain=function(){this._chain=true;return this};n.prototype.value=function(){return this._wrapped}}).call(this);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/templates/base.html	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,67 @@
+{% load analytics %}
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{{LANGUAGE_CODE}}" lang="{{LANGUAGE_CODE}}">
+    <head>
+        <meta charset="utf-8" />
+        <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />        
+        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
+        <meta http-equiv="content-language" content="{{LANGUAGE_CODE}}" />
+        <link rel="SHORTCUT ICON" href="{{STATIC_URL}}hdalab/img/favicon.ico" />        
+        <title>{% block title %}HdA Lab{% endblock %}</title>
+
+{% block css_import %}
+        <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/common.css" />
+{% endblock %}
+
+{% block js_import %}
+        <script src="{{STATIC_URL}}hdalab/lib/jquery-1.7.1.min.js"></script>
+{% endblock %}
+        
+    </head>
+    <body>
+
+{% block header %}
+        <div id="header">
+            <ul id="nav">
+                <li><a class="{% block home_actif %}{% endblock %}" href="{% url home %}">Accueil</a></li>
+                <li>&mdash;</li>
+                <li>Navigation par&nbsp;:</li>
+                <li><a class="{% block facettes_actif %}{% endblock %}" href="{% url facettes %}">Facettes</a></li>
+                <li><a class="{% block categories_actif %}{% endblock %}" href="{% url categories %}">Catégories de Wikipedia</a></li>
+                <li><a class="{% block thesaurus_actif %}{% endblock %}" href="{% url thesaurus %}">Thésaurus</a></li>
+            </ul>
+            <h1>
+                <a href="{% url home %}">HdA Lab</a>
+            </h1>
+        </div>
+        <div id="container">
+{% endblock %}
+
+{% block main_content %}
+
+{% endblock %}
+
+{% block footer %}
+        </div>
+        <div id="footer">
+            <ul id="footer-contents">
+                <li>
+                    <p>Une expérimentation de l'Institut de Recherche et d'Innovation et du Ministère de la Culture et de la Communication</p>
+                </li>
+                <li>
+                    <a href="http://culture.gouv.fr/" target="_blank">
+                        <img src="{{STATIC_URL}}hdalab/img/logo_mcc_blanc.png" />
+                    </a>
+                </li>
+                <li>
+                    <a href="http://www.iri-research.org/" target="_blank">
+                        <img src="{{STATIC_URL}}hdalab/img/logo_iri_blanc.png" />
+                    </a>
+                </li>
+            </ul>
+        </div>
+{% endblock %}
+    {% analytics %}
+    </body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/templates/categories.html	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,62 @@
+{% extends "base.html" %}
+
+{% block title %}{{block.super}} &gt; Recherche par arbre{% endblock %}
+
+{% block css_import %}
+{{block.super}}
+        <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/ui-lightness/jquery-ui-1.8.16.custom.css" />
+        <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/trees.css?refresh" />
+        <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/cattree.css?refresh" />
+{% endblock %}
+
+{% block js_import %}
+{{block.super}}
+        <script src="{{STATIC_URL}}hdalab/lib/underscore-min.js"></script>
+        <script src="{{STATIC_URL}}hdalab/lib/mustache.js"></script>
+        <script src="{{STATIC_URL}}hdalab/lib/jquery-ui-1.8.16.custom.min.js"></script>
+        <script type="text/javascript">
+        endpoints = {
+            cat_search: "{% url cat_search %}",
+            cat_tree: "{% url cat_tree %}",
+            fill_tree: "{% url fill_tree %}",
+            datasheet: "{% url notice 'ID' %}"
+        };
+        </script>
+        <script src="{{STATIC_URL}}hdalab/js/trees.js?refresh"></script>
+        <script src="{{STATIC_URL}}hdalab/js/cattree.js?refresh"></script>
+{% endblock %}
+
+{% block categories_actif %}actif{% endblock %}
+
+{% block main_content %}
+    <div class="leftzone">
+        <h2>Explorer les domaines artistiques</h2>
+        <p>
+            Cette interface expérimentale présente les ressources d'<a href="http://histoiredesarts.culture.fr/" target="_blank">Histoire des Arts</a>,
+            ordonnées selon l'arborescence des <a href="http://fr.wikipedia.org/wiki/Sp%C3%A9cial:ArbreCat%C3%A9gorie/Espace_Cat%C3%A9gorie" target="_blank">catégories de Wikipédia</a>.
+            Seules les ressources les plus pertinentes sont affichées.
+        </p>
+        <ul class="disciplist">
+            <li><a href="#">Architecture</a></li>
+            <li><a href="#">Cinéma</a></li>
+            <li><a href="#">Littérature</a></li>
+            <li><a href="#">Musique</a></li>
+            <li><a href="#">Peinture</a></li>
+            <li><a href="#">Photographie</a></li>
+            <li><a href="#">Poésie</a></li>
+            <li><a href="#">Sculpture</a></li>
+            <li><a href="#">Théâtre</a></li>
+        </ul>
+        <h3>Recherche de catégories de Wikipédia&nbsp;: </h3>
+        <p>
+            <form id="catform"><input id="catsearch" /></form>
+        </p>
+        <div class="results hidden">
+            <h2>Résultats pour &laquo;&nbsp;<span class="label-name"></span>&nbsp;&raquo;&nbsp;:</h2>
+            <p class="category-results"><span class="category-count"></span> sous-catégorie(s)</p>
+            <p class="tag-results"><span class="tag-count"></span> tag(s)</p>
+            <p class="content-results"><span class="content-count"></span> contenu(s)</p>
+        </div>
+    </div>
+    <div id="tree" class="cattree"></div>
+{% endblock %}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/templates/facettes.html	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,165 @@
+{% extends "base.html" %}
+
+{% load i18n %}
+
+{% block title %}{{block.super}} &gt; {% trans "Recherche par facettes" %}{% endblock %}
+
+{% block css_import %}
+{{block.super}}
+        <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/lib/leaflet/leaflet.css" />
+        <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/ui-lightness/jquery-ui-1.8.16.custom.css" />
+        <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/facettes.css?refresh" />
+{% endblock %}
+
+{% block js_import %}
+{{block.super}}
+        <script src="{{STATIC_URL}}hdalab/lib/raphael-min.js"></script>
+        <script src="{{STATIC_URL}}hdalab/lib/underscore-min.js"></script>
+        <script src="{{STATIC_URL}}hdalab/lib/jquery-ui-1.8.16.custom.min.js"></script>
+        <script src="{{STATIC_URL}}hdalab/lib/leaflet/leaflet.js"></script>
+        <script src="{{STATIC_URL}}hdalab/lib/ZeroClipboard.js"></script>
+
+        <script src="{% url jsi18n 'hdalab' %}"></script>
+        <script src="{{STATIC_URL}}hdalab/js/gomina.js?refresh"></script>
+        
+        <script type="text/javascript">
+        gomNs.languageCode = '{{LANGUAGE_CODE}}';
+        gomNs.urls = {
+            'filter': "{% url filter %}",
+            'session_info': "{% url session_info %}",
+            'countries': "{{STATIC_URL}}hdalab/lib/countries.geo.json",
+            'tag_search': "{% url tag_search %}",
+            'datasheet': "{% url notice 'ID' %}"
+        };
+        ZeroClipboard.setMoviePath('{{STATIC_URL}}hdalab/lib/ZeroClipboard.swf');
+        </script>
+{% endblock %}
+
+{% block facettes_actif %}actif{% endblock %}
+
+{% block main_content %}
+        <div id="titleleft">
+            <h2 id="hdatitle">{% trans "Recherche par facettes" %}&nbsp;: <span id="sessionname"></span></h2>
+        </div>
+        <div id="titleright">
+            <div id='langselect'>
+                <form action="{% url django.views.i18n.set_language %}" method="post" id="lang_form">
+                {% csrf_token %}
+                    <!--input name="next" type="hidden" value="" /-->
+                    {% get_language_info_list for LANGUAGES as languages %}
+                    {% for language in languages %}
+                        <input type="submit" name="language" class="langbutton{% if language.code == LANGUAGE_CODE %} selected{% endif %}" style="background-image: url({{STATIC_URL}}hdalab/img/flag_{{ language.code }}.png)" value="{{ language.code }}" title="{{ language.name_local }}" />
+                    {% endfor %}
+                </form>
+            </div>
+            <div id="apartager"><a href="#">{% trans "Partager la session" %}</a></div>
+            <div id="partageurls">
+                <ul>
+                    <li class="actif" id="partagero"><a href="#">{% trans "En lecture seule" %}</a></li>
+                    <li id="partagerw"><a href="#">{% trans "En lecture-ecriture" %}</a></li>
+                </ul>
+                <div id="zc-partageligne">
+                    <label id="zc-partagelabel">{% trans "Copier le lien" %}&nbsp;: </label>
+                    <input id="zc-partageinput" onfocus="select();" />
+                </div>
+            </div>
+            <div id="vues">
+                <h4 id="vuestitre">{% trans "Mes vues :"%}</h4>
+                <ul id="ongletsvues">
+                </ul>
+                <span id="nouvellevue"><a href="#">+</a></span>
+            </div>
+            <ul id="plusdevues">
+                <li id="nouv_resrech"><a href="#">{% trans "Creer une vue sur des resultats de recherche" %}</a></li>
+                <li id="nouv_liste"><a href="#">{% trans "Creer une liste de notices" %}</a></li>
+            </ul>
+        </div>
+        <div id="waitcontainer">
+            <div id="waiting"></div>
+        </div>
+        <div id="bandefiltre">
+            <h4 id="filtertitle">
+                {% trans "Filtres :" %}
+            </h4>
+            <ul id="filters">
+            </ul>
+        </div>
+        <div id="timeline">
+            <ul id="dates"></ul>
+            <div id="dateheat"></div>
+            <div id="handle_0" class="handle">
+                <div class="handleinner"></div>
+            </div>
+            <div id="handle_1" class="handle">
+                <div class="handleinner"></div>
+            </div>
+        </div>
+        <div id="leftcol">
+            <div id="bloc_gestvue">
+                <div class="barrebloc">
+                    <h2>{% trans "Gerer la vue" %}</h2>
+                </div>
+                <div class="corpsbloc" id="gestvue">
+                    <div id="div_titrevue">
+                        <label>{% trans "Nom :" %}</label>
+                        <input id="titrevue" />
+                    </div>
+                    <h4>{% trans "Blocs visibles :" %}</h4>
+                </div>
+            </div>
+            <div class="bloc" id="bloc_map">
+                <div class="barrebloc">
+                    <h2>{% trans "Pays" %}</h2>
+                </div>
+                <div class="corpsbloc" id="map"></div>
+            </div>
+            <div class="bloc" id="bloc_tagcloud">
+                <div class="barrebloc">
+                    <h2>{% trans "Nuage de mots-cles" %}</h2>
+                </div>
+                <div class="corpsbloc" id="tagcloud">
+                </div>
+            </div>
+            <div class="bloc" id="bloc_taginfo">
+                <div class="barrebloc">
+                    <h2>{% trans "Rechercher un tag" %}</h2>
+                </div>
+                <div class="corpsbloc" id="taginfo">
+                    <form id="tagform">
+                        <input id="tagsearch" placeholder="{% trans "Rechercher un tag" %}" />
+                    </form>
+                    <div class="wpinfo">
+                        
+                    </div>
+                </div>
+            </div>
+            <div class="bloc" id="bloc_translationinfo">
+            {% trans "translation_info" %}
+            </div>
+        </div>
+        <div id="rightcol">
+            <div class="bloc" id="bloc_notes">
+                <div class="barrebloc">
+                    <h2>{% trans "Notes" %}</h2>
+                </div>
+                <div id="notes" class="corpsbloc"></div>
+            </div>
+            <div class="bloc" id="bloc_disciplines">
+                <div class="barrebloc">
+                    <h2>{% trans "Disciplines artistiques" %}</h2>
+                </div>
+                <div id="disciplines" class="corpsbloc"></div>
+            </div>
+            <div class="bloc" id="bloc_notices">
+                <div class="barrebloc">
+                    <h2>{% trans "Resultats de recherche" %}</h2>
+                </div>
+                <div class="corpsbloc">
+                    <div id="contentcount"></div>
+                    <div id="contents"></div>
+                </div>
+            </div>
+        </div>
+    </div>
+
+{% endblock %}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/templates/google_analytics/analytics_template.html	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,10 @@
+<script type="text/javascript">
+var _gaq = _gaq || [];
+_gaq.push(['_setAccount', '{{ analytics_code }}']);
+_gaq.push(['_trackPageview']);
+(function() {
+var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+})();
+</script>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/templates/google_analytics/async_analytics_template.html	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,6 @@
+<script>
+var _gaq=[['_setAccount','{{ analytics_code }}'],['_trackPageview']];
+(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
+g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js';
+s.parentNode.insertBefore(g,s)}(document,'script'));
+</script>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/templates/index.html	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,132 @@
+{% extends "base.html" %}
+
+{% block title %}{{block.super}} &gt; Accueil{% endblock %}
+
+{% block css_import %}
+{{block.super}}
+        <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/index.css" />
+{% endblock %}
+
+{% block js_import %}
+{{block.super}}
+        <script type="text/javascript">
+            $(function() {
+                $(".fond-bloc").mouseover(function() {
+                    var _this = this;
+                    $(".overlay-bloc").each(function() {
+                        if (this.parentNode == _this) {
+                            $(this).slideDown();
+                        } else {
+                            $(this).slideUp();
+                        }
+                    });
+                }).click(function() {
+                    document.location.href = $(this).find("a").attr("href");
+                    return false;
+                });
+            });
+        </script>
+{% endblock %}
+
+{% block home_actif %}actif{% endblock %}
+
+{% block main_content %}
+    <h2>Explorez autrement le portail Histoire des Arts</h2>
+    <div class="liste-applis">
+        <div class="bloc-appli">
+            <h3>Recherche par facettes</h3>
+            <div class="fond-bloc" id="bloc-facettes">
+                <div class="overlay-bloc">
+                    <p>Recherchez les contenus d'Histoire des Arts par plusieurs points d'entrée&nbsp;: pays, périodes historiques, disciplines artistiques et mots-clés liés aux &oelig;vres.</p>
+                    <p>Les éléments de l'interface sont à la fois des critères de recherche et des mode de visualisation des résultats&nbsp;: Au fur et à mesure de vos recherches, ils se mettent à jour pour refléter le nombre de contenus correspondant.</p>
+                    <p class="goto"><a href="{% url facettes %}">&raquo;</a></p>
+                </div>
+            </div>
+        </div>
+
+        <div class="separateur-applis"></div>
+        <div class="bloc-appli">
+            <h3>Catégories de Wikipedia</h3>
+            <div class="fond-bloc" id="bloc-categories">
+                <div class="overlay-bloc">
+                    <p>Naviguez dans l'arbre des catégories de Wikipedia pour atteindre les contenus du portail Histoire des Arts.</p>
+                    <p>Recherchez une catégorie par son titre, puis explorez les sous-catégories et les tags qui y sont rattachés.</p>
+                    <p class="goto"><a href="{% url categories %}">&raquo;</a></p>
+                </div>
+            </div>
+        </div>
+        
+        <div class="separateur-applis"></div>
+        <div class="bloc-appli">
+            <h3>Navigation par thésaurus</h3>
+            <div class="fond-bloc" id="bloc-thesaurus">
+                <div class="overlay-bloc">
+                    <p>Cette interface présente deux extraits de thésaurus utilisés par le ministère de la Culture et de la Communication :</p>
+                    <ul>
+                        <li>La branche « Secteur urbain » du Thésaurus de l’architecture et de l’urbanisme (état 2010)</li>
+                        <li>La branche « Architecture d’habitation » du Thésaurus iconographique Garnier (état 2012)</li>
+                    </ul>
+                    <p class="goto"><a href="{% url thesaurus %}">&raquo;</a></p>
+                </div>
+            </div>
+        </div>
+
+        <div style="clear: both;"> </div>
+    </div>
+    <h3>À propos de HdA Lab</h3>
+    <p>Le portail Histoire des arts a pour vocation de mettre à la disposition de publics prescripteurs &mdash;&nbsp;via un site Internet&nbsp;&mdash; une sélection de ressources culturelles et éducatives riches en lien avec le programme officiel de l’enseignement de l’Histoire des arts. Le volet HDA-Lab de ce projet s’inscrit dans le cadre d’une collaboration entre l’Institut de Recherche et d'Innovation (IRI) et le Ministère de la Culture et de la Communication. Ce projet de recherche et développement prévoit la réalisation d’une preuve de concept destinée à montrer le potentiel heuristique du tagging sémantique.</p>
+    <p>Le corpus utilisé pour les besoins de ce projet est extrait du site Histoire des arts, proposant un accès à près de 5&nbsp;000 ressources qualifiées, accessible à l’adresse <a href="http://www.histoiredesarts.culture.fr" target="_blank">http://histoiredesarts.culture.fr</a>. Ce portail est alimenté par un réseau dynamique de 350 institutions culturelles, sur l’ensemble du territoire. Cet annuaire a pour vocation d’aider la communauté éducative (enseignants, médiateurs culturels…) à trouver des documents fiables dans le domaine de l’histoire des arts. Les notices descriptives de chaque ressource renvoient, par des liens profonds, vers autant de ressources en ligne, chaque notice contenant des mots-clés, initialement produits comme de simples tags.</p>
+    <p>Le programme de Recherche et Développement impliquant l’IRI et le Ministère de la Culture et de la Communication &mdash;&nbsp;via son Département des Programmes Numériques (DPN)&nbsp;&mdash; a permis la réalisation de deux outils&nbsp;:</p>
+    <ul>
+        <li>Un module de tagging sémantique du corpus &laquo;&nbsp;Histoire des Arts&nbsp;&raquo; destiné à l’indexation des ressources, via le back-office du site (module &laquo;&nbsp;HDA-BO&nbsp;&raquo;)</li>
+        <li>Une interface de recherche et de navigation de la version sémantisée du corpus (projet &laquo;&nbsp;HDA-Lab&nbsp;&raquo;)</li>
+    </ul>
+    <p>Les tags sémantiques sont constitués des entrées de Wikipédia et dotés de métadonnées, dont les URIs de DBpedia.org correspondant à ces entrées. Les données-clés extraites des articles de Wikipedia sont les infobox et les catégories. Les fonctionnalités de recherche et de navigation dans le corpus s’appuient sur le graphe de DBpedia. L’interface propose des fonctionnalités telles qu’une recherche par facettes, une carte heuristique, etc. ainsi qu’un enrichissement des résultats de recherche à l’aide d’extraits de Wikipedia (photos, définitions…).</p>
+    <p>La preuve de concept est résolument orientée utilisateur final, répondant à une approche de recherche appliquée. Les internautes pourront comparer en direct les fonctionnalités classiques de l’interface d’origine avec les fonctionnalités enrichies de la preuve de concept. L’objectif est de démontrer l’intérêt du tagging sémantique et de sensibiliser l’utilisateur final aux enjeux du Web de données. &Agrave; terme, cette phase expérimentale a vocation à enrichir les fonctionnalités du portail Histoire des arts.</p>
+    <p>&nbsp;</p>
+    <p>NB : La première version de HDA-Lab disponible en mars 2012 s’appuie sur une sémantisation  (production des tags sémantiques) très partielle du corpus &laquo;&nbsp;Histoire des Arts&nbsp;&raquo;. De même les fonctionnalités ne sont pas définitives. L’ensemble du projet &mdash;&nbsp;sémantisation et fonctionnalités&nbsp;&mdash; sera mis en œuvre progressivement d'ici juin 2012.</p>
+    <div class="mini-table">
+        <div class="half-bloc">
+            <p>
+                <a href="http://culture.gouv.fr/" target="_blank" title="Ministère de la Culture et de la Communication">
+                    <img src="{{STATIC_URL}}hdalab/img/logo_mcc.png" alt="Ministère de la Culture et de la Communication" />
+                </a>
+            </p>
+        </div>
+        <div class="half-bloc">
+            <p>
+                <a href="http://www.iri-research.org/" target="_blank">
+                    <img src="{{STATIC_URL}}hdalab/img/logo_iri.png" alt="Institut de Recherche et d'Innovation" />
+                </a>
+            </p>
+        </div>
+    </div>
+    <div class="mini-table">
+        <div class="half-bloc">
+            <p>Département des Programmes Numériques</p>
+        </div>
+        <div class="half-bloc">
+            <p>Directeur&nbsp;: <strong>Bernard Stiegler</strong></p>
+            <p>Directeur exécutif&nbsp;: <strong>Vincent Puig</strong></p>
+        </div>
+    </div>
+    <h4>&Eacute;quipes projet</h4>
+    <div class="mini-table">
+        <div class="half-bloc">
+            <p>Pour le DPN&nbsp;:</p>
+            <ul>
+                <li>Chef de projet utilisateur : <strong>Bertrand Sajus</strong></li>
+                <li>Responsables éditoriales : <strong>Marion Martin Laprade</strong> et <strong>Cécile Riottot</strong></li>
+            </ul>
+        </div>
+        <div class="half-bloc">
+            <p>Pour l'IRI&nbsp;:</p>
+            <ul>
+                <li>Architecture back-office et coordination technique&nbsp;: <strong>Yves-Marie Haussonne</strong></li>
+                <li>Coordination scientifique&nbsp;: <strong>Alexandre Monnin</strong></li>
+                <li>Outils de sémantisation&nbsp;: <strong>Thibaut Cavalié</strong></li>
+                <li>Interfaces de visualisation et d'annotation&nbsp;: <strong>Raphaël Velt</strong></li>
+            </ul>
+        </div>
+    </div>
+{% endblock %}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/templates/notice.html	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,54 @@
+{% extends "base.html" %}
+
+{% block title %}{{block.super}} &gt; {{datasheet.title}}{% endblock %}
+
+{% block css_import %}
+{{block.super}}
+        <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/notice.css?refresh" />
+{% endblock %}
+
+{% block js_import %}
+{{block.super}}
+        <script src="{{STATIC_URL}}hdalab/lib/underscore-min.js"></script>
+        <script src="{{STATIC_URL}}hdalab/js/notice.js?refresh"></script>
+{% endblock %}
+
+{% block main_content %}
+<div class="main-datasheet">
+    <h2><a href="{{datasheet.url}}" target="_blank">{{datasheet.title}}</a></h2>
+    <h3><a href="{{datasheet.organisation.website}}" target="_blank">{{datasheet.organisation.name}}</a></h3>
+    <img src="http://histoiredesarts.culture.fr/images/cached/images/{{datasheet.hda_id}}.jpg" />
+    <p>{{datasheet.description}}</p>
+    <ul>
+        <li>Accéder à cette ressource sur <a href="{{datasheet.url}}" target="_blank">{{domain}}</a></li>
+        <li>Plus d'informations sur <a href="http://histoiredesarts.culture.fr/notices/{{datasheet.hda_id}}/" target="_blank">histoiredesarts.culture.fr</a></li>
+    </ul>
+</div>
+
+<div class="tag-container">
+    <canvas class="tag-canvas"></canvas>
+    <div class="tags-main">
+        <h2>Mots-clés</h2>
+        <ul class="tags">
+        {% for t in ordered_tags %}
+            <li><span class="main-datasheet-tag" data-tag-id="{{t.tag.id}}">{{t.tag.label}}</span></li>
+        {% endfor %}
+        </ul>
+    </div>
+</div>
+
+<div class="related-datasheets">
+    <h2>Notices liées :</h2>
+    <ul class="datasheets">
+    {% for ds in related %}
+        <li class="datasheet">
+            <img src="http://histoiredesarts.culture.fr/images/cached/images/{{ds.hda_id}}.jpg" />
+            <h3><a href="{% url notice ds.hda_id %}">{{ds.title}}</a></h3>
+            <h4>{{ds.organisation_name}}</h4>
+            <ul class="datasheet-tags">{% for t in ds.ordered_tags %}<li data-tag-id="{{t.id}}" class="related-datasheet-tag {% if t.common %} common-tag{% endif %}">{{t.label}}</li>{% endfor %}</ul>
+        </li>
+    {% endfor %}
+    </ul>
+</div>
+    
+{% endblock %}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/templates/thesaurus.html	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,52 @@
+{% extends "base.html" %}
+
+{% block title %}{{block.super}} &gt; Recherche par arbre{% endblock %}
+
+{% block css_import %}
+{{block.super}}
+        <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/ui-lightness/jquery-ui-1.8.16.custom.css" />
+        <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/trees.css?refresh" />
+        <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/thesaurus.css?refresh" />
+{% endblock %}
+
+{% block js_import %}
+{{block.super}}
+        <script src="{{STATIC_URL}}hdalab/lib/underscore-min.js"></script>
+        <script src="{{STATIC_URL}}hdalab/lib/mustache.js"></script>
+        <script src="{{STATIC_URL}}hdalab/lib/jquery-ui-1.8.16.custom.min.js"></script>
+        <script type="text/javascript">
+        endpoints = {
+            fill_tree: "{% url fill_tree %}",
+            datasheet: "{% url notice 'ID' %}"
+        };
+        </script>
+        <script src="{{STATIC_URL}}hdalab/js/trees.js?refresh"></script>
+        <script src="{{STATIC_URL}}hdalab/js/thesaurus.js?refresh"></script>
+{% endblock %}
+
+{% block thesaurus_actif %}actif{% endblock %}
+
+{% block main_content %}
+    <div class="explain">
+        <p>Cette interface présente deux extraits de thésaurus utilisés par le ministère de la Culture et de la Communication :</p>
+        <ul>
+            <li>La branche « Secteur urbain » du Thésaurus de l’architecture et de l’urbanisme (état 2010)</li>
+            <li>La branche « Architecture d’habitation » du Thésaurus iconographique Garnier (état 2012)</li>
+        </ul>
+        <p>Les mots-clés de ces branches ont été liés avec Wikipédia. Ils deviennent ainsi sémantiquement interopérables avec les tags d’HDA-Lab. Comme le montre l’interface, ce procédé permet d’organiser et de visualiser les tags et les ressources d'HDA-Lab en utilisant des thésaurus « métiers » externes. Dans cet extrait, le mot-clé « Cité jardin » est présenté, en vis-à-vis, dans deux univers sémantiques différents</p>
+    </div>
+    
+    <div class="column leftcol">
+        <h3>Arborescence 1</h3>
+        <div class="cattree">
+        
+        </div>
+    </div>
+    <div class="separator"></div>
+    <div class="column rightcol">
+        <h3>Arborescence 2</h3>
+        <div class="cattree">
+            
+        </div>
+    </div>
+{% endblock %}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/templatetags/analytics.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,70 @@
+###
+# Taken and adapted form django-google-analytics : http://
+#
+#
+##
+from django import template
+
+from django.template import Context, loader
+from django.conf import settings
+
+
+register = template.Library()
+
+def __clean_token(str, tag_name):
+    if not (str[0] == str[-1] and str[0] in ('"', "'")):
+        raise template.TemplateSyntaxError, "%r tag's argument should be in quotes" % tag_name
+    return str[1:-1]
+
+def do_get_analytics(parser, token):
+    code = None
+    style = None
+    tag_name = None
+    try:
+        # split_contents() knows not to split quoted strings.
+        tokens = token.split_contents()
+        if len(tokens) > 0 :
+            tag_name = tokens[0]
+        if len(tokens) > 1 :
+            style = tokens[1]
+        if len(tokens) > 2 :
+            code = tokens[2]
+    except ValueError:
+        code = None
+   
+    if not code:
+        code = getattr(settings,'GOOGLE_ANALYTICS_CODE',None)
+    else:
+        code = __clean_token(code, tag_name)
+
+    if style:
+        style = __clean_token(style, tag_name)
+    else:
+        style = 'async'
+
+    return AnalyticsNode(code, style)
+    
+class AnalyticsNode(template.Node):
+    def __init__(self, code=None, style='async'):
+        self.code = code
+        self.style = style
+        
+    def render(self, context):
+        if not self.code:
+            return ''
+        
+        if self.style == 'async':
+            template_path = 'google_analytics/async_analytics_template.html'
+        else:
+            template_path = 'google_analytics/analytics_template.html'
+
+        if self.code.strip() != '':
+            t = loader.get_template(template_path)
+            c = Context({
+                'analytics_code': self.code,
+            })
+            return t.render(c)
+        else:
+            return ''
+        
+register.tag('analytics', do_get_analytics)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/urls.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+from django.conf.urls.defaults import patterns, include, url
+from django.contrib import admin
+from django.views.generic import TemplateView
+#from hdalab.views.ajax import filter
+
+# Uncomment the next two lines to enable the admin:
+# from django.contrib import admin
+# admin.autodiscover()
+
+urlpatterns = patterns('',
+    # Examples:
+    # url(r'^$', 'hdalab.views.home', name='home'),
+    # url(r'^hdalab/', include('hdalab.foo.urls')),
+
+    # Uncomment the admin/doc line below to enable admin documentation:
+    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
+
+    # Uncomment the next line to enable the admin:
+    url(r'^admin/', include(admin.site.urls)),
+    
+    url(r'^i18n/', include('django.conf.urls.i18n')),
+    url('^jsi18n/?$', 'django.views.i18n.javascript_catalog', name='jsi18n.all'),
+    url('^jsi18n/(?P<packages>\S+?)/$', 'django.views.i18n.javascript_catalog', {'domain':'djangojs'}, name='jsi18n'),
+    
+    url(r'^facettes/', TemplateView.as_view(template_name="facettes.html"), name='facettes'),
+    url(r'^categories/', TemplateView.as_view(template_name="categories.html"), name='categories'),
+    url(r'^thesaurus/', TemplateView.as_view(template_name="thesaurus.html"), name='thesaurus'),
+    url(r'^$', TemplateView.as_view(template_name="index.html"), name='home'),
+    
+    url(r'^notice/(?P<hda_id>[\w-]+)$', 'hdalab.views.pages.datasheet', name='notice')
+
+)
+
+urlpatterns += patterns('hdalab.views.ajax',
+    (r'^a/filter$', 'filter', {}, 'filter'),
+    (r'^a/sessioninfo$', 'sessioninfo', {}, 'session_info'),
+    (r'^a/tagsearch$', 'tagsearch', {}, 'tag_search'),
+    (r'^a/catsearch$', 'catsearch', {}, 'cat_search'),
+    (r'^a/cattree$', 'cattree', {}, 'cat_tree'),
+    (r'^a/filltree$', 'filltree', {}, 'fill_tree'),
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/utils.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Mar 13, 2012
+
+@author: ymh
+'''
+from django.core.cache import cache
+from django.utils.encoding import smart_str
+import md5
+import re
+
+
+def fix_cache_key(key):
+    cache_key = re.sub(r'\s+', '-', key)
+    cache_key = smart_str(cache_key)
+    if len(cache_key) > (250-(2+len(cache.key_prefix)+len(str(cache.version)))-33):
+        cache_key = cache_key[:(250-(2+len(cache.key_prefix)+len(str(cache.version)))-33)] + '-' + md5.new(cache_key).hexdigest()
+    return cache_key
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/views/ajax.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,458 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Jan 31, 2012
+
+@author: ymh
+'''
+from django.conf import settings
+from django.core.cache import cache
+from django.db.models import Q, Count, Min
+from django.http import HttpResponse
+from hdabo.models import Tag, Datasheet, TaggedSheet
+from hdalab.models import HdaSession, Country, TagYears, DatasheetExtras
+from hdalab.models.dataviz import DbpediaFieldsTranslation, DbpediaFields
+from hdalab.models.categories import WpCategory, WpCategoryInclusion, TagWpCategory
+from hdalab.utils import fix_cache_key
+import copy
+import django.utils.simplejson as json
+import hmac
+import itertools
+import uuid
+
+def tagtranslation(request):
+    
+    lang = request.GET.get('lang',request.LANGUAGE_CODE)
+    labels = request.GET.get('labels',None)
+
+    if not labels:
+        return HttpResponse(content=json.dumps({}), mimetype='application/json')
+    
+    labelslist = [lbl.strip() for lbl in labels.split(",")]
+    masters = []
+    
+    for lbl in labelslist:
+        labelqs = Tag.objects.select_related('dbpedia_fields').filter(~Q(dbpedia_uri = None), label__iexact = lbl)[0:1]
+        if len(labelqs) > 0:
+            tag = labelqs.get()
+            if tag.dbpedia_fields:
+                masters.append(tag.dbpedia_fields)
+    
+    translationqs = DbpediaFieldsTranslation.objects.select_related("master", "master__tag").filter(master__in = masters, language_code=lang)
+    
+    translations = dict([(t.master.label, t.label) for t in translationqs])
+    
+    return HttpResponse(content=json.dumps(translations), mimetype='application/json')
+
+def subcat(category, globtags, level, max_level ):
+    # recursive function used by cattree
+    catlabel = category.label
+    tags = Tag.objects.filter(wp_categories__wp_category = category).distinct()
+    taglabels = [k for k in dict([(t.label,t.label) for t in tags])]
+    resobj = {
+          'label': category.label,
+          'themes': [],
+          'contents': []
+      }
+    for label in taglabels:
+        if label == catlabel:
+            globtags[label] = {'level': level, 'access': resobj }
+        else:
+            tag_in_list = {'label' : label, 'contents': []}
+            resobj['themes'].append(tag_in_list)
+            globtags[label] = {'level': (level + 1), 'access': tag_in_list }
+            
+    if level < max_level:
+        subcats = WpCategory.objects.filter(parent_categories__parent_category = category)
+        resobj['themes'] += [subcat(subcats[i], globtags, level + 1, max_level ) for i in range(len(subcats))]
+    return resobj
+
+def cleantags(category):
+    if category.has_key('contents') and len(category['contents']) == 0:
+        del category['contents']
+    if category.has_key('contents'):
+        category['contents'] = sorted(category['contents'], key=lambda content: -content['score'])
+    if category.has_key('themes'):
+        themes = []
+        for theme in category['themes']:
+            clean_theme = cleantags(theme)
+            if clean_theme.has_key('themes') or clean_theme.has_key('contents'):
+                themes.append(clean_theme)
+        category['themes'] = sorted(themes, key=lambda cat: cat['label'])
+        if len(category['themes']) == 0:
+            del category['themes']
+    return category
+
+def cattree(request):
+    # Gets the category tree from a label
+    ROOT_MAX_TAG_ORDER = 8
+    MAX_TAG_ORDER = 8
+    MAX_LEVEL = 3
+    LEVEL_COEFF = 5
+    label = request.GET.get('label', None)
+    lowerlabel = label.lower()
+    globtags = {}
+    resobj = None
+    master_category = WpCategory.objects.filter(label__iexact=label)[0:1]
+    if len(master_category):
+        resobj = subcat(master_category[0], globtags, 1, MAX_LEVEL )
+    
+#    tag_list = [k for k in globtags]
+    
+#    if len(tag_list):
+    contents = []
+#    datasheets = Datasheet.objects.filter(validated = True, taggedsheet__tag__label__in = tag_list, taggedsheet__order__lte = MAX_TAG_ORDER).distinct()
+    datasheets = Datasheet.objects.filter(validated = True, taggedsheet__tag__label__iexact = label, taggedsheet__order__lte = ROOT_MAX_TAG_ORDER).select_related('organisation').distinct()
+    for datasheet in datasheets:
+        # Calculating where we add the datasheet in the tree
+        maintag = None
+        maintagscore = -5
+        dsscore = 0
+        rootscore = 0
+        for ts in TaggedSheet.objects.select_related('tag','datasheet').filter(datasheet__id=datasheet.id,order__lte=MAX_TAG_ORDER):
+            label = ts.tag.label
+            if globtags.has_key(label):
+                score = LEVEL_COEFF * globtags[label]['level'] - ts.order
+                if score > maintagscore:
+                    maintagscore = score
+                    maintag = label
+                    dsscore = (MAX_TAG_ORDER - ts.order)
+                if label.lower() == lowerlabel:
+                    rootscore = (ROOT_MAX_TAG_ORDER - ts.order)
+        if maintag is not None:
+            globtags[maintag]['access']['contents'].append({
+                'id': datasheet.id,
+                'title': datasheet.title,
+                'url': datasheet.url,
+                'description': datasheet.description,
+                'hda_id': datasheet.hda_id,
+                'organization': datasheet.organisation.name,
+                'organization_url': datasheet.organisation.website,
+                'score': max(dsscore, rootscore)
+            })
+    cleantags(resobj)
+                    
+#        resobj['contents'] = [{'id': d.id, 'title': d.title, 'tags': [t.label for t in d.tags.filter(taggedsheet__order__lte=5)]} for d in datasheets]
+    
+    return HttpResponse(content=json.dumps(resobj), mimetype='application/json')
+
+def sessioninfo(request):
+    
+    data = json.loads(request.GET.get('data', "{}"))
+    write = False
+    
+    if 'sessionid' in request.GET:
+        request.session['sessionid'] = request.GET['sessionid']
+    if 'sessionkey' in request.GET:
+        request.session['sessionkey'] = request.GET['sessionkey']
+        
+    if 'sessionid' in request.session:
+        sessionid = request.session['sessionid']
+        
+        if HdaSession.objects.filter(sessionid=sessionid).count() == 1:
+            sessionkey = request.session.get('sessionkey',None)
+            hm = hmac.new(settings.SECRET_KEY, sessionid)
+            if hm.hexdigest() == sessionkey:
+                write = True            
+        else:
+            del request.session['sessionid']
+        
+    if 'sessionid' not in request.session:
+        sessionid = unicode(uuid.uuid1())
+        HdaSession.objects.create(sessionid=sessionid, data=json.dumps({}))
+        write = True
+        request.session['sessionid'] = sessionid
+        request.session['sessionkey'] = hmac.new(settings.SECRET_KEY, sessionid).hexdigest()
+        
+    if write and data:
+        HdaSession.objects.filter(sessionid=sessionid).update(data=json.dumps(data))
+    else:
+        data = HdaSession.objects.get(sessionid=sessionid).data
+        data = json.loads(data) if data else {}           
+         
+    resobj = {'data': data, "write_allowed" : write, "sessionid": sessionid }
+    if write:
+        resobj['sessionkey'] = request.session['sessionkey']
+        
+    return HttpResponse(content=json.dumps(resobj), mimetype='application/json')
+
+
+def tagsearch(request):
+    
+    q = request.GET.get('term',None)
+    maxcount = int(request.GET.get('count','40'))
+    lang = request.GET.get('lang',request.LANGUAGE_CODE)
+    
+    stemming_langs = [ 'fr', 'en', 'de', 'it' ]
+    # For Japanese, there are no word boundaries, we should not use the regexp in that case
+    no_translate_langs = [ 'fr' ]
+    
+    if q:
+        lq = q.lower()
+        qs = Tag.objects.select_related('dbpedia_fields').filter(datasheet__validated=True)
+        qrx = '(\\m|\\b)%s'%q
+        if lang in no_translate_langs:
+            if lang in stemming_langs:
+                qs = qs.filter( label__iregex = qrx )
+            else:
+                qs = qs.filter( label__icontains = q )
+        else:
+            if lang in stemming_langs:
+                qs = qs.filter(dbpedia_fields__translations__label__iregex=qrx, dbpedia_fields__translations__language_code=lang, dbpedia_fields__translations__is_label_translated = True)
+            else:
+                qs = qs.filter(dbpedia_fields__translations__label__icontains=q, dbpedia_fields__translations__language_code=lang, dbpedia_fields__translations__is_label_translated = True)
+    else:
+        qs = Tag.objects.filter(~Q(dbpedia_uri = None))
+           
+    qs = qs.annotate(nb=Count('datasheet',distinct=True)).order_by('-nb')[:maxcount]
+    
+    qslist = list(qs)
+    
+    if lang in no_translate_langs:
+        translations = {}
+    else:
+        transqs = DbpediaFieldsTranslation.objects.filter(master__tag__in = qslist, language_code=lang, is_label_translated=True).select_related("master")
+        translations = dict([(tr.master.tag_id, {'label':tr.label,'abstract':tr.abstract, 'is_label_translated': tr.is_label_translated}) for tr in transqs])
+    
+    res = []
+    
+    for t in qslist:
+        dbfields = t.dbpedia_fields
+        resobj = {'original_label':t.label,'nb':t.nb}
+        resobj['thumbnail'] = dbfields.thumbnail if dbfields is not None else None
+        
+#        if t.id in translations and not translations[t.id].get('is_label_translated', True):
+#            continue
+        if t.id in translations:
+            resobj['value'] = translations[t.id]['label']
+            resobj['abstract'] = translations[t.id]['abstract']
+        else:
+            resobj['value'] = t.label
+            resobj['abstract'] = dbfields.abstract if dbfields is not None else None
+        if q is None or resobj['value'].lower().find(lq) != -1:
+            res.append(resobj)
+    
+    return HttpResponse(content=json.dumps(res), mimetype='application/json')
+
+def catsearch(request):
+    
+    q = request.GET.get('term',None)
+    
+    # On ne récupère que les catégories qui sont également des tags
+    qrx = '(\\m|\\b)%s'%q
+    qs = Tag.objects.filter(label__iregex=q)
+    
+    labels = [tag.label for tag in qs]
+    
+    qs = WpCategory.objects.annotate(nb=Count('child_categories__child_category__tags')).filter(label__in = labels, nb__gt=0)
+    
+    res = [{'value':t.label} for t in qs]
+    
+    return HttpResponse(content=json.dumps(res), mimetype='application/json')
+
+def filter(request):
+    
+    lang = request.GET.get('lang',request.LANGUAGE_CODE)
+    periode = request.GET.get('period',None)
+    label = request.GET.get('label', None)
+    country = request.GET.get('country', None)
+    contentlist = request.GET.get('contentlist', None)
+    max_tag_order = int(request.GET.get('mto', '12'))
+    content_count = request.GET.get('contentcount', 12)
+    tag_count = request.GET.get('tagcount', 30)
+    no_translate_langs = [ 'fr' ]
+    
+    key_parts = ("filter",lang,periode,label,country,contentlist,max_tag_order,content_count,tag_count)
+    key_parts = [unicode(p).encode("utf-8") for p in key_parts]
+    
+    cache_key = fix_cache_key("-".join(key_parts))
+    
+    outputstr = cache.get(cache_key)
+    
+    if outputstr is None:
+        
+        matchtagids = []
+        
+        tagqs = Tag.objects.exclude(category__label__in = ['Datation', 'Localisation', 'Discipline artistique']).filter(~Q(dbpedia_uri = None))
+        countryqs = Country.objects
+        discqs = Tag.objects.filter(~Q(dbpedia_uri = None), category__label = u'Discipline artistique').select_related('dbpedia_fields')
+        yearqs = TagYears.objects
+        
+        contentqs = Datasheet.objects.filter(validated=True)
+        labeltranslations = []
+    
+        if label or periode or country or contentlist :
+            matchtagqslist = []
+            
+            if periode:
+                years = periode.split(",")
+                start_year = int(years[0])
+                end_year = int(years[0:2][-1])
+                delta = max(1, (end_year-start_year)/2)
+                minstart = start_year - delta
+                maxend = end_year + delta
+                matchtagqs = Tag.objects.filter(~Q(dbpedia_uri = None),
+                                                years__end_year__gte = start_year, 
+                                                years__start_year__lte = end_year,
+                                                years__end_year__lte = maxend,
+                                                years__start_year__gte = minstart,
+                                                )
+                matchtagqslist.append(matchtagqs)
+                
+            if label:
+                for txtlbl in label.split(","):
+                    matchtagqs = Tag.objects.select_related('dbpedia_fields').filter(~Q(dbpedia_uri = None), label__iexact = txtlbl.strip())
+                    matchtagqslist.append(matchtagqs)
+                
+            if country:
+                for country_uri in country.split(","):
+                    matchtagqs = Tag.objects.filter(~Q(dbpedia_uri = None),locatedin__country__dbpedia_uri = country_uri)
+                    matchtagids += [t.id for t in matchtagqs if t.id not in matchtagids]
+                    matchtagqslist.append(matchtagqs)
+            if contentlist:
+                contentqs = contentqs.filter(id__in = contentlist.split(","))
+
+            tagcond = None
+            tagcondid = None
+            for matchtagqs in matchtagqslist:
+                newcond = Q(id__in = TaggedSheet.objects.filter(tag__in = copy.deepcopy(matchtagqs), order__lte = max_tag_order).values('datasheet_id'))
+                newcondid = Q(id__in = matchtagqs)
+                tagcond = newcond if tagcond is None else (tagcond & newcond)
+                tagcondid = newcondid if tagcondid is None else (tagcondid | newcondid)
+            
+            contentqs = contentqs.filter(tagcond).distinct()
+            matchtagidsqs = list(Tag.objects.select_related("dbpedia_fields").only("id").filter(tagcondid))
+            matchtagids = [t.id for t in matchtagidsqs]
+            
+            if lang not in no_translate_langs:
+                masters = [t.dbpedia_fields for t in matchtagidsqs if t.dbpedia_fields is not None]
+                
+                translationqs = DbpediaFieldsTranslation.objects.select_related("master", "master__tag").filter(master__in = masters, language_code=lang)    
+                labeltranslations = [{'label':t.master.label, 'translated_label':t.label} for t in translationqs]
+            
+            tagqs = tagqs.filter(datasheet__in = contentqs)
+            countryqs = countryqs.filter(includes__tag__taggedsheet__datasheet__in = contentqs)
+            discqs = discqs.filter(datasheet__in = contentqs)
+            yearqs = yearqs.filter(tag__taggedsheet__datasheet__in = contentqs)
+            
+        if contentlist is None:
+            contentqs.order_by('?')
+                        
+        cont_count = contentqs.count()
+        
+        contenus = dict([(content.id, {'score' : 0, 'tags' : [], 'hda_id': content.hda_id, 'id':content.id, 'title': content.title, 'description': content.description, 'url': content.url}) for content in contentqs[0:content_count]])
+        contentids = contenus.keys()
+        
+        qs = DatasheetExtras.objects.select_related('insee').filter(datasheet__in = contentids)
+        for dse in qs:
+            contenus[dse.datasheet_id]['coords'] = {'city_name': dse.insee.city_name, 'latitude': dse.insee.latitude, 'longitude': dse.insee.longitude}
+        
+        qs = list(TaggedSheet.objects.select_related('tag', 'tag__dbpedia_fields').filter(datasheet__in = contentids, order__lte = max_tag_order).order_by('order'))
+        
+        translations = {}
+        
+        if lang not in no_translate_langs:
+            transqs = DbpediaFieldsTranslation.objects.filter(master__in = [ts.tag.dbpedia_fields for ts in qs], language_code = lang)
+            translations = dict([(trans.master_id,trans.label) for trans in transqs])
+        
+        for ts in qs:
+            match_tag = ts.tag.id in matchtagids
+            contenus[ts.datasheet_id]['tags'].append({'id': ts.tag.id, 'label':ts.tag.label, 'order':ts.order, 'match': match_tag , 'translated_label': translations.get(ts.tag.dbpedia_fields.id, ts.tag.label) if ts.tag.dbpedia_fields is not None else ts.tag.label})
+            
+            if match_tag:
+                contenus[ts.datasheet_id]['score'] += 2*max_tag_order - ts.order
+            
+        if contentlist is None:
+            contenus = sorted(contenus.values(),key=lambda e: -e['score'])
+        else:
+            contenus = contenus.values()
+    
+        #tagqs = tagqs.annotate(nb=Count('datasheet')).order_by('-nb')[:tag_count]
+        tagqs = tagqs.annotate(nb=Count('datasheet')).order_by('-nb').only('id','label')[:tag_count]
+        #.select_related('dbpedia_fields')
+        # hack to add only necessary fields in the group by
+        # contournement bug https://code.djangoproject.com/ticket/17144
+        tagqs.query.clear_select_fields()
+        tagqs.query.add_fields(['id','label'], False)
+        tagqs.query.set_group_by()
+    
+        tagqslist = list(tagqs)
+        
+        dbpediafields = dict([(df.tag_id, df) for df in DbpediaFields.objects.filter(tag__in = tagqslist)])
+
+        if lang not in no_translate_langs:
+            transqs = DbpediaFieldsTranslation.objects.filter(master__in = dbpediafields.values(), language_code = lang)
+            translations = dict([(trans.master_id,trans.label) for trans in transqs])
+    
+        tags = [{'id': tag.id, 'label': tag.label, 'score': tag.nb, 'translated_label': translations.get(dbpediafields[tag.id].id, tag.label) if tag.id in dbpediafields else tag.label} for tag in tagqslist]
+    
+        countryqs = countryqs.annotate(nb=Count('includes__tag__taggedsheet'))
+        countries = dict([(country.dbpedia_uri, country.nb) for country in countryqs])
+    
+        discqslist = list(discqs.annotate(nb=Count('taggedsheet')).order_by('-nb')[:10])
+
+        if lang not in no_translate_langs:
+            transqs = DbpediaFieldsTranslation.objects.filter(master__in = [tag.dbpedia_fields for tag in discqslist], language_code = lang)
+            translations = dict([(trans.master_id,trans.label) for trans in transqs])
+        
+        disciplines = [{'label':tag.label,'score':tag.nb, 'translated_label': translations.get(tag.dbpedia_fields.id, tag.label) if tag.dbpedia_fields is not None else tag.label} for tag in discqslist]
+        
+        years = {}
+        yearqs = yearqs.annotate(nb=Count('tag__taggedsheet'))
+        for ty in yearqs:
+            for year in range(ty.start_year, ty.end_year):
+                years[year] = ty.nb + (years[year] if year in years else 0)
+                
+        yearchange = []
+        for year in sorted(years.keys()):
+            score = years[year]
+            if year < 2011:
+                if (year-1 not in years and score != 0) or (year-1 in years and years[year-1] != score):
+                    yearchange.append({'year': year, 'score': score})
+                if year+1 not in years and year != -1 and score != 0:
+                    yearchange.append({'year': year+1, 'score': 0})
+    
+        tag_translations = {}
+        for t in itertools.chain(labeltranslations,disciplines,tags):
+            tag_translations[t['label']] = t['translated_label']
+        for c in contenus:
+            for t in c['tags']:
+                tag_translations[t['label']] = t['translated_label']
+        
+        output = {'count': cont_count, 'contents': contenus, 'tags':tags, 'sparkline':yearchange, 'countries':countries, 'disciplines':disciplines, 'tagtranslations': tag_translations}
+        outputstr = json.dumps(output)
+        cache.set(cache_key, outputstr)
+        
+    return HttpResponse(content=outputstr, mimetype='application/json')
+
+def subtree(tree):
+    MAX_TAG_ORDER = 16
+    label = tree['label']
+    sub = tree.get('contents',[])
+    
+    datasheets = Datasheet.objects.filter(validated = True, taggedsheet__tag__label__iexact = label, taggedsheet__order__lte = MAX_TAG_ORDER).annotate(tagorder=Min('taggedsheet__order')).select_related('organisation').distinct()
+    
+    contents = [{ 'description': ds.description, 'title': ds.title, 'url': ds.url, 'score': int((MAX_TAG_ORDER - ds.tagorder)/2), 'id': ds.id, 'hda_id': ds.hda_id, 'organization': ds.organisation.name, 'organization_url': ds.organisation.website } for ds in datasheets]
+    
+    contents = sorted(contents, key=lambda e: -e['score'])
+    
+    res = { 'label': label }
+    
+    if len(contents):
+        res['contents'] = contents
+    
+    if len(sub):
+        subcats = [subtree(st) for st in sub]
+        subcats = [sc for sc in subcats if len(sc.get('contents',[])) or len(sc.get('themes',[]))]
+        res['themes'] = subcats
+    
+    return res
+
+def filltree(request):
+    
+    tree = request.GET.get('tree','{}')
+    
+    treeobj = json.loads(tree)
+    
+    res = subtree(treeobj)
+        
+    return HttpResponse(content=json.dumps(res), mimetype='application/json')
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/views/pages.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,59 @@
+# -*- coding: utf-8 -*-
+
+from django.shortcuts import render_to_response, redirect
+from django.template import RequestContext
+from hdabo.models import Datasheet, TaggedSheet
+import re
+import django.utils.simplejson as json
+
+def datasheet(request, hda_id=None):
+    MAX_TAG = 15
+    MAX_RELATED = 50
+    
+    datasheet = Datasheet.objects.select_related("organisation").get(hda_id=hda_id)
+    
+    domain = re.findall(r"^https?://(www\.)?([^/]+)",datasheet.url)
+    ordered_tags = TaggedSheet.objects.filter(datasheet=datasheet,order__lte=MAX_TAG).select_related("tag").order_by('order')
+    tags = [t.tag.id for t in ordered_tags]
+    tagorders = dict([(t.tag.id,t.order) for t in ordered_tags])
+    tsqs = TaggedSheet.objects.exclude(datasheet=datasheet).filter(order__lte=MAX_TAG,tag_id__in=tags)
+    dsscores = {}
+    addtoscore = 2*MAX_TAG
+    
+    for ts in tsqs:
+        a_order = tagorders[ts.tag_id]
+        b_order = ts.order
+        score = addtoscore - a_order - b_order
+        dsscore = dsscores.get(ts.datasheet_id,0)
+        dsscores[ts.datasheet_id] = dsscore + score
+    relatedqs = Datasheet.objects.filter(id__in=dsscores.keys()).select_related("organisation")
+    relatedds = [{
+        'id': ds.id,
+        'hda_id': ds.hda_id,
+        'title': ds.title,
+        'description': ds.description,
+        'organisation_name': ds.organisation.name,
+        'organisation_url': ds.organisation.website,
+        'score': dsscores.get(ds.id,0),
+    } for ds in relatedqs]
+    relatedds = sorted(relatedds, key=lambda ds: -ds['score'])[:MAX_RELATED]
+    
+    for ds in relatedds:
+        otqs = TaggedSheet.objects.filter(datasheet_id=ds['id'],order__lte=MAX_TAG).select_related("tag").order_by('order')
+        ds['ordered_tags'] = [{
+            'id': t.tag.id,
+            'label': t.tag.label,
+            'order': t.order,
+            'common' : (t.tag.id in tags)
+        } for t in otqs]
+    
+    return render_to_response(
+        "notice.html",
+        {
+            'datasheet':datasheet,
+            'domain': domain[0][1] if domain else "",
+            'ordered_tags': ordered_tags,
+            'related': relatedds,
+        },
+        context_instance=RequestContext(request)
+    )
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/manage.py	Tue Jun 17 10:25:33 2014 +0200
@@ -0,0 +1,10 @@
+#!/usr/bin/env python
+import os
+import sys
+
+if __name__ == "__main__":
+    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "hdabo.settings")
+
+    from django.core.management import execute_from_command_line
+
+    execute_from_command_line(sys.argv)
--- a/virtualenv/res/lib/lib_create_env.py	Fri Nov 16 18:12:05 2012 +0100
+++ b/virtualenv/res/lib/lib_create_env.py	Tue Jun 17 10:25:33 2014 +0200
@@ -17,20 +17,22 @@
 URLS = {
     #'': {'setup': '', 'url':'', 'local':''},
     'DISTRIBUTE': {'setup': 'distribute', 'url':'http://pypi.python.org/packages/source/d/distribute/distribute-0.6.24.tar.gz', 'local':"distribute-0.6.24.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
-    'DJANGO': {'setup': 'django', 'url': 'http://www.djangoproject.com/download/1.4.2/tarball/', 'local':"Django-1.4.2.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
-    'DJANGO-EXTENSIONS': { 'setup': 'django-extensions', 'url':'https://github.com/django-extensions/django-extensions/tarball/0.8', 'local':"django-extensions-0.8.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
+    'DJANGO': {'setup': 'django', 'url': 'http://www.djangoproject.com/download/1.6.5/tarball/', 'local':"Django-1.6.5.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
+    'DJANGO-EXTENSIONS': { 'setup': 'django-extensions', 'url':'https://github.com/django-extensions/django-extensions/tarball/1.3.7', 'local':"django-extensions-1.3.7.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
     'HTTPLIB2': { 'setup': 'python-httplib2', 'url':'http://code.google.com/p/httplib2/downloads/detail?name=httplib2-0.7.4.tar.gz&can=2&q=', 'local':"httplib2-0.7.4.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
-    'SOUTH': { 'setup': 'South', 'url':'http://www.aeracode.org/releases/south/south-0.7.5.tar.gz', 'local':"south-0.7.5.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
+    'SOUTH': { 'setup': 'South', 'url':'http://www.aeracode.org/releases/south/south-0.8.4.tar.gz', 'local':"south-0.8.4.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
     'PYCRYPTO': {'setup': 'pycrypto', 'url':'https://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-2.6.tar.gz', 'local':'pycrypto-2.6.tar.gz', 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
     'SSH': {'setup': 'ssh', 'url':'http://pypi.python.org/packages/source/s/ssh/ssh-1.7.14.tar.gz#md5=4cdd0549ef4699bd67b96264d3b21427', 'local':'ssh-1.7.14.tar.gz', 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
     'FABRIC': {'setup': 'fabric', 'url':'https://github.com/fabric/fabric/tarball/1.4.2', 'local':'fabric-1.4.2.tar.gz', 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
     'MERCURIAL': {'setup': 'mercurial', 'url':'http://mercurial.selenic.com/release/mercurial-2.2.3.tar.gz', 'local':'mercurial-2.2.3.tar.gz', 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
-    'HAYSTACK': {'setup': 'django-haystack', 'url': 'https://github.com/toastdriven/django-haystack/tarball/master', 'local': 'django-haystack-v2.0.0.tar.gz', 'install':{'method':'pip', 'option_str': None, 'dict_extra_env': None}},
-    'WHOOSH': {'setup': 'whoosh', 'url':'https://bitbucket.org/mchaput/whoosh/get/tip.tar.gz', 'local':'whoosh-2.5.tar.gz', 'install' : {'method':'pip', 'option_str': None, 'dict_extra_env': None}},
+    'HAYSTACK': {'setup': 'django-haystack', 'url': 'https://github.com/toastdriven/django-haystack/archive/v2.1.0.tar.gz', 'local': 'django-haystack-2.1.0.tar.gz', 'install':{'method':'pip', 'option_str': None, 'dict_extra_env': None}},
+    'WHOOSH': {'setup': 'whoosh', 'url':'https://pypi.python.org/packages/source/W/Whoosh/Whoosh-2.5.7.tar.gz', 'local':'whoosh-2.5.7.tar.gz', 'install' : {'method':'pip', 'option_str': None, 'dict_extra_env': None}},
     'WIKITOOLS' : { 'setup': 'wikitools', 'url': 'wikitools.tar.bz2', 'local': 'wikitools.tar.bz2', 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
     'ISODATE' : {'setup': 'isodate', 'url': 'http://pypi.python.org/packages/source/i/isodate/isodate-0.4.8.tar.gz', 'local': 'isodate-0.4.8.tar.gz', 'install' : {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
     'RDFLIB' : { 'setup': 'rdflib', 'url': 'http://rdflib.googlecode.com/files/rdflib-3.2.0.tar.gz', 'local': 'rdflib-3.2.0.tar.gz', 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
     'SPARQLWRAPPER' : { 'setup': 'SPARQLWrapper', 'url': 'http://downloads.sourceforge.net/project/sparql-wrapper/sparql-wrapper-python/1.5.0/SPARQLWrapper-1.5.0.tar.gz', 'local' : 'SPARQLWrapper-1.5.0.tar.gz', 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},    
+    'REQUESTS' : { 'setup': 'requests', 'url': 'https://github.com/kennethreitz/requests/archive/v2.3.0.tar.gz', 'local' : 'requests-2.3.0.tar.gz', 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},    
+    'PYELASTICSEARCH' : { 'setup': 'pyelasticsearch', 'url': 'https://github.com/rhec/pyelasticsearch/archive/0.6.1.tar.gz', 'local' : 'pyelasticsearch-0.6.1.tar.gz', 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},    
 }
 
 if system_str == 'Windows':
@@ -50,7 +52,7 @@
     })
 else:
     if system_str == "Darwin":        
-        lxml_options = {'STATIC_DEPS': 'true', 'LIBXML2_VERSION': '2.8.0', 'LIBXSLT_VERSION': '1.1.26', 'LIBICONV_VERSION': '1.14'}
+        lxml_options = {'STATIC_DEPS': 'true', 'LIBXML2_VERSION': '2.9.1', 'LIBXSLT_VERSION': '1.1.28', 'LIBICONV_VERSION': '1.14'}
         lxml_method = 'easy_install'
         mysql_method = 'install_mysql'
     else:
@@ -59,9 +61,9 @@
         mysql_method = 'pip'
 
     URLS.update({
-        'PSYCOPG2': {'setup': 'psycopg2','url': 'http://www.psycopg.org/psycopg/tarballs/PSYCOPG-2-4/psycopg2-2.4.5.tar.gz', 'local':"psycopg2-2.4.5.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
+        'PSYCOPG2': {'setup': 'psycopg2','url': 'https://pypi.python.org/packages/source/p/psycopg2/psycopg2-2.5.3.tar.gz', 'local':"psycopg2-2.5.3.tar.gz", 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
         'PIL': {'setup': 'pil', 'url': 'http://effbot.org/downloads/Imaging-1.1.7.tar.gz', 'local':"Imaging-1.1.7.tar.gz", 'install': {'method': 'easy_install', 'option_str': None, 'dict_extra_env': None}},
-        'LXML': {'setup': 'lxml', 'url':"lxml-2.3.4.tar.bz2", 'local':"lxml-2.3.4.tar.bz2", 'install': {'method': lxml_method, 'option_str': None, 'dict_extra_env': lxml_options}},
+        'LXML': {'setup': 'lxml', 'url':"lxml-3.2.1.tar.bz2", 'local':"lxml-3.2.1.tar.bz2", 'install': {'method': lxml_method, 'option_str': None, 'dict_extra_env': lxml_options}},
         'PYYAML' : { 'setup': 'PyYAML', 'url': 'http://pyyaml.org/download/pyyaml/PyYAML-3.09.tar.gz', 'local': 'PyYAML-3.09.tar.gz', 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
     })
     
Binary file virtualenv/res/src/Django-1.6.5.tar.gz has changed
Binary file virtualenv/res/src/django-extensions-1.3.7.tar.gz has changed
Binary file virtualenv/res/src/django-haystack-2.1.0.tar.gz has changed
Binary file virtualenv/res/src/lxml-3.2.1.tar.bz2 has changed
Binary file virtualenv/res/src/psycopg2-2.5.3.tar.gz has changed
Binary file virtualenv/res/src/pyelasticsearch-0.6.1.tar.gz has changed
Binary file virtualenv/res/src/requests-2.3.0.tar.gz has changed
Binary file virtualenv/res/src/south-0.8.4.tar.gz has changed
Binary file virtualenv/res/src/whoosh-2.5.7.tar.gz has changed
--- a/virtualenv/web/res/res_create_env.py	Fri Nov 16 18:12:05 2012 +0100
+++ b/virtualenv/web/res/res_create_env.py	Tue Jun 17 10:25:33 2014 +0200
@@ -7,7 +7,7 @@
 INSTALLS = [ #(key,method, option_str, dict_extra_env)
     'LXML',
     'PSYCOPG2',
-    'PIL', 
+    #'PIL', 
     'DJANGO',
     'DJANGO-EXTENSIONS',
     'SOUTH',
@@ -19,6 +19,8 @@
     'RDFLIB',
     'SPARQLWRAPPER',
     'PYYAML',
+    'REQUESTS',
+    'PYELASTICSEARCH',
 ]
 
 if system_str == 'Windows':
--- a/web/hdabo/.htaccess.mod_python.tmpl	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-SetHandler python-program
-PythonHandler ldt.core.handlers.modpython
-SetEnv DJANGO_SETTINGS_MODULE ldtplatform.settings
-PythonInterpreter platform
-PythonOption django.root /~wakimd/platform/ldtplatform
-PythonOption virtualenv.activate_path /iridata/users/wakimd/Env/Efculture/bin/activate_this.py
-PythonDebug on
-PythonPath "['/iridata/users/wakimd/Env/Efculture/lib/python2.6/sites-packages'] + sys.path"
-Header set Pragma "no-cache"
-Header set Cache-Control "no-cache"
-Header set Expires "-1"
--- a/web/hdabo/.htaccess.mod_wsgi.tmpl	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-
-SetEnv DJANGO_SETTINGS_MODULE hdabo.settings
-SetEnv PROJECT_PATH /Users/ymh/dev/workspace/hdabo/web
-SetEnv PYTHON_PATH /Users/ymh/dev/workspace/hdabo/virtualenv/web/env/hdabo/lib/python2.6/site-packages:/Applications/Dev/eclipse/plugins/org.python.pydev.debug_2.2.0.2011062419/pysrc/
-SetEnv PYDEV_DEBUG False
-
-Options ExecCGI FollowSymLinks
-SetHandler wsgi-script
-
-#if defined in global definition
-#defined with WSGIDaemonProcess 
-#WSGIProcessGroup platform
-
-RewriteEngine On
-RewriteCond %{REQUEST_FILENAME} !-f
-RewriteRule ^(.*)$ /~ymh/hdabo/hdabo/modwsgi.wsgi/$1 [QSA,PT,L]
-
-Header set Pragma "no-cache"
-Header set Cache-Control "no-cache"
-Header set Expires "-1"
--- a/web/hdabo/__init__.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-VERSION = (2, 13, 0, "final", 0)
-
-
-def get_version():
-    version = '%s.%s' % (VERSION[0], VERSION[1])
-    if VERSION[2]:
-        version = '%s.%s' % (version, VERSION[2])
-    if VERSION[3:] == ('alpha', 0):
-        version = '%s pre-alpha' % version
-    else:
-        if VERSION[3] != 'final':
-            version = '%s %s %s' % (version, VERSION[3], VERSION[4])
-    return version
-
-
-__version__ = get_version()
--- a/web/hdabo/admin.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-from django.contrib import admin
-from hdabo.models import (Author, Datasheet, DocumentFormat, Domain, Organisation, 
-    Tag, TagCategory, TaggedSheet, TimePeriod)
-
-
-admin.site.register(Author)
-admin.site.register(Datasheet)
-admin.site.register(DocumentFormat)
-admin.site.register(Domain)
-admin.site.register(Organisation)
-admin.site.register(Tag)
-admin.site.register(TagCategory)
-admin.site.register(TaggedSheet)
-admin.site.register(TimePeriod)
-
-
--- a/web/hdabo/config.py.tmpl	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-import os
-
-BASE_DIR = os.path.dirname(os.path.abspath(__file__)).rstrip("/")+"/"
-BASE_URL = '/~ymh/hdabo/'
-WEB_URL = 'http://localhost'
-
-# Absolute filesystem path to the directory that will hold user-uploaded files.
-# Example: "/home/media/media.lawrence.com/media/"
-MEDIA_ROOT = os.path.abspath(BASE_DIR + "../static/media/")
-
-# URL that handles the media served from MEDIA_ROOT. Make sure to use a
-# trailing slash.
-# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
-MEDIA_URL = BASE_URL + "static/media/"
-
-# Absolute path to the directory static files should be collected to.
-# Don't put anything in this directory yourself; store your static files
-# in apps' "static/" subdirectories and in STATICFILES_DIRS.
-# Example: "/home/media/media.lawrence.com/static/"
-STATIC_ROOT = os.path.abspath(BASE_DIR + "../static/site/")
-
-# URL prefix for static files.
-# Example: "http://media.lawrence.com/static/"
-STATIC_URL = BASE_URL + "static/site/"
-
-# Additional locations of static files
-STATICFILES_DIRS = (
-    # Put strings here, like "/home/html/static" or "C:/www/django/static".
-    # Always use forward slashes, even on Windows.
-    # Don't forget to use absolute paths, not relative paths.
-)
-
-
-DATABASES = {
-    'default': {
-        'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
-        'NAME': 'hdabo',                      # Or path to database file if using sqlite3.
-        'USER': 'iri',                      # Not used with sqlite3.
-        'PASSWORD': 'iri',                  # Not used with sqlite3.
-        'HOST': 'localhost',                      # Set to empty string for localhost. Not used with sqlite3.
-        'PORT': '5432',                      # Set to empty string for default. Not used with sqlite3.
-    }
-}
-
-HAYSTACK_SEARCH_ENGINE = 'whoosh'
-HAYSTACK_WHOOSH_PATH = os.path.abspath(BASE_DIR + "../index/").rstrip("/")+"/"
-
--- a/web/hdabo/context_processors.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-import hdabo
-
-def version(request):
-    return { 'VERSION': hdabo.get_version() }
-
--- a/web/hdabo/django_wsgi.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-import os
-
-import django.core.handlers.wsgi
-
-application = django.core.handlers.wsgi.WSGIHandler()
-
-if os.environ.get('PYDEV_DEBUG', "False").lower() in ["true", "1", "t"]:
-    import pydevd #@UnresolvedImport
-    pydevd.settrace(suspend=False)
Binary file web/hdabo/fixtures/datasheet_10.yaml.bz2 has changed
Binary file web/hdabo/fixtures/datasheet_347.yaml.bz2 has changed
Binary file web/hdabo/fixtures/datasheet_all.yaml.bz2 has changed
Binary file web/hdabo/fixtures/initial_data.yaml.bz2 has changed
--- a/web/hdabo/forms.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-# -*- coding: utf-8 -*-
-from django import forms
-from django.db.models.query import QuerySet
-
-
-class SortedMultipleChoiceField(forms.ModelMultipleChoiceField):
-    def clean(self, value):
-        queryset = super(SortedMultipleChoiceField, self).clean(value)
-        if value is None or not isinstance(queryset, QuerySet):
-            return queryset
-        object_list = dict((
-            (unicode(key), value)
-            for key, value in queryset.in_bulk(value).iteritems()))
-        return [object_list[unicode(pk)] for pk in value]
--- a/web/hdabo/manage.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-#!/usr/bin/env python
-from django.core.management import execute_manager
-import imp
-import settings
-try:
-    imp.find_module('settings') # Assumed to be in the same directory.
-except ImportError:
-    import sys
-    sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n" % __file__)
-    sys.exit(1)
-
-
-if __name__ == "__main__":
-    execute_manager(settings)
--- a/web/hdabo/management/commands/clean_tags.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Jun 20, 2012
-
-@author: ymh
-'''
-from django.core.management.base import NoArgsCommand
-from django.core.management.color import no_style
-from django.db import transaction,connection
-from django.db.models import Count
-from hdabo.models import Tag
-from hdabo.utils import show_progress
-from optparse import make_option
-import math
-import sys
-
-
-class Command(NoArgsCommand):
-    '''
-    remove orphan tags and merge duplicates (the key is the dbpedia uri) 
-    '''
-
-
-    def handle_noargs(self, **options):
-        '''
-        do the work
-        '''
-
-        # merge duplicate tags
-        cursor = connection.cursor()
-        cursor.execute("select label, dbpedia_uri from hdabo_tag group by label,dbpedia_uri having count(label) > 1")
-        
-        for label,_ in cursor:
-            qs = Tag.objects.filter(label=label).annotate(num_ds=Count('datasheet')).order_by('-num_ds')
-            ref_tag = None
-            for t in qs:
-                print("label : %d : %s, num_ds: %d"%(t.id,t.label, t.num_ds))
-                if ref_tag is None:
-                    ref_tag = t
-                else:
-                    for ts in t.taggedsheet_set.all():
-                        pass
-                        print("changing tag %d to %d" %(ts.tag.id, ref_tag.id) )
-                        ts.tag = ref_tag
-                        ts.save()
-        
-        # remove ophans tags
-        
-        orphans_tags = Tag.objects.annotate(num_ds=Count('datasheet')).filter(num_ds=0)
-        
-        print("nb Orphans : %d" % orphans_tags.count())
-                
-        #delete
-        orphans_tags.delete()
-
-        
\ No newline at end of file
--- a/web/hdabo/management/commands/diff_csv.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,147 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on May 25, 2011
-
-@author: ymh
-'''
-#Auteur,Chemin,Comment,Controle,Datcre,Datmaj,Desc,Domaine,Format,ID,Insee,Org,Org_Home,OrgID,Periode1,Periode2,Periode3,Satut,Sousdom,Tag,Theme2,Theme3,Titre,Url,Vignette,Ville
-#"Auteur","Chemin","Comment","Controle","Datcre","Datmaj","Desc","Domaine","Format","ID","Insee","Org","Org_Home","OrgID","Periode1","Periode2","Periode3","Satut","Sousdom","Tag","Theme2","Theme3","Titre","Url","Vignette","Ville",
-
-from django.core.management.base import BaseCommand, CommandError
-from django.db import transaction
-from hdabo.models import Datasheet
-from optparse import make_option
-import csv
-import math
-import sys
-
-class Command(BaseCommand):
-    '''
-    Command to diff datasheets content from csv content 
-    '''
-    args = '<path_to_csv_file path_to_csv_file ...>'
-    options = '[--do-delete] [--encoding] [--delimiter] [--dialect]'
-    help = """Import of a csv file for hdabo
-Options:
-    --do-delete : ignore existing datasheets
-    --encoding : files encoding. default to latin-1
-    --delimiter : scv delimiter
-    --dialect : csv dialect
-    --fieldnames : csv columns
-    """
-    
-    option_list = BaseCommand.option_list + (
-        make_option('--encoding',
-            action='store',
-            type='string',
-            dest='encoding',
-            default="latin-1",
-            help='fix the file encoding. default to latin-1'),
-        make_option('--delimiter',
-            action='store',
-            type='string',
-            dest='delimiter',
-            default=";",
-            help='csv file delimiter'),
-        make_option('--dialect',
-            action='store',
-            type='string',
-            dest='dialect',
-            default="excel",
-            help='csv dialect'),
-        make_option('--fieldnames',
-            action='store',
-            type='string',
-            dest='fieldnames',
-            default=None,
-            help='fields list (comma separated)'),
-        make_option('--do-delete',
-            action='store_true',
-            dest='do_delete',
-            default=False,
-            help='delete datasheets'),
-        
-        )
-    
-    def show_progress(self, current_line, total_line, width):
-
-        percent = (float(current_line) / float(total_line)) * 100.0
-
-        marks = math.floor(width * (percent / 100.0))
-        spaces = math.floor(width - marks)
-    
-        loader = '[' + ('=' * int(marks)) + (' ' * int(spaces)) + ']'
-    
-        sys.stdout.write("%s %d%% %d/%d\r" % (loader, percent, current_line - 1, total_line - 1)) #takes the header into account
-        if percent >= 100:
-            sys.stdout.write("\n")
-        sys.stdout.flush()
-
-            
-
-    def handle(self, *args, **options):
-        
-        if len(args) == 0:
-            raise CommandError("Gives at lat one csv file to import")
-        
-        self.encoding = options.get('encoding', "latin-1")
-        self.do_delete = options.get('do_delete', False)
-        fieldnames = options.get('fieldnames', None)
-
-        for csv_path in args:
-            print "Processing %s " % (csv_path)
-            with open(csv_path, 'rU') as csv_file:
-                
-                # get the number of lines if necessary
-                for i, l in enumerate(csv_file): #@UnusedVariable
-                    pass                        
-                total_line = i + 1
-                if fieldnames:
-                    total_line = total_line + 1
-                csv_file.seek(0)
-                
-                delimiter = options.get('delimiter', ";")
-                if delimiter == "TAB" or delimiter == "\\t":
-                    delimiter = '\t'
-    
-                dr_kwargs = {'delimiter':delimiter}
-                if  fieldnames is not None:
-                    dr_kwargs['fieldnames'] = [f.strip() for f in fieldnames.split(",")]
-                dialect = options.get('dialect', "excel")
-                if dialect is not None:
-                    dr_kwargs['dialect'] = dialect
-                   
-                reader = csv.DictReader(csv_file, **dr_kwargs)
-                
-                ids = []
-    
-                for row in reader:
-                    line_num = reader.line_num if fieldnames is None else reader.line_num + 1
-                    self.show_progress(line_num, total_line, 60)
-                    def safe_decode(val, encoding):
-                        if val:
-                            return val.decode(encoding)
-                        else:
-                            return val
-                                                
-                    row = dict([(safe_decode(key, self.encoding), safe_decode(value, self.encoding)) for key, value in row.items()])
-                    
-                    ids.append(row['ID'])
-                
-                qs = Datasheet.objects.exclude(hda_id__in = ids).order_by("hda_id")
-                
-                qs_count = qs.count()
-                
-                if qs_count == 0:
-                    print("No datasheet to delete : exit")
-                    return
-                    
-                print("The following datasheets are in the database and not in the csv file")
-                for i,ds in enumerate(qs):
-                    print("%*d- %4s : %s" % (len(str(qs_count+1)), i+1, ds.hda_id, ds.title.strip() if ds.title is not None else ""))
-                    
-                
-                if self.do_delete:
-                    print("deleting datasheets")
-                    qs.delete()
-
--- a/web/hdabo/management/commands/import_csv.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,267 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on May 25, 2011
-
-@author: ymh
-'''
-#Auteur,Chemin,Comment,Controle,Datcre,Datmaj,Desc,Domaine,Format,ID,Insee,Org,Org_Home,OrgID,Periode1,Periode2,Periode3,Satut,Sousdom,Tag,Theme2,Theme3,Titre,Url,Vignette,Ville
-#"Auteur","Chemin","Comment","Controle","Datcre","Datmaj","Desc","Domaine","Format","ID","Insee","Org","Org_Home","OrgID","Periode1","Periode2","Periode3","Satut","Sousdom","Tag","Theme2","Theme3","Titre","Url","Vignette","Ville",
-
-from django.core.management.base import BaseCommand, CommandError
-from django.db import transaction
-from hdabo.models import (Author, Datasheet, DocumentFormat, Domain, Organisation,
-    Tag, TaggedSheet, TimePeriod, Location)
-from hdabo.wp_utils import normalize_tag
-from optparse import make_option
-import csv
-import datetime
-import math
-import sys
-
-class Command(BaseCommand):
-    '''
-    Command to import csvfile
-    '''
-    args = '<path_to_csv_file path_to_csv_file ...>'
-    options = '[--ignore-existing] [--lines] [--encoding]'
-    help = """Import of a csv file for hdabo
-Options:
-    --ignore-existing : ignore existing datasheets
-    --lines : max number of lines to load (for each file). 0 means all.
-    --encoding : files encoding. default to latin-1"""
-    
-    option_list = BaseCommand.option_list + (
-        make_option('--encoding',
-            action='store',
-            type='string',
-            dest='encoding',
-            default="latin-1",
-            help='fix the file encoding. default to latin-1'),
-        make_option('--delimiter',
-            action='store',
-            type='string',
-            dest='delimiter',
-            default=";",
-            help='csv file delimiter'),
-        make_option('--dialect',
-            action='store',
-            type='string',
-            dest='dialect',
-            default="excel",
-            help='csv dialect'),
-        make_option('--fieldnames',
-            action='store',
-            type='string',
-            dest='fieldnames',
-            default=None,
-            help='fields list (comma separated)'),
-        make_option('--lines',
-            action='store',
-            type='int',
-            dest='lines',
-            default=0,
-            help='Number of lines to read. 0 means all.'),
-        make_option('--ignore-existing',
-            action='store_true',
-            dest='ignore_existing',
-            default=False,
-            help='force insertion'),
-        
-        )
-    
-    def show_progress(self, current_line, total_line, width):
-
-        percent = (float(current_line) / float(total_line)) * 100.0
-
-        marks = math.floor(width * (percent / 100.0))
-        spaces = math.floor(width - marks)
-    
-        loader = '[' + ('=' * int(marks)) + (' ' * int(spaces)) + ']'
-    
-        sys.stdout.write("%s %d%% %d/%d\r" % (loader, percent, current_line - 1, total_line - 1)) #takes the header into account
-        if percent >= 100:
-            sys.stdout.write("\n")
-        sys.stdout.flush()
-
-    
-    def create_domain_period(self, row_value, klass, school_period):
-        res_list = []
-        if not row_value:
-            return res_list
-        for label_str in [dstr.strip() for dstr in row_value.split('\x0b')]:
-            if label_str:
-                res_obj, created = klass.objects.get_or_create(label=label_str, school_period=school_period, defaults={"label":label_str, "school_period":school_period}) #@UnusedVariable
-                res_list.append(res_obj)
-        return res_list
-    
-    def create_datasheet(self, row):
-        
-        if self.ignore_existing and Datasheet.objects.filter(hda_id=row[u"ID"]).count() > 0:
-            return
-        
-        author_str = row[u'Auteur']
-        if author_str:
-            author_array = author_str.split(" ")
-            if len(author_array) == 0:
-                firstname = ""
-                lastname = ""
-            elif len(author_array) == 1:
-                firstname = ""
-                lastname = author_array[0]
-            elif len(author_array) == 2:
-                firstname = author_array[0]
-                lastname = author_array[1]
-                
-            author, created = Author.objects.get_or_create(hda_id=author_str, defaults={"firstname":firstname, "lastname":lastname}) #@UnusedVariable
-        else:
-            author = None
-        
-        org_str = row[u"Org"]    
-        if org_str:
-            url_str = row[u'Org_Home']
-            if url_str is not None:
-                url_str = url_str.strip()
-            org, created = Organisation.objects.get_or_create(hda_id=org_str, defaults={"name":org_str, "website" : url_str}) #@UnusedVariable
-        else:
-            org = None
-            
-        town_str = row[u"Ville"]
-        if town_str:
-            insee_str = row[u'Insee'].strip() if row[u'Insee'] else row[u'Insee']
-            if len(insee_str) > 5:
-                insee_str = "" 
-            loc, created = Location.objects.get_or_create(insee=insee_str, defaults={"name": town_str, "insee": insee_str}) #@UnusedVariable
-        else:
-            loc = None
-            
-        format_str = row[u"Format"]
-        if format_str:
-            format, created = DocumentFormat.objects.get_or_create(label=format_str, defaults={"label": format_str}) #@UnusedVariable
-        else:
-            format = None
-        
-        domains = self.create_domain_period(row[u"Domaine"], Domain, Domain.DOMAIN_PERIOD_DICT[u'Global'])
-                                        
-        primary_periods = self.create_domain_period(row[u"Periode1"], TimePeriod, TimePeriod.TIME_PERIOD_DICT[u'Primaire'])
-        college_periods = self.create_domain_period(row[u"Periode2"], TimePeriod, TimePeriod.TIME_PERIOD_DICT[u'Collège'])
-        highschool_periods = self.create_domain_period(row[u"Periode3"], TimePeriod, TimePeriod.TIME_PERIOD_DICT[u'Lycée'])
-                    
-        primary_themes = self.create_domain_period(row[u"Sousdom"], Domain, Domain.DOMAIN_PERIOD_DICT[u'Primaire'])
-        college_themes = self.create_domain_period(row[u"Theme2"], Domain, Domain.DOMAIN_PERIOD_DICT[u'Collège'])
-        highschool_themes = self.create_domain_period(row[u"Theme3"], Domain, Domain.DOMAIN_PERIOD_DICT[u'Lycée'])
-        
-        url = row[u"Url"]
-        if url is not None:
-            url = url.strip()
-        
-        datasheet = Datasheet.objects.create(
-            hda_id=row[u"ID"],
-            author=author,
-            organisation=org,
-            title=row[u"Titre"],
-            description=row[u"Desc"],
-            url=url,
-            town=loc,
-            format=format,
-            original_creation_date=datetime.datetime.strptime(row[u"Datcre"], "%d/%m/%Y").date(),
-            original_modification_date=datetime.datetime.strptime(row[u"Datmaj"], "%d/%m/%Y").date(),
-            validated=False                                          
-        )
-        
-        datasheet.save()
-        
-        datasheet.set_domains(domains)
-        datasheet.set_primary_periods(primary_periods)
-        datasheet.set_college_periods(college_periods)
-        datasheet.set_highschool_periods(highschool_periods)
-        datasheet.set_primary_themes(primary_themes)
-        datasheet.set_college_themes(college_themes)
-        datasheet.set_highschool_themes(highschool_themes)
-
-        
-        if row[u'Tag']:
-            for i, tag in enumerate([t.strip() for t in row[u'Tag'].split(u";")]):
-                if len(tag) == 0:
-                    continue
-                tag_label = normalize_tag(tag)
-                tag_obj = None
-                for t in Tag.objects.filter(label__iexact=tag_label):
-                    if tag_obj is None or t.url_status != Tag.TAG_URL_STATUS_DICT['null_result']:
-                        tag_obj = t
-                        if tag_obj.url_status != Tag.TAG_URL_STATUS_DICT['null_result']:
-                            break
- 
-                if tag_obj is None:
-                    tag_obj = Tag(label=tag_label, original_label=tag)
-                    tag_obj.save()
-
-                tagged_ds = TaggedSheet(datasheet=datasheet, tag=tag_obj, original_order=i + 1, order=i + 1)
-                tagged_ds.save()
-        
-
-    def handle(self, *args, **options):
-        
-        if len(args) == 0:
-            raise CommandError("Gives at lat one csv file to import")
-        
-        self.encoding = options.get('encoding', "latin-1")
-        lines = options.get('lines', 0)
-        self.ignore_existing = options.get('ignore_existing', False)
-        fieldnames = options.get('fieldnames', None)
-
-        transaction.commit_unless_managed()
-        transaction.enter_transaction_management()
-        transaction.managed(True)
-
-        try:
-            for csv_path in args:
-                try:
-                    print "Processing %s " % (csv_path)
-                    with open(csv_path, 'rU') as csv_file:
-                        
-                        # get the number of lines if necessary
-                        if not lines:
-                            for i, l in enumerate(csv_file): #@UnusedVariable
-                                pass                        
-                            total_line = i + 1
-                            if fieldnames:
-                                total_line = total_line + 1
-                            csv_file.seek(0)
-                        else:
-                            total_line = lines + 1
-                        
-                        delimiter = options.get('delimiter', ";")
-                        if delimiter == "TAB" or delimiter == "\\t":
-                            delimiter = '\t'
-
-                        dr_kwargs = {'delimiter':delimiter}
-                        if  fieldnames is not None:
-                            dr_kwargs['fieldnames'] = [f.strip() for f in fieldnames.split(",")]
-                        dialect = options.get('dialect', "excel")
-                        if dialect is not None:
-                            dr_kwargs['dialect'] = dialect
-                           
-                        reader = csv.DictReader(csv_file, **dr_kwargs)
-        
-                        for j, row in enumerate(reader):
-                            if lines and j >= lines:
-                                break
-                            line_num = reader.line_num if fieldnames is None else reader.line_num + 1
-                            self.show_progress(line_num, total_line, 60)
-                            def safe_decode(val, encoding):
-                                if val:
-                                    return val.decode(encoding)
-                                else:
-                                    return val
-                                                        
-                            row = dict([(safe_decode(key, self.encoding), safe_decode(value, self.encoding)) for key, value in row.items()])
-                            self.create_datasheet(row)
-                            
-                            transaction.commit()
-                except Exception:
-                    transaction.rollback()
-                    raise 
-                finally:
-                    print('')
-        finally:
-            transaction.leave_transaction_management()
--- a/web/hdabo/management/commands/import_tag_popularity.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,150 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Jun 17, 2011
-
-@author: ymh
-
-command to import tag popularity
-
-'''
-
-from django.core.management.base import BaseCommand, CommandError
-from hdabo.models import Tag
-from hdabo.utils import normalize
-from optparse import make_option
-import csv
-import math
-import sys
-
-
-class Command(BaseCommand):
-    '''
-    Command to import csvfile
-    '''
-    args = '<path_to_csv_file path_to_csv_file ...>'
-    options = '[--ignore-existing] [--lines] [--encoding]'
-    help = """Import of a tag popularity file for hdabo
-Options:
-    --ignore-existing : ignore existing datasheets
-    --lines : max number of lines to load (for each file). 0 means all.
-    --encoding : files encoding. default to latin-1"""
-    
-    option_list = BaseCommand.option_list + (
-        make_option('--encoding',
-            action='store',
-            type='string',
-            dest='encoding',
-            default="latin-1",
-            help='fix the file encoding. default to latin-1'),
-        make_option('--delimiter',
-            action='store',
-            type='string',
-            dest='delimiter',
-            default=";",
-            help='csv file delimiter'),
-        make_option('--dialect',
-            action='store',
-            type='string',
-            dest='dialect',
-            default="excel",
-            help='csv dialect'),
-        make_option('--fieldnames',
-            action='store',
-            type='string',
-            dest='fieldnames',
-            default="label,popularity",
-            help='fields list (comma separated)'),
-        make_option('--lines',
-            action='store',
-            type='int',
-            dest='lines',
-            default=0,
-            help='Number of lines to read. 0 means all.'),
-        make_option('--preserve',
-            action='store_true',
-            dest='preserve',
-            default=False,
-            help='preserve'),
-                                             
-        
-        )
-    
-    def show_progress(self, current_line, total_line, width):
-
-        percent = (float(current_line) / float(total_line)) * 100.0
-
-        marks = math.floor(width * (percent / 100.0))
-        spaces = math.floor(width - marks)
-    
-        loader = '[' + ('=' * int(marks)) + (' ' * int(spaces)) + ']'
-    
-        sys.stdout.write("%s %d%% %d/%d\r" % (loader, percent, current_line - 1, total_line - 1)) #takes the header into account
-        if percent >= 100:
-            sys.stdout.write("\n")
-        sys.stdout.flush()
-
-    def handle(self, *args, **options):
-        
-        if len(args) == 0:
-            raise CommandError("Give one csv file to import")
-        elif len(args) > 1:
-            raise CommandError("Only one file can be imported")
-        
-        self.encoding = options.get('encoding', "latin-1")
-        lines = options.get('lines', 0)
-        fieldnames = options.get('fieldnames', "label,popularity")
-
-        csv_path = args[0]
-        
-        print("Processing %s " % (csv_path))
-        
-        with open(csv_path, 'rU') as csv_file:
-            # get the number of lines if necessary
-            if not lines:
-                for i, l in enumerate(csv_file): #@UnusedVariable
-                    pass                        
-                total_line = i + 1
-                if fieldnames:
-                    total_line = total_line + 1
-                csv_file.seek(0)
-            else:
-                total_line = lines + 1
-
-            delimiter = options.get('delimiter', ";")
-            if delimiter == "TAB" or delimiter == "\\t":
-                delimiter = '\t'
-            dr_kwargs = {'delimiter':delimiter}
-            if  fieldnames is not None:
-                dr_kwargs['fieldnames'] = [f.strip() for f in fieldnames.split(",")]
-            dialect = options.get('dialect', "excel")
-            if dialect is not None:
-                dr_kwargs['dialect'] = dialect
-               
-            if not options.get('preserve',False):
-                Tag.objects.update(popularity=0)
-                
-            reader = csv.DictReader(csv_file, **dr_kwargs)
-
-            for j, row in enumerate(reader):
-                if lines and j >= lines:
-                    break
-                line_num = reader.line_num if fieldnames is None else reader.line_num + 1
-                self.show_progress(line_num, total_line, 60)
-                def safe_decode(val, encoding):
-                    if val:
-                        return val.decode(encoding)
-                    else:
-                        return val
-                                            
-                row = dict([(safe_decode(key, self.encoding), safe_decode(value, self.encoding)) for key, value in row.items()])
-                
-                label = normalize(row['label'].strip())
-                popularity_str = row['popularity']
-                
-                if not label or not popularity_str:
-                    continue
-                
-                
-                for tag in Tag.objects.filter(normalized_label=label):
-                    tag.popularity = tag.popularity + int(row['popularity'])
-                    tag.save()
--- a/web/hdabo/management/commands/order_tags.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-'''
-Created on Jun 7, 2011
-
-@author: ymh
-'''
-
-from django.core.management.base import NoArgsCommand
-from django.core.management.color import no_style
-from django.db import transaction
-from hdabo.models import Datasheet
-from hdabo.wp_utils import reorder_datasheet_tags
-from hdabo.utils import show_progress
-from optparse import make_option
-import math
-import sys
-
-
-class Command(NoArgsCommand):
-    '''
-    Command to calculate the order of tags based on indexation
-    recalculate all tags. Will ask for confirmation
-    '''
-
-    args = ''
-    options = '-f : force '
-    help = "calculate the order of tags based on indexation recalculate all tags. Will ask for confirmation"
-    
-    option_list = NoArgsCommand.option_list + (
-        make_option('-f', '--force',
-            action='store_true',
-            dest='force',
-            default=False,
-            help='force reordering of all datasheets'),
-        make_option('--noinput',
-            action='store_true',
-            dest='no_input',
-            default=False,
-            help='no input'),
-        )
-
-
-    def handle_noargs(self, **options):
-        
-        self.style = no_style()
-        
-        interactive = options.get('interactive', True) and not options.get('no_input', False)
-        force = options.get('force', True)
-        
-        if interactive:
-            confirm = raw_input("""You have requested to recalculate the index order of all the tags.
-This will process all the tags in %s datasheets. Are you sure you want to do this ?
-    Type 'yes' to continue, or 'no' to cancel: """ % ("all" if force else "not validated"))
-        else:
-            confirm = 'yes'
-            
-        if confirm != "yes":
-            print "Tag reordering cancelled"
-            return
-
-        if force:
-            queryset = Datasheet.objects.all()
-        else:
-            queryset = Datasheet.objects.filter(validated=False, manual_order=False)
-        total = queryset.count()
-        
-        transaction.commit_unless_managed()
-        transaction.enter_transaction_management()
-        transaction.managed(True)
-
-        try:
-            for i, ds in enumerate(queryset):
-                show_progress(i + 1, total, ds.title, 60)
-                reorder_datasheet_tags(ds)
-                transaction.commit()
-        except:
-            transaction.rollback()
-            raise
-        finally:
-            transaction.leave_transaction_management()
-            
-        
--- a/web/hdabo/management/commands/query_wikipedia.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,146 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Jun 7, 2011
-
-@author: ymh
-'''
-
-from django.conf import settings
-from django.core.management.base import NoArgsCommand
-from django.core.management.color import no_style
-from hdabo.models import Tag
-from hdabo.wp_utils import process_tag
-from optparse import make_option
-from wikitools import wiki
-import math
-import sys
-
-
-
-class Command(NoArgsCommand):
-    '''
-    query and update wikipedia for tag title.
-    '''
-    options = ''
-    help = """query and update wikipedia for tag title."""
-    
-    option_list = NoArgsCommand.option_list + (
-        make_option('--force',
-            action='store_true',
-            dest='force',
-            default=False,
-            help='force all tags to be updated, not only those not yet processed'),
-        make_option('--random',
-            action='store_true',
-            dest='random',
-            default=False,
-            help='randomize query on tags'),
-        make_option('--site',
-            action='store',
-            type='string',
-            dest='site_url',
-            default="http://fr.wikipedia.org/w/api.php",
-            help='the url for the wikipedia site'),
-        make_option('--limit',
-            action='store',
-            type='int',
-            dest='limit',
-            default= -1,
-            help='number of tag to process'),
-        make_option('--start',
-            action='store',
-            type='int',
-            dest='start',
-            default=0,
-            help='number of tag to ignore'),
-        )
-    
-    def __is_homonymie(self, page_dict):
-        for cat in page_dict.get(u"categories", []):
-            if u'Catégorie:Homonymie' in cat.get(u"title", u"") or u'Category:Disambiguation pages' in cat.get(u"title", u""):
-                return True
-        return False
-        
-    def show_progress(self, current_line, total_line, label, width):
-
-        percent = (float(current_line) / float(total_line)) * 100.0
-
-        marks = math.floor(width * (percent / 100.0))
-        spaces = math.floor(width - marks)
-    
-        loader = u'[' + (u'=' * int(marks)) + (u' ' * int(spaces)) + u']'
-        
-        sys.stdout.write(u"%s %d%% %d/%d - %r\r" % (loader, percent, current_line - 1, total_line - 1, label[:50].rjust(50))) #takes the header into account
-        if percent >= 100:
-            sys.stdout.write("\n")
-        sys.stdout.flush()
-        
-    def handle_noargs(self, **options):
-        
-        self.style = no_style()
-        
-        interactive = options.get('interactive', True)
-        
-        verbosity = int(options.get('verbosity', '1'))
-        
-        force = options.get('force', False)
-        
-        limit = options.get("limit", -1)
-        start = options.get("start", 0)
-        
-        site_url = options.get('site_url', settings.WIKIPEDIA_API_URL)
-        
-        random = options.get('random', False)
-        
-        if verbosity > 2:
-            print "option passed : " + repr(options)
-
-        if force and interactive:
-            confirm = raw_input("""You have requested to query and replace the wikipedia information for all datasheets.
-Are you sure you want to do this ?
-    Type 'yes' to continue, or 'no' to cancel: """)
-        else:
-            confirm = 'yes'
-            
-        if confirm != "yes":
-            print "wikipedia query cancelled"
-            return
-
-        if force:
-            queryset = Tag.objects.all()
-        else:
-            queryset = Tag.objects.filter(url_status=None)                    
-        
-        if random:
-            queryset = queryset.order_by("?")
-        else:
-            queryset = queryset.order_by("label")
-        
-        if limit >= 0:
-            queryset = queryset[start:limit]
-        else:
-            queryset = queryset[start:]
-            
-        
-        if verbosity > 2 :
-            print "Tag Query is %s" % (queryset.query)
-        
-        site = wiki.Wiki(site_url) #@UndefinedVariable
-        
-        
-        count = queryset.count()
-        if verbosity > 1:
-            print "Processing %d tags" % (count)
-        
-        
-        
-        for i, tag in enumerate(queryset):
-            
-            if verbosity > 1:
-                print "processing tag %s (%d/%d)" % (tag.label, i + 1, count)
-            else:
-                self.show_progress(i + 1, count, tag.label, 60)                            
-            
-            process_tag(site, tag, verbosity)
-            
-            
--- a/web/hdabo/management/utils.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Feb 2, 2012
-
-@author: ymh
-'''
-
-import cStringIO
-import csv
-import codecs
-
-class UnicodeWriter:
-    """
-    A CSV writer which will write rows to CSV file "f",
-    which is encoded in the given encoding.
-    """
-
-    def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds):
-        # Redirect output to a queue
-        self.queue = cStringIO.StringIO()
-        self.writer = csv.writer(self.queue, dialect=dialect, **kwds)
-        self.stream = f
-        self.encoder = codecs.getincrementalencoder(encoding)()
-
-    def writerow(self, row):
-        self.writer.writerow([unicode(s).encode("utf-8") for s in row])
-        # Fetch UTF-8 output from the queue ...
-        data = self.queue.getvalue()
-        data = data.decode("utf-8")
-        # ... and reencode it into the target encoding
-        data = self.encoder.encode(data)
-        # write to the target stream
-        self.stream.write(data)
-        # empty queue
-        self.queue.truncate(0)
-
-    def writerows(self, rows):
-        for row in rows:
-            self.writerow(row)
--- a/web/hdabo/migrations/0001_initial.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,436 +0,0 @@
-#@PydevCodeAnalysisIgnore
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        
-        # Adding model 'Organisation'
-        db.create_table('hdabo_organisation', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('hda_id', self.gf('django.db.models.fields.CharField')(unique=True, max_length=512)),
-            ('name', self.gf('django.db.models.fields.CharField')(max_length=512)),
-            ('location', self.gf('django.db.models.fields.CharField')(max_length=512, null=True, blank=True)),
-            ('website', self.gf('django.db.models.fields.CharField')(max_length=2048, null=True, blank=True)),
-        ))
-        db.send_create_signal('hdabo', ['Organisation'])
-
-        # Adding model 'Author'
-        db.create_table('hdabo_author', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('hda_id', self.gf('django.db.models.fields.CharField')(unique=True, max_length=512)),
-            ('lastname', self.gf('django.db.models.fields.CharField')(max_length=512, null=True, blank=True)),
-            ('firstname', self.gf('django.db.models.fields.CharField')(max_length=512, null=True, blank=True)),
-        ))
-        db.send_create_signal('hdabo', ['Author'])
-
-        # Adding model 'TimePeriod'
-        db.create_table('hdabo_timeperiod', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('label', self.gf('django.db.models.fields.CharField')(max_length=512)),
-            ('school_period', self.gf('django.db.models.fields.IntegerField')()),
-        ))
-        db.send_create_signal('hdabo', ['TimePeriod'])
-
-        # Adding unique constraint on 'TimePeriod', fields ['label', 'school_period']
-        db.create_unique('hdabo_timeperiod', ['label', 'school_period'])
-
-        # Adding model 'Domain'
-        db.create_table('hdabo_domain', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('label', self.gf('django.db.models.fields.CharField')(max_length=512)),
-            ('school_period', self.gf('django.db.models.fields.IntegerField')()),
-        ))
-        db.send_create_signal('hdabo', ['Domain'])
-
-        # Adding unique constraint on 'Domain', fields ['label', 'school_period']
-        db.create_unique('hdabo_domain', ['label', 'school_period'])
-
-        # Adding model 'DocumentFormat'
-        db.create_table('hdabo_documentformat', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('label', self.gf('django.db.models.fields.CharField')(unique=True, max_length=512)),
-        ))
-        db.send_create_signal('hdabo', ['DocumentFormat'])
-
-        # Adding model 'TagCategory'
-        db.create_table('hdabo_tagcategory', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('label', self.gf('django.db.models.fields.CharField')(unique=True, max_length=512)),
-        ))
-        db.send_create_signal('hdabo', ['TagCategory'])
-
-        # Adding model 'Tag'
-        db.create_table('hdabo_tag', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('label', self.gf('django.db.models.fields.CharField')(max_length=1024, db_index=True)),
-            ('normalized_label', self.gf('django.db.models.fields.CharField')(max_length=1024, db_index=True)),
-            ('original_label', self.gf('django.db.models.fields.CharField')(max_length=1024)),
-            ('alias', self.gf('django.db.models.fields.CharField')(max_length=1024, null=True, blank=True)),
-            ('category', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.TagCategory'], null=True, blank=True)),
-            ('wikipedia_url', self.gf('django.db.models.fields.URLField')(max_length=2048, null=True, blank=True)),
-            ('wikipedia_pageid', self.gf('django.db.models.fields.BigIntegerField')(null=True, blank=True)),
-            ('url_status', self.gf('django.db.models.fields.IntegerField')(default=None, null=True, blank=True)),
-            ('dbpedia_uri', self.gf('django.db.models.fields.URLField')(max_length=2048, null=True, blank=True)),
-            ('popularity', self.gf('django.db.models.fields.IntegerField')(default=0, db_index=True)),
-        ))
-        db.send_create_signal('hdabo', ['Tag'])
-
-        # Adding unique constraint on 'Tag', fields ['label', 'original_label', 'url_status']
-        db.create_unique('hdabo_tag', ['label', 'original_label', 'url_status'])
-
-        # Adding model 'Location'
-        db.create_table('hdabo_location', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('name', self.gf('django.db.models.fields.CharField')(max_length=512)),
-            ('insee', self.gf('django.db.models.fields.CharField')(unique=True, max_length=5)),
-        ))
-        db.send_create_signal('hdabo', ['Location'])
-
-        # Adding model 'Datasheet'
-        db.create_table('hdabo_datasheet', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('hda_id', self.gf('django.db.models.fields.CharField')(unique=True, max_length=512)),
-            ('author', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Author'], null=True, blank=True)),
-            ('organisation', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Organisation'])),
-            ('title', self.gf('django.db.models.fields.CharField')(max_length=2048)),
-            ('description', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
-            ('url', self.gf('django.db.models.fields.URLField')(max_length=2048, null=True, blank=True)),
-            ('town', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Location'], null=True, blank=True)),
-            ('format', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.DocumentFormat'], null=True, blank=True)),
-            ('original_creation_date', self.gf('django.db.models.fields.DateField')()),
-            ('original_modification_date', self.gf('django.db.models.fields.DateField')()),
-            ('modification_datetime', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)),
-            ('validation_date', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)),
-            ('validated', self.gf('django.db.models.fields.BooleanField')(default=False, db_index=True)),
-            ('validator', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True, blank=True)),
-            ('manual_order', self.gf('django.db.models.fields.BooleanField')(default=False, db_index=True)),
-        ))
-        db.send_create_signal('hdabo', ['Datasheet'])
-
-        # Adding model 'TaggedSheet'
-        db.create_table('hdabo_taggedsheet', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
-            ('tag', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Tag'])),
-            ('original_order', self.gf('django.db.models.fields.IntegerField')(default=0)),
-            ('order', self.gf('django.db.models.fields.IntegerField')(default=0, db_index=True)),
-            ('index_note', self.gf('django.db.models.fields.FloatField')(default=0.0, db_index=True)),
-            ('wikipedia_revision_id', self.gf('django.db.models.fields.BigIntegerField')(null=True, blank=True)),
-        ))
-        db.send_create_signal('hdabo', ['TaggedSheet'])
-
-        # Adding model 'Datasheet_domains'
-        db.create_table('hdabo_datasheet_domains', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
-            ('sort_value', self.gf('django.db.models.fields.IntegerField')()),
-            ('domain', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Domain'])),
-        ))
-        db.send_create_signal('hdabo', ['Datasheet_domains'])
-
-        # Adding model 'Datasheet_highschool_periods'
-        db.create_table('hdabo_datasheet_highschool_periods', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
-            ('sort_value', self.gf('django.db.models.fields.IntegerField')()),
-            ('timeperiod', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.TimePeriod'])),
-        ))
-        db.send_create_signal('hdabo', ['Datasheet_highschool_periods'])
-
-        # Adding model 'Datasheet_highschool_themes'
-        db.create_table('hdabo_datasheet_highschool_themes', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
-            ('sort_value', self.gf('django.db.models.fields.IntegerField')()),
-            ('domain', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Domain'])),
-        ))
-        db.send_create_signal('hdabo', ['Datasheet_highschool_themes'])
-
-        # Adding model 'Datasheet_college_periods'
-        db.create_table('hdabo_datasheet_college_periods', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
-            ('sort_value', self.gf('django.db.models.fields.IntegerField')()),
-            ('timeperiod', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.TimePeriod'])),
-        ))
-        db.send_create_signal('hdabo', ['Datasheet_college_periods'])
-
-        # Adding model 'Datasheet_college_themes'
-        db.create_table('hdabo_datasheet_college_themes', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
-            ('sort_value', self.gf('django.db.models.fields.IntegerField')()),
-            ('domain', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Domain'])),
-        ))
-        db.send_create_signal('hdabo', ['Datasheet_college_themes'])
-
-        # Adding model 'Datasheet_primary_periods'
-        db.create_table('hdabo_datasheet_primary_periods', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
-            ('sort_value', self.gf('django.db.models.fields.IntegerField')()),
-            ('timeperiod', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.TimePeriod'])),
-        ))
-        db.send_create_signal('hdabo', ['Datasheet_primary_periods'])
-
-        # Adding model 'Datasheet_primary_themes'
-        db.create_table('hdabo_datasheet_primary_themes', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('datasheet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Datasheet'])),
-            ('sort_value', self.gf('django.db.models.fields.IntegerField')()),
-            ('domain', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Domain'])),
-        ))
-        db.send_create_signal('hdabo', ['Datasheet_primary_themes'])
-
-
-    def backwards(self, orm):
-        
-        # Removing unique constraint on 'Tag', fields ['label', 'original_label', 'url_status']
-        db.delete_unique('hdabo_tag', ['label', 'original_label', 'url_status'])
-
-        # Removing unique constraint on 'Domain', fields ['label', 'school_period']
-        db.delete_unique('hdabo_domain', ['label', 'school_period'])
-
-        # Removing unique constraint on 'TimePeriod', fields ['label', 'school_period']
-        db.delete_unique('hdabo_timeperiod', ['label', 'school_period'])
-
-        # Deleting model 'Organisation'
-        db.delete_table('hdabo_organisation')
-
-        # Deleting model 'Author'
-        db.delete_table('hdabo_author')
-
-        # Deleting model 'TimePeriod'
-        db.delete_table('hdabo_timeperiod')
-
-        # Deleting model 'Domain'
-        db.delete_table('hdabo_domain')
-
-        # Deleting model 'DocumentFormat'
-        db.delete_table('hdabo_documentformat')
-
-        # Deleting model 'TagCategory'
-        db.delete_table('hdabo_tagcategory')
-
-        # Deleting model 'Tag'
-        db.delete_table('hdabo_tag')
-
-        # Deleting model 'Location'
-        db.delete_table('hdabo_location')
-
-        # Deleting model 'Datasheet'
-        db.delete_table('hdabo_datasheet')
-
-        # Deleting model 'TaggedSheet'
-        db.delete_table('hdabo_taggedsheet')
-
-        # Deleting model 'Datasheet_domains'
-        db.delete_table('hdabo_datasheet_domains')
-
-        # Deleting model 'Datasheet_highschool_periods'
-        db.delete_table('hdabo_datasheet_highschool_periods')
-
-        # Deleting model 'Datasheet_highschool_themes'
-        db.delete_table('hdabo_datasheet_highschool_themes')
-
-        # Deleting model 'Datasheet_college_periods'
-        db.delete_table('hdabo_datasheet_college_periods')
-
-        # Deleting model 'Datasheet_college_themes'
-        db.delete_table('hdabo_datasheet_college_themes')
-
-        # Deleting model 'Datasheet_primary_periods'
-        db.delete_table('hdabo_datasheet_primary_periods')
-
-        # Deleting model 'Datasheet_primary_themes'
-        db.delete_table('hdabo_datasheet_primary_themes')
-
-
-    models = {
-        'auth.group': {
-            'Meta': {'object_name': 'Group'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
-            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
-        },
-        'auth.permission': {
-            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
-            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'auth.user': {
-            'Meta': {'object_name': 'User'},
-            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
-            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
-            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
-            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
-            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
-            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
-        },
-        'contenttypes.contenttype': {
-            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
-            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'hdabo.author': {
-            'Meta': {'object_name': 'Author'},
-            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
-            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.datasheet': {
-            'Meta': {'object_name': 'Datasheet'},
-            'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
-            'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
-            'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
-            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
-            'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
-            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
-            'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
-            'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
-            'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']"}),
-            'original_creation_date': ('django.db.models.fields.DateField', [], {}),
-            'original_modification_date': ('django.db.models.fields.DateField', [], {}),
-            'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
-            'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
-            'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
-            'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
-            'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
-            'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
-            'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
-            'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.datasheet_college_periods': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
-            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
-        },
-        'hdabo.datasheet_college_themes': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.datasheet_domains': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.datasheet_highschool_periods': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
-            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
-        },
-        'hdabo.datasheet_highschool_themes': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.datasheet_primary_periods': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
-            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
-        },
-        'hdabo.datasheet_primary_themes': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.documentformat': {
-            'Meta': {'object_name': 'DocumentFormat'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
-        },
-        'hdabo.domain': {
-            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
-            'school_period': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.location': {
-            'Meta': {'object_name': 'Location'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
-        },
-        'hdabo.organisation': {
-            'Meta': {'object_name': 'Organisation'},
-            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
-            'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.tag': {
-            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
-            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
-            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
-            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
-            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
-            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'wikipedia_url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.tagcategory': {
-            'Meta': {'object_name': 'TagCategory'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
-        },
-        'hdabo.taggedsheet': {
-            'Meta': {'object_name': 'TaggedSheet'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
-            'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
-            'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
-            'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.timeperiod': {
-            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
-            'school_period': ('django.db.models.fields.IntegerField', [], {})
-        }
-    }
-
-    complete_apps = ['hdabo']
--- a/web/hdabo/migrations/0002_backport_hdabo_sf.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,231 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        
-        # Adding field 'Tag.alternative_label'
-        db.add_column('hdabo_tag', 'alternative_label', self.gf('django.db.models.fields.CharField')(max_length=1024, null=True, blank=True), keep_default=False) #@UndefinedVariable
-
-        # Adding field 'Tag.created_at'
-        db.add_column('hdabo_tag', 'created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, default=datetime.datetime.utcnow, blank=True), keep_default=False) #@UndefinedVariable
-
-        # Adding field 'Tag.alternative_wikipedia_url'
-        db.add_column('hdabo_tag', 'alternative_wikipedia_url', self.gf('django.db.models.fields.URLField')(max_length=2048, null=True, blank=True), keep_default=False) #@UndefinedVariable
-
-        # Adding field 'Tag.alternative_wikipedia_pageid'
-        db.add_column('hdabo_tag', 'alternative_wikipedia_pageid', self.gf('django.db.models.fields.BigIntegerField')(null=True, blank=True), keep_default=False) #@UndefinedVariable
-
-        # Adding field 'TaggedSheet.created_at'
-        db.add_column('hdabo_taggedsheet', 'created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, default=datetime.datetime.utcnow, blank=True), keep_default=False) #@UndefinedVariable
-
-
-    def backwards(self, orm):
-        
-        # Deleting field 'Tag.alternative_label'
-        db.delete_column('hdabo_tag', 'alternative_label') #@UndefinedVariable
-
-        # Deleting field 'Tag.created_at'
-        db.delete_column('hdabo_tag', 'created_at') #@UndefinedVariable
-
-        # Deleting field 'Tag.alternative_wikipedia_url'
-        db.delete_column('hdabo_tag', 'alternative_wikipedia_url') #@UndefinedVariable
-
-        # Deleting field 'Tag.alternative_wikipedia_pageid'
-        db.delete_column('hdabo_tag', 'alternative_wikipedia_pageid') #@UndefinedVariable
-
-        # Deleting field 'TaggedSheet.created_at'
-        db.delete_column('hdabo_taggedsheet', 'created_at') #@UndefinedVariable
-
-
-    models = {
-        'auth.group': {
-            'Meta': {'object_name': 'Group'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
-            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
-        },
-        'auth.permission': {
-            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
-            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'auth.user': {
-            'Meta': {'object_name': 'User'},
-            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
-            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
-            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
-            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
-            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
-            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
-        },
-        'contenttypes.contenttype': {
-            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
-            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'hdabo.author': {
-            'Meta': {'object_name': 'Author'},
-            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
-            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.datasheet': {
-            'Meta': {'object_name': 'Datasheet'},
-            'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
-            'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
-            'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
-            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
-            'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
-            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
-            'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
-            'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
-            'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']"}),
-            'original_creation_date': ('django.db.models.fields.DateField', [], {}),
-            'original_modification_date': ('django.db.models.fields.DateField', [], {}),
-            'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
-            'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
-            'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
-            'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
-            'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
-            'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
-            'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
-            'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.datasheet_college_periods': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
-            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
-        },
-        'hdabo.datasheet_college_themes': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.datasheet_domains': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.datasheet_highschool_periods': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
-            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
-        },
-        'hdabo.datasheet_highschool_themes': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.datasheet_primary_periods': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
-            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
-        },
-        'hdabo.datasheet_primary_themes': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.documentformat': {
-            'Meta': {'object_name': 'DocumentFormat'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
-        },
-        'hdabo.domain': {
-            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
-            'school_period': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.location': {
-            'Meta': {'object_name': 'Location'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
-        },
-        'hdabo.organisation': {
-            'Meta': {'object_name': 'Organisation'},
-            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
-            'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.tag': {
-            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
-            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
-            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
-            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
-            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'wikipedia_url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.tagcategory': {
-            'Meta': {'object_name': 'TagCategory'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
-        },
-        'hdabo.taggedsheet': {
-            'Meta': {'object_name': 'TaggedSheet'},
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
-            'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
-            'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
-            'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.timeperiod': {
-            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
-            'school_period': ('django.db.models.fields.IntegerField', [], {})
-        }
-    }
-
-    complete_apps = ['hdabo']
--- a/web/hdabo/migrations/0003_update_redirection.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,221 +0,0 @@
-# encoding: utf-8
-from south.v2 import DataMigration
-from hdabo import utils, wp_utils
-import sys
-from wikitools import wiki
-
-class Migration(DataMigration):
-
-    def forwards(self, orm):
-        queryset = orm.Tag.objects.filter(url_status=1, alternative_label=None)
-        queryset_count = queryset.count() 
-        
-        sys.stdout.write("Processing %d tags\n" % (queryset_count))
-        sys.stdout.flush()
-        site = wiki.Wiki("http://fr.wikipedia.org/w/api.php") #@UndefinedVariable
-        
-        
-        for i,tag in enumerate(queryset):
-            utils.show_progress(i+1, queryset_count, tag.label, 50)
-            wp_res = wp_utils.query_wikipedia_title(site, pageid=tag.wikipedia_pageid)
-            tag.alternative_label = wp_res['alternative_label']
-            tag.alternative_wikipedia_url = wp_res['alternative_wikipedia_url']
-            tag.alternative_wikipedia_pageid = wp_res['alternative_pageid']
-            tag.save()
-
-        sys.stdout.write("\n")
-        sys.stdout.flush()
-        
-
-    def backwards(self, orm):        
-        pass
-
-
-    models = {
-        'auth.group': {
-            'Meta': {'object_name': 'Group'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
-            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
-        },
-        'auth.permission': {
-            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
-            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'auth.user': {
-            'Meta': {'object_name': 'User'},
-            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
-            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
-            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
-            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
-            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
-            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
-        },
-        'contenttypes.contenttype': {
-            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
-            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'hdabo.author': {
-            'Meta': {'object_name': 'Author'},
-            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
-            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.datasheet': {
-            'Meta': {'object_name': 'Datasheet'},
-            'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
-            'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
-            'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
-            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
-            'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
-            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
-            'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
-            'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
-            'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']"}),
-            'original_creation_date': ('django.db.models.fields.DateField', [], {}),
-            'original_modification_date': ('django.db.models.fields.DateField', [], {}),
-            'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
-            'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
-            'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
-            'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
-            'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
-            'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
-            'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
-            'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.datasheet_college_periods': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
-            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
-        },
-        'hdabo.datasheet_college_themes': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.datasheet_domains': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.datasheet_highschool_periods': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
-            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
-        },
-        'hdabo.datasheet_highschool_themes': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.datasheet_primary_periods': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
-            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
-        },
-        'hdabo.datasheet_primary_themes': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.documentformat': {
-            'Meta': {'object_name': 'DocumentFormat'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
-        },
-        'hdabo.domain': {
-            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
-            'school_period': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.location': {
-            'Meta': {'object_name': 'Location'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
-        },
-        'hdabo.organisation': {
-            'Meta': {'object_name': 'Organisation'},
-            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
-            'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.tag': {
-            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
-            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
-            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
-            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
-            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'wikipedia_url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-        },
-        'hdabo.tagcategory': {
-            'Meta': {'object_name': 'TagCategory'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
-        },
-        'hdabo.taggedsheet': {
-            'Meta': {'object_name': 'TaggedSheet'},
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
-            'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
-            'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
-            'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.timeperiod': {
-            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
-            'school_period': ('django.db.models.fields.IntegerField', [], {})
-        }
-    }
-
-    complete_apps = ['hdabo']
--- a/web/hdabo/migrations/0004_index_tag.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,238 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        
-        # Adding index on 'Tag', fields ['wikipedia_pageid']
-        db.create_index('hdabo_tag', ['wikipedia_pageid'])
-
-        # Adding index on 'Tag', fields ['wikipedia_url']
-        db.create_index('hdabo_tag', ['wikipedia_url'])
-
-        # Adding index on 'Tag', fields ['alternative_wikipedia_url']
-        db.create_index('hdabo_tag', ['alternative_wikipedia_url'])
-
-        # Adding index on 'Tag', fields ['url_status']
-        db.create_index('hdabo_tag', ['url_status'])
-
-        # Adding index on 'Tag', fields ['dbpedia_uri']
-        db.create_index('hdabo_tag', ['dbpedia_uri'])
-
-        # Adding index on 'Tag', fields ['alternative_wikipedia_pageid']
-        db.create_index('hdabo_tag', ['alternative_wikipedia_pageid'])
-
-
-    def backwards(self, orm):
-        
-        # Removing index on 'Tag', fields ['alternative_wikipedia_pageid']
-        db.delete_index('hdabo_tag', ['alternative_wikipedia_pageid'])
-
-        # Removing index on 'Tag', fields ['dbpedia_uri']
-        db.delete_index('hdabo_tag', ['dbpedia_uri'])
-
-        # Removing index on 'Tag', fields ['url_status']
-        db.delete_index('hdabo_tag', ['url_status'])
-
-        # Removing index on 'Tag', fields ['alternative_wikipedia_url']
-        db.delete_index('hdabo_tag', ['alternative_wikipedia_url'])
-
-        # Removing index on 'Tag', fields ['wikipedia_url']
-        db.delete_index('hdabo_tag', ['wikipedia_url'])
-
-        # Removing index on 'Tag', fields ['wikipedia_pageid']
-        db.delete_index('hdabo_tag', ['wikipedia_pageid'])
-
-
-    models = {
-        'auth.group': {
-            'Meta': {'object_name': 'Group'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
-            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
-        },
-        'auth.permission': {
-            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
-            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'auth.user': {
-            'Meta': {'object_name': 'User'},
-            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
-            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
-            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
-            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
-            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
-            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
-        },
-        'contenttypes.contenttype': {
-            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
-            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'hdabo.author': {
-            'Meta': {'object_name': 'Author'},
-            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
-            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.datasheet': {
-            'Meta': {'object_name': 'Datasheet'},
-            'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
-            'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
-            'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
-            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
-            'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
-            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
-            'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
-            'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
-            'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']"}),
-            'original_creation_date': ('django.db.models.fields.DateField', [], {}),
-            'original_modification_date': ('django.db.models.fields.DateField', [], {}),
-            'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
-            'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
-            'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
-            'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
-            'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
-            'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
-            'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
-            'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.datasheet_college_periods': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
-            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
-        },
-        'hdabo.datasheet_college_themes': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.datasheet_domains': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.datasheet_highschool_periods': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
-            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
-        },
-        'hdabo.datasheet_highschool_themes': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.datasheet_primary_periods': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
-            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
-        },
-        'hdabo.datasheet_primary_themes': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.documentformat': {
-            'Meta': {'object_name': 'DocumentFormat'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
-        },
-        'hdabo.domain': {
-            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
-            'school_period': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.location': {
-            'Meta': {'object_name': 'Location'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
-        },
-        'hdabo.organisation': {
-            'Meta': {'object_name': 'Organisation'},
-            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
-            'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.tag': {
-            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
-            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
-            'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
-            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
-            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
-            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
-            'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.tagcategory': {
-            'Meta': {'object_name': 'TagCategory'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
-        },
-        'hdabo.taggedsheet': {
-            'Meta': {'object_name': 'TaggedSheet'},
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
-            'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
-            'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
-            'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.timeperiod': {
-            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
-            'school_period': ('django.db.models.fields.IntegerField', [], {})
-        }
-    }
-
-    complete_apps = ['hdabo']
--- a/web/hdabo/migrations/0005_auto__chg_field_datasheet_organisation.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,208 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        
-        # Changing field 'Datasheet.organisation'
-        db.alter_column('hdabo_datasheet', 'organisation_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdabo.Organisation'], null=True))
-
-
-    def backwards(self, orm):
-        
-        # User chose to not deal with backwards NULL issues for 'Datasheet.organisation'
-        raise RuntimeError("Cannot reverse this migration. 'Datasheet.organisation' and its values cannot be restored.")
-
-
-    models = {
-        'auth.group': {
-            'Meta': {'object_name': 'Group'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
-            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
-        },
-        'auth.permission': {
-            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
-            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'auth.user': {
-            'Meta': {'object_name': 'User'},
-            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 6, 21, 18, 18, 22, 503161)'}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
-            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
-            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 6, 21, 18, 18, 22, 503032)'}),
-            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
-            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
-            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
-        },
-        'contenttypes.contenttype': {
-            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
-            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'hdabo.author': {
-            'Meta': {'object_name': 'Author'},
-            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
-            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.datasheet': {
-            'Meta': {'object_name': 'Datasheet'},
-            'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
-            'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
-            'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
-            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
-            'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
-            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
-            'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
-            'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
-            'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']", 'null': 'True'}),
-            'original_creation_date': ('django.db.models.fields.DateField', [], {}),
-            'original_modification_date': ('django.db.models.fields.DateField', [], {}),
-            'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
-            'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
-            'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
-            'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
-            'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
-            'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
-            'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
-            'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.datasheet_college_periods': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
-            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
-        },
-        'hdabo.datasheet_college_themes': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.datasheet_domains': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.datasheet_highschool_periods': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
-            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
-        },
-        'hdabo.datasheet_highschool_themes': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.datasheet_primary_periods': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
-            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
-        },
-        'hdabo.datasheet_primary_themes': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.documentformat': {
-            'Meta': {'object_name': 'DocumentFormat'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
-        },
-        'hdabo.domain': {
-            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
-            'school_period': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.location': {
-            'Meta': {'object_name': 'Location'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
-        },
-        'hdabo.organisation': {
-            'Meta': {'object_name': 'Organisation'},
-            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
-            'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.tag': {
-            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
-            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
-            'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
-            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
-            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
-            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
-            'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.tagcategory': {
-            'Meta': {'object_name': 'TagCategory'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
-        },
-        'hdabo.taggedsheet': {
-            'Meta': {'object_name': 'TaggedSheet'},
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
-            'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
-            'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
-            'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.timeperiod': {
-            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
-            'school_period': ('django.db.models.fields.IntegerField', [], {})
-        }
-    }
-
-    complete_apps = ['hdabo']
--- a/web/hdabo/models.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,404 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from django.conf import settings
-from django.contrib.auth.models import User
-from django.db import models
-from hdabo.utils import Property, normalize
-import datetime
-
-
-
-class SortedModelManager(models.Manager):
-    use_for_related_fields = True
-    def get_query_set(self):
-        qs = super(SortedModelManager, self).get_query_set()
-        if getattr(self, 'through', None) is not None and getattr(self.through, 'Meta', None) is not None and getattr(self.through.Meta, 'ordering', None) is not None:
-            qs = qs.order_by(*[self.through._meta.db_table + "." + f for f in self.through.Meta.ordering])
-        return qs
-
-
-class Organisation(models.Model):
-    hda_id = models.CharField(max_length=512, unique=True, blank=False, null=False)
-    name = models.CharField(max_length=512, unique=False, blank=False, null=False)
-    location = models.CharField(max_length=512, unique=False, blank=True, null=True)
-    website = models.CharField(max_length=2048, unique=False, blank=True, null=True)
-    
-class Author(models.Model):
-    hda_id = models.CharField(max_length=512, unique=True, blank=False, null=False)
-    lastname = models.CharField(max_length=512, unique=False, blank=True, null=True)
-    firstname = models.CharField(max_length=512, unique=False, blank=True, null=True)
-
-class TimePeriod(models.Model):
-    TIME_PERIOD_CHOICES = (
-        (1, u'Primaire'),
-        (2, u'Collège'),
-        (3, u'Lycée'),
-    )
-    TIME_PERIOD_DICT = {
-        u'Primaire': 1,
-        u'Collège': 2,
-        u'Lycée': 3,
-    }
-    label = models.CharField(max_length=512, unique=False, blank=False, null=False)
-    school_period = models.IntegerField(choices=TIME_PERIOD_CHOICES)
-    
-    objects = SortedModelManager()
-    
-    class Meta:
-        unique_together = ("label", "school_period")
-
-    def __unicode__(self):
-        return unicode(self.label)
-
-class Domain(models.Model):
-    DOMAIN_PERIOD_CHOICES = (
-        (0, u'Global'),
-        (1, u'Primaire'),
-        (2, u'Collège'),
-        (3, u'Lycée'),
-    )
-    DOMAIN_PERIOD_DICT = {
-        u'Global': 0,
-        u'Primaire': 1,
-        u'Collège': 2,
-        u'Lycée': 3,
-    }
-    label = models.CharField(max_length=512, unique=False, blank=False, null=False)
-    school_period = models.IntegerField(choices=DOMAIN_PERIOD_CHOICES)
-
-    objects = SortedModelManager()
-
-    class Meta:
-        unique_together = ("label", "school_period")
-
-    def __unicode__(self):
-        return unicode(self.label)
-
-
-class DocumentFormat(models.Model):
-    label = models.CharField(max_length=512, unique=True, blank=False, null=False)
-
-    def __unicode__(self):
-        return unicode(self.label)
-    
-class TagCategory(models.Model):
-    label = models.CharField(max_length=512, unique=True, blank=False, null=False)
-    
-    def __unicode__(self):
-        return unicode(self.label)
-    
-    class Meta:
-        verbose_name_plural = "TagCategories"
-
-class Tag(models.Model):
-    TAG_URL_STATUS_CHOICES = (
-        (0, "null_result"),
-        (1, "redirection"),
-        (2, "homonyme"),
-        (3, "match"),
-        (4, "unsematized"),
-    )
-    
-    TAG_URL_STATUS_DICT = {
-        "null_result":0,
-        "redirection":1,
-        "homonyme":2,
-        "match":3,
-        "unsemantized":4,
-    }
-    
-    label = models.CharField(max_length=1024, unique=False, blank=False, null=False, db_index=True)
-    alternative_label = models.CharField(max_length=1024, unique=False, blank=True, null=True)
-    normalized_label = models.CharField(max_length=1024, unique=False, blank=False, null=False, db_index=True, editable=False)
-    created_at = models.DateTimeField(auto_now_add=True)
-    original_label = models.CharField(max_length=1024, unique=False, blank=False, null=False, editable=False)
-    alias = models.CharField(max_length=1024, unique=False, blank=True, null=True)
-    category = models.ForeignKey(TagCategory, null=True, blank=True)
-    wikipedia_url = models.URLField(verify_exists=False, max_length=2048, blank=True, null=True, db_index=True)
-    wikipedia_pageid = models.BigIntegerField(unique=False, blank=True, null=True, db_index=True)
-    alternative_wikipedia_url = models.URLField(verify_exists=False, max_length=2048, blank=True, null=True, db_index=True)
-    alternative_wikipedia_pageid = models.BigIntegerField(unique=False, blank=True, null=True, db_index=True)
-    url_status = models.IntegerField(choices=TAG_URL_STATUS_CHOICES, blank=True, null=True, default=None, db_index=True)
-    dbpedia_uri = models.URLField(verify_exists=False, max_length=2048, blank=True, null=True, db_index=True)
-    popularity = models.IntegerField(blank=False, null=False, default=0, db_index=True)
-
-    @Property
-    def url_status_text(): #@NoSelf
-        def fget(self):
-            return self.TAG_URL_STATUS_CHOICES[self.url_status][1]
-        
-        return locals()
-    
-    def save(self, *args, **kwargs):
-        self.normalized_label = normalize(self.label)
-        super(Tag, self).save(*args, **kwargs) 
-            
-    class Meta:
-        unique_together = (('label', 'original_label', 'url_status'),)
-        
-class Location(models.Model):
-    name = models.CharField(max_length=512, unique=False, blank=False, null=False)
-    insee = models.CharField(max_length=5, unique=True, blank=False, null=False)
-
-    def __unicode__(self):
-        return unicode("%s : %s" % (self.name, self.insee))
-
-
-def generate_m2m_setter(m2m_field_name):
-    
-    def set_m2m_field(self, list):
-        
-        m2m_manager = getattr(self, m2m_field_name)
-        m2m_manager.clear()
-        
-        through_klass = set_m2m_field.cache.get('through_klass', None)
-        if through_klass is None:
-            field = getattr(self.__class__, m2m_field_name)
-            through_klass = field.through
-            set_m2m_field.cache['through_klass'] = through_klass
-            for f in through_klass._meta.fields:
-                if isinstance(f, models.ForeignKey) and f.name != "datasheet":
-                    set_m2m_field.cache['target_obj_field_name'] = f.name
-                    break
-        target_obj_field_name = set_m2m_field.cache['target_obj_field_name']
-
-        for i, obj in enumerate(list):
-            kwargs = {
-                'datasheet': self,
-                'sort_value' : i,
-                target_obj_field_name: obj
-            }
-            new_rel = through_klass(**kwargs)
-            new_rel.save()
-    set_m2m_field.cache = {}
-            
-    return set_m2m_field
-
-
-class Datasheet(models.Model):
-    hda_id = models.CharField(max_length=512, unique=True, blank=False, null=False)
-    author = models.ForeignKey(Author, null=True, blank=True, serialize=False)
-    organisation = models.ForeignKey(Organisation, serialize=False, null=True)
-    title = models.CharField(max_length=2048, unique=False, blank=False, null=False, serialize=False)
-    description = models.TextField(blank=True, null=True, serialize=False)
-    url = models.URLField(verify_exists=False, max_length=2048, blank=True, null=True, serialize=False)
-    domains = models.ManyToManyField(Domain, limit_choices_to={'school_period':Domain.DOMAIN_PERIOD_DICT[u'Global']}, related_name="datasheets", through="Datasheet_domains", serialize=False)
-    primary_periods = models.ManyToManyField(TimePeriod, limit_choices_to={'school_period':TimePeriod.TIME_PERIOD_DICT[u'Primaire']}, related_name="primary_periods_datasheets", through="Datasheet_primary_periods", serialize=False)
-    college_periods = models.ManyToManyField(TimePeriod, limit_choices_to={'school_period':TimePeriod.TIME_PERIOD_DICT[u'Collège']}, related_name="college_periods_datasheets", through="Datasheet_college_periods", serialize=False)
-    highschool_periods = models.ManyToManyField(TimePeriod, limit_choices_to={'school_period':TimePeriod.TIME_PERIOD_DICT[u'Lycée']}, related_name="highschool_periods_datasheets", through="Datasheet_highschool_periods", serialize=False)
-    primary_themes = models.ManyToManyField(Domain, limit_choices_to={'school_period':Domain.DOMAIN_PERIOD_DICT[u'Primaire']}, related_name="primary_themes_datasheets", through="Datasheet_primary_themes", serialize=False)
-    college_themes = models.ManyToManyField(Domain, limit_choices_to={'school_period':Domain.DOMAIN_PERIOD_DICT[u'Collège']}, related_name="college_themes_datasheets", through="Datasheet_college_themes", serialize=False)
-    highschool_themes = models.ManyToManyField(Domain, limit_choices_to={'school_period':Domain.DOMAIN_PERIOD_DICT[u'Lycée']}, related_name="highschool_themes_datasheets", through="Datasheet_highschool_themes", serialize=False)
-    town = models.ForeignKey(Location, null=True, blank=True, serialize=False)
-    format = models.ForeignKey(DocumentFormat, null=True, blank=True, serialize=False)
-    original_creation_date = models.DateField(serialize=False)
-    original_modification_date = models.DateField(serialize=False)
-    modification_datetime = models.DateTimeField(auto_now=True, serialize=False)
-    validation_date = models.DateTimeField(null=True, blank=True, serialize=False)
-    validated = models.BooleanField(default=False, db_index=True)
-    validator = models.ForeignKey(User, null=True, blank=True, serialize=False)
-    manual_order = models.BooleanField(default=False, db_index=True, serialize=False)
-    tags = models.ManyToManyField(Tag, through='TaggedSheet', serialize=False)
-    
-    def natural_key(self):
-        return self.hda_id
-        
-    def validate(self, user):
-        self.validation_date = datetime.datetime.now()
-        self.validated = True
-        self.validator = user
-        self.save()
-    
-    def unvalidate(self):
-        self.validation_date = datetime.datetime.min
-        self.validated = False
-        self.validator = None
-        self.save()
-        
-        
-    set_domains = generate_m2m_setter("domains")
-    
-    @Property
-    def domains_list(): #@NoSelf
-        def fget(self):
-            return [d.label for d in self.domains.all()]
-        
-        return locals() 
-
-    @Property
-    def domains_text(): #@NoSelf
-        def fget(self):
-            return "; ".join(self.domains_list)
-        
-        return locals() 
-
-
-    set_primary_periods = generate_m2m_setter("primary_periods")
-
-    @Property
-    def primary_periods_list(): #@NoSelf
-        def fget(self):
-            return [d.label for d in self.primary_periods.all()] 
-
-        return locals() 
-
-    
-    @Property
-    def primary_periods_text(): #@NoSelf
-        def fget(self):
-            return "; ".join(self.primary_periods_list) 
-
-        return locals() 
-
-    set_college_periods = generate_m2m_setter("college_periods")
-
-    @Property
-    def college_periods_list(): #@NoSelf
-        def fget(self):
-            return [d.label for d in self.college_periods.all()] 
-
-        return locals() 
-
-    @Property
-    def college_periods_text(): #@NoSelf
-        def fget(self):
-            return "; ".join(self.college_periods_list) 
-
-        return locals() 
-
-    set_highschool_periods = generate_m2m_setter("highschool_periods")
-
-    @Property
-    def highschool_periods_list(): #@NoSelf
-        def fget(self):
-            return [d.label for d in self.highschool_periods.all()] 
-
-        return locals() 
-
-    @Property
-    def highschool_periods_text(): #@NoSelf
-        def fget(self):
-            return "; ".join(self.highschool_periods_list) 
-
-        return locals() 
-
-    set_primary_themes = generate_m2m_setter("primary_themes")
-
-    @Property
-    def primary_themes_list(): #@NoSelf
-        def fget(self):
-            return [d.label for d in self.primary_themes.all()] 
-
-        return locals() 
-
-
-    @Property
-    def primary_themes_text(): #@NoSelf
-        def fget(self):
-            return "; ".join(self.primary_themes_list) 
-
-        return locals() 
-
-    set_college_themes = generate_m2m_setter("college_themes")
-
-    @Property
-    def college_themes_list(): #@NoSelf
-        def fget(self):
-            return [d.label for d in self.college_themes.all()] 
-
-        return locals() 
-    
-    @Property
-    def college_themes_text(): #@NoSelf
-        def fget(self):
-            return "; ".join(self.college_themes_list) 
-
-        return locals() 
-
-    set_highschool_themes = generate_m2m_setter("highschool_themes")
-
-    @Property
-    def highschool_themes_list(): #@NoSelf
-        def fget(self):
-            return [d.label for d in self.highschool_themes.all()] 
-
-        return locals()
-
-    @Property
-    def highschool_themes_text(): #@NoSelf
-        def fget(self):
-            return "; ".join(self.highschool_themes_list) 
-
-        return locals()
-
-    @Property
-    def town_text(): #@NoSelf
-        def fget(self):
-            return self.town.name if self.town else ""
-        
-        return locals()
-
-    @Property
-    def tags_text(): #@NoSelf
-        def fget(self):
-            return "; ".join([t.label for t in self.tags.all()])
-        
-        return locals()
-
-    @models.permalink
-    def get_absolute_url(self):
-        return ('display_datasheet', (), {
-                    'ds_id': self.hda_id
-                })
-
-
-class TaggedSheet(models.Model):
-    datasheet = models.ForeignKey(Datasheet)
-    tag = models.ForeignKey(Tag)
-    created_at = models.DateTimeField(auto_now_add=True)
-    original_order = models.IntegerField(null=False, blank=False, default=0)
-    order = models.IntegerField(null=False, blank=False, default=0, db_index=True)
-    index_note = models.FloatField(null=False, blank=False, default=0.0, db_index=True)
-    wikipedia_revision_id = models.BigIntegerField(unique=False, blank=True, null=True)
-    
-    @Property
-    def wikipedia_verion_permalink(): #@NoSelf
-        def fget(self):
-            return settings.WIKIPEDIA_VERSION_PERMALINK_TEMPLATE % (unicode(self.wikipedia_revision_id))
-        
-        return locals()
-
-
-class SortedDatasheetLink(models.Model):    
-    datasheet = models.ForeignKey(Datasheet, db_index=True, null=False, blank=False)
-    sort_value = models.IntegerField(null=False, blank=False)
-
-    class Meta:
-        abstract = True
-        ordering = ['sort_value']
-        
-
-class Datasheet_domains(SortedDatasheetLink):
-    domain = models.ForeignKey(Domain, db_index=True, null=False, blank=False)
-
-class Datasheet_highschool_periods(SortedDatasheetLink):
-    timeperiod = models.ForeignKey(TimePeriod, db_index=True, null=False, blank=False)
-
-class Datasheet_highschool_themes(SortedDatasheetLink):
-    domain = models.ForeignKey(Domain, db_index=True, null=False, blank=False)
-
-class Datasheet_college_periods(SortedDatasheetLink):
-    timeperiod = models.ForeignKey(TimePeriod, db_index=True, null=False, blank=False)
-
-class Datasheet_college_themes(SortedDatasheetLink):
-    domain = models.ForeignKey(Domain, db_index=True, null=False, blank=False)
-
-class Datasheet_primary_periods(SortedDatasheetLink):
-    timeperiod = models.ForeignKey(TimePeriod, db_index=True, null=False, blank=False)
-
-class Datasheet_primary_themes(SortedDatasheetLink):
-    domain = models.ForeignKey(Domain, db_index=True, null=False, blank=False)
-    
-        
-
-    
\ No newline at end of file
--- a/web/hdabo/modwsgi.wsgi	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-import os
-import sys
-import site
-
-
-
-def application(environ, start_response):
-    
-    global g_env_set
-    
-    if 'g_env_set' not in globals() or not g_env_set:
-        os.environ['DJANGO_SETTINGS_MODULE'] = environ['DJANGO_SETTINGS_MODULE']
-    
-        prev_sys_path = list(sys.path)
-    
-        sys.path.append(environ['PROJECT_PATH'])
-        for path in environ.get('PYTHON_PATH', "").split(os.pathsep):
-            if path:
-                site.addsitedir(path) #@UndefinedVariable
-    
-        new_sys_path = [] 
-        for item in list(sys.path): 
-            if item not in prev_sys_path and item not in new_sys_path: 
-                new_sys_path.append(item) 
-                sys.path.remove(item)
-        sys.path[:0] = new_sys_path
-        g_env_set = True 
-
-    import django.core.handlers.wsgi
-
-    _application = django.core.handlers.wsgi.WSGIHandler()
-
-    if environ.get('PYDEV_DEBUG', "False").lower() in ["true", "1", "t"]:
-        import pydevd #@UnresolvedImport
-        pydevd.settrace(suspend=False)
-
-    return _application(environ, start_response)
-        
--- a/web/hdabo/search/french_whoosh_backend.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,209 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-
-Adaptation of Haystack' Swoosh backend with french snowball stemming
-
-Created on May 31, 2011
-
-@author: ymh
-'''
-
-from django.conf import settings
-from django.db.models.loading import get_model
-from haystack.backends.whoosh_backend import (
-    SearchBackend as WhooshSearchBackend, SearchQuery as WhooshSearchQuery)
-from haystack.constants import ID, DJANGO_CT, DJANGO_ID
-from haystack.exceptions import SearchBackendError
-from haystack.models import SearchResult
-from whoosh.analysis import (default_pattern, stem, RegexTokenizer, 
-    LowercaseFilter, StopFilter, PyStemmerFilter)
-from whoosh.fields import (ID as WHOOSH_ID, Schema, IDLIST, TEXT, KEYWORD, 
-    NUMERIC, BOOLEAN, DATETIME, NGRAM, NGRAMWORDS)
-
-BACKEND_NAME = 'french_whoosh'
-
-STOP_WORDS = [ u"a", u"afin", u"ai", u"ainsi", u"après", u"attendu", u"au",
-u"aujourd", u"auquel", u"aussi", u"autre", u"autres", u"aux", u"auxquelles",
-u"auxquels", u"avait", u"avant", u"avec", u"avoir", u"c", u"car", u"ce",
-u"ceci", u"cela", u"celle", u"celles", u"celui", u"cependant", u"certain",
-u"certaine", u"certaines", u"certains", u"ces", u"cet", u"cette", u"ceux",
-u"chez", u"ci", u"combien", u"comme", u"comment", u"concernant", u"contre",
-u"d", u"dans", u"je", u"de", u"jusqu", u"debout", u"jusque", u"dedans", u"l",
-u"dehors", u"la", u"delà", u"laquelle", u"depuis", u"le", u"derrière",
-u"lequel", u"des", u"les", u"desquelles", u"lesquelles", u"desquels",
-u"lesquels", u"dessous", u"leur", u"dessus", u"leurs", u"devant", u"lorsque",
-u"devers", u"lui", u"devra", u"là", u"divers", u"ma", u"diverse", u"mais",
-u"diverses", u"malgré", u"doit", u"me", u"donc", u"merci", u"dont", u"mes",
-u"du", u"mien", u"duquel", u"mienne", u"durant", u"miennes", u"dès", u"miens",
-u"elle", u"moi", u"elles", u"moins", u"en", u"mon", u"entre", u"moyennant",
-u"environ", u"même", u"est", u"mêmes", u"et", u"n", u"etc", u"ne", u"etre",
-u"ni", u"eux", u"non", u"excepté", u"nos", u"hormis", u"notre", u"hors",
-u"nous", u"hélas", u"néanmoins", u"hui", u"nôtre", u"il", u"nôtres", u"ils",
-u"on", u"j", u"out", u"ou", u"soit", u"outre", u"son", u"où", u"sont", u"par",
-u"sous", u"parmi", u"suivant", u"partant", u"sur", u"pas", u"ta", u"passé",
-u"te", u"pendant", u"tes", u"plein", u"tien", u"plus", u"tienne", u"plusieurs",
-u"tiennes", u"pour", u"tiens", u"pourquoi", u"toi", u"proche", u"ton", u"près",
-u"tous", u"puisque", u"tout", u"qu", u"toute", u"quand", u"toutes", u"que",
-u"tu", u"quel", u"un", u"quelle", u"une", u"quelles", u"va", u"quels", u"vers",
-u"qui", u"voici", u"quoi", u"voilà", u"quoique", u"vos", u"revoici", u"votre",
-u"revoilà", u"vous", u"s", u"vu", u"sa", u"vôtre", u"sans", u"vôtres",
-u"sauf", u"y", u"se", u"à", u"selon", u"ça", u"seront", u"ès", u"ses",
-u"été", u"si", u"être", u"sien", u"ô", u"sienne", u"siennes", u"siens",
-u"sinon", u"soi"]
-
-def FrenchStemmingAnalyzer(expression=default_pattern, stoplist=STOP_WORDS,
-                     minsize=2, maxsize=None, gaps=False, stemfn=stem,
-                     ignore=None, cachesize=50000):
-    """Composes a RegexTokenizer with a lower case filter, an optional stop
-    filter, and a stemming filter.
-    
-    >>> ana = StemmingAnalyzer()
-    >>> [token.text for token in ana(u"Testing is testing and testing")]
-    [u"test", u"test", u"test"]
-    
-    :param expression: The regular expression pattern to use to extract tokens.
-    :param stoplist: A list of stop words. Set this to None to disable
-        the stop word filter.
-    :param minsize: Words smaller than this are removed from the stream.
-    :param maxsize: Words longer that this are removed from the stream.
-    :param gaps: If True, the tokenizer *splits* on the expression, rather
-        than matching on the expression.
-    :param ignore: a set of words to not stem.
-    :param cachesize: the maximum number of stemmed words to cache. The larger
-        this number, the faster stemming will be but the more memory it will
-        use.
-    """
-    
-    ret = RegexTokenizer(expression=expression, gaps=gaps)
-    chain = ret | LowercaseFilter()
-    if stoplist is not None:
-        chain = chain | StopFilter(stoplist=stoplist, minsize=minsize,
-                                   maxsize=maxsize)
-    return chain | PyStemmerFilter(lang="french", ignore=ignore, cachesize=cachesize)
-FrenchStemmingAnalyzer.__inittypes__ = dict(expression=unicode, gaps=bool,
-                                      stoplist=list, minsize=int, maxsize=int)
-
-
-class SearchBackend(WhooshSearchBackend):
-    '''
-    Adaptation of Haystack' Swoosh backend with french snowball stemming
-    '''
-
-    def build_schema(self, fields):
-        schema_fields = {
-            ID: WHOOSH_ID(stored=True, unique=True),
-            DJANGO_CT: WHOOSH_ID(stored=True),
-            DJANGO_ID: WHOOSH_ID(stored=True),
-        }
-        # Grab the number of keys that are hard-coded into Haystack.
-        # We'll use this to (possibly) fail slightly more gracefully later.
-        initial_key_count = len(schema_fields)
-        content_field_name = ''
-        
-        for field_name, field_class in fields.items(): #@UnusedVariable
-            if field_class.is_multivalued:
-                if field_class.indexed is False:
-                    schema_fields[field_class.index_fieldname] = IDLIST(stored=True, field_boost=field_class.boost)
-                else:
-                    schema_fields[field_class.index_fieldname] = KEYWORD(stored=True, commas=True, scorable=True, field_boost=field_class.boost)
-            elif field_class.field_type in ['date', 'datetime']:
-                schema_fields[field_class.index_fieldname] = DATETIME(stored=field_class.stored)
-            elif field_class.field_type == 'integer':
-                schema_fields[field_class.index_fieldname] = NUMERIC(stored=field_class.stored, type=int, field_boost=field_class.boost)
-            elif field_class.field_type == 'float':
-                schema_fields[field_class.index_fieldname] = NUMERIC(stored=field_class.stored, type=float, field_boost=field_class.boost)
-            elif field_class.field_type == 'boolean':
-                # Field boost isn't supported on BOOLEAN as of 1.8.2.
-                schema_fields[field_class.index_fieldname] = BOOLEAN(stored=field_class.stored)
-            elif field_class.field_type == 'ngram':
-                schema_fields[field_class.index_fieldname] = NGRAM(minsize=3, maxsize=15, stored=field_class.stored, field_boost=field_class.boost)
-            elif field_class.field_type == 'edge_ngram':
-                schema_fields[field_class.index_fieldname] = NGRAMWORDS(minsize=2, maxsize=15, stored=field_class.stored, field_boost=field_class.boost)
-            else:
-                schema_fields[field_class.index_fieldname] = TEXT(stored=True, analyzer=FrenchStemmingAnalyzer(), field_boost=field_class.boost)
-            
-            if field_class.document is True:
-                content_field_name = field_class.index_fieldname
-        
-        # Fail more gracefully than relying on the backend to die if no fields
-        # are found.
-        if len(schema_fields) <= initial_key_count:
-            raise SearchBackendError("No fields were found in any search_indexes. Please correct this before attempting to search.")
-        
-        return (content_field_name, Schema(**schema_fields))
-
-    def _process_results(self, raw_page, highlight=False, query_string='', spelling_query=None, result_class=None):
-        if not self.site:
-            from haystack import site
-        else:
-            site = self.site
-        
-        results = []
-        
-        # It's important to grab the hits first before slicing. Otherwise, this
-        # can cause pagination failures.
-        hits = len(raw_page)
-        
-        if result_class is None:
-            result_class = SearchResult
-        
-        facets = {}
-        spelling_suggestion = None
-        indexed_models = site.get_indexed_models()
-        
-        for doc_offset, raw_result in enumerate(raw_page):
-            score = raw_page.score(doc_offset) or 0
-            app_label, model_name = raw_result[DJANGO_CT].split('.')
-            additional_fields = {}
-            model = get_model(app_label, model_name)
-            
-            if model and model in indexed_models:
-                for key, value in raw_result.items():
-                    index = site.get_index(model)
-                    string_key = str(key)
-                    
-                    if string_key in index.fields and hasattr(index.fields[string_key], 'convert'):
-                        # Special-cased due to the nature of KEYWORD fields.
-                        if index.fields[string_key].is_multivalued:
-                            if value is None or len(value) is 0:
-                                additional_fields[string_key] = []
-                            else:
-                                additional_fields[string_key] = value.split(',')
-                        else:
-                            additional_fields[string_key] = index.fields[string_key].convert(value)
-                    else:
-                        additional_fields[string_key] = self._to_python(value)
-                
-                del(additional_fields[DJANGO_CT])
-                del(additional_fields[DJANGO_ID])
-                
-                if highlight:
-                    from whoosh.highlight import highlight, ContextFragmenter, UppercaseFormatter
-                    sa = FrenchStemmingAnalyzer()
-                    terms = [term.replace('*', '') for term in query_string.split()]
-                    
-                    additional_fields['highlighted'] = {
-                        self.content_field_name: [highlight(additional_fields.get(self.content_field_name), terms, sa, ContextFragmenter(terms), UppercaseFormatter())],
-                    }
-                
-                result = result_class(app_label, model_name, raw_result[DJANGO_ID], score, searchsite=self.site, **additional_fields)
-                results.append(result)
-            else:
-                hits -= 1
-        
-        if getattr(settings, 'HAYSTACK_INCLUDE_SPELLING', False):
-            if spelling_query:
-                spelling_suggestion = self.create_spelling_suggestion(spelling_query)
-            else:
-                spelling_suggestion = self.create_spelling_suggestion(query_string)
-        
-        return {
-            'results': results,
-            'hits': hits,
-            'facets': facets,
-            'spelling_suggestion': spelling_suggestion,
-        }
-
-class SearchQuery(WhooshSearchQuery):
-    pass
-        
--- a/web/hdabo/search/sites.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-'''
-Created on May 27, 2011
-
-@author: ymh
-'''
-import haystack
-haystack.autodiscover()
--- a/web/hdabo/search_indexes.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-'''
-Created on May 30, 2011
-
-@author: ymh
-'''
-
-from haystack import site
-from haystack.indexes import SearchIndex, CharField
-from hdabo.models import Datasheet
-
-class DatasheetIndex(SearchIndex):
-    '''
-    The search index for the datasheet
-    '''
-    text = CharField(document=True, use_template=True)
-    hda_id = CharField(model_attr='hda_id', indexed=True, stored=True)
-    title = CharField(model_attr='title', indexed=True, stored=True, boost=2.0)
-    description = CharField(model_attr='description', indexed=True, stored=True, boost=1.0)
-    
-
-site.register(Datasheet, DatasheetIndex)
--- a/web/hdabo/settings.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,171 +0,0 @@
-# Django settings for hdabo project.
-
-DEBUG = True
-TEMPLATE_DEBUG = DEBUG
-
-ADMINS = (
-    # ('Your Name', 'your_email@example.com'),
-)
-
-MANAGERS = ADMINS
-
-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'
-
-# Language code for this installation. All choices can be found here:
-# http://www.i18nguy.com/unicode/language-identifiers.html
-LANGUAGE_CODE = 'en-us'
-
-SITE_ID = 1
-
-# If you set this to False, Django will make some optimizations so as not
-# 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 filesystem path to the directory that will hold user-uploaded files.
-# Example: "/home/media/media.lawrence.com/media/"
-MEDIA_ROOT = ''
-
-# URL that handles the media served from MEDIA_ROOT. Make sure to use a
-# trailing slash.
-# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
-MEDIA_URL = ''
-
-# Absolute path to the directory static files should be collected to.
-# Don't put anything in this directory yourself; store your static files
-# in apps' "static/" subdirectories and in STATICFILES_DIRS.
-# Example: "/home/media/media.lawrence.com/static/"
-STATIC_ROOT = ''
-
-# URL prefix for static files.
-# Example: "http://media.lawrence.com/static/"
-STATIC_URL = '/static/site'
-
-# Additional locations of static files
-STATICFILES_DIRS = (
-    # Put strings here, like "/home/html/static" or "C:/www/django/static".
-    # Always use forward slashes, even on Windows.
-    # Don't forget to use absolute paths, not relative paths.
-)
-
-# List of finder classes that know how to find static files in
-# various locations.
-STATICFILES_FINDERS = (
-    'django.contrib.staticfiles.finders.FileSystemFinder',
-    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
-#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
-)
-
-# Make this unique, and don't share it with anybody.
-SECRET_KEY = '1anp2v#36%z(pahi5ytghik&-eg8t96)&$t)b%i=7@%=)u$pyn'
-
-# List of callables that know how to import templates from various sources.
-TEMPLATE_LOADERS = (
-    '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.contrib.auth.context_processors.auth',
-    'django.core.context_processors.debug',
-    'django.core.context_processors.i18n',
-    'django.core.context_processors.media',
-    'django.core.context_processors.static',
-    'django.contrib.messages.context_processors.messages',
-    'hdabo.context_processors.version',
-)
-
-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 = 'hdabo.urls'
-
-TEMPLATE_DIRS = (
-    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
-    # Always use forward slashes, even on Windows.
-    # Don't forget to use absolute paths, not relative paths.
-)
-
-INSTALLED_APPS = (
-    'south',              
-    'django.contrib.auth',
-    'django.contrib.contenttypes',
-    'django.contrib.sessions',
-    'django.contrib.sites',
-    'django.contrib.messages',
-    'django.contrib.staticfiles',
-    'django.contrib.admin',
-    'django_extensions',
-    'haystack',
-    'hdabo',
-)
-
-# A sample logging configuration. The only tangible logging
-# performed by this configuration is to send an email to
-# the site admins on every HTTP 500 error.
-# See http://docs.djangoproject.com/en/dev/topics/logging for
-# more details on how to customize your logging configuration.
-LOGGING = {
-    'version': 1,
-    'disable_existing_loggers': False,
-    'handlers': {
-        'mail_admins': {
-            'level': 'ERROR',
-            'class': 'django.utils.log.AdminEmailHandler'
-        }
-    },
-    'loggers': {
-        'django.request': {
-            'handlers': ['mail_admins'],
-            'level': 'ERROR',
-            'propagate': True,
-        },
-    }
-}
-
-HAYSTACK_SITECONF = 'hdabo.search.sites'
-
-WIKIPEDIA_API_URL = "http://fr.wikipedia.org/w/api.php"
-WIKIPEDIA_VERSION_PERMALINK_TEMPLATE = "http://fr.wikipedia.org/w/index.php?oldid=%s"
-DBPEDIA_URI_TEMPLATE = "http://dbpedia.org/resource/%s"
-
-SEARCH_STAR_CHARACTER = "*"
-PAGINATION_DEFAULT_NB_BY_PAGE = 50
-
-from hdabo.config import * #@UnusedWildImport
-
-if 'LOGIN_REDIRECT_URL' not in locals():
-    LOGIN_REDIRECT_URL = BASE_URL + "hdabo"
-if 'LOGIN_URL' not in locals():
-    LOGIN_URL = BASE_URL + "hdabo/accounts/login"
-
--- a/web/hdabo/static/hdabo/css/nyroModal.css	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-.nyroModalBg {
-	position: fixed;
-	overflow: hidden;
-	top: 0;
-	left: 0;
-	height: 100%;
-	width: 100%;
-	background: #000;
-	opacity: 0.7;
-}
-.nmReposition {
-	position: absolute;
-}
-.nyroModalCloseButton {
-	top: -13px;
-	right: -13px;
-	width: 12px;
-	height: 12px;
-	text-indent: -9999em;
-	background: url(../img/close_nm.gif);
-}
-.nyroModalTitle {
-	top: -26px;
-	left: 0;
-	margin: 0;
-    font-size: 1.1em;
-	color: #ddd;
-}
-.nyroModalCont {
-	position: absolute;
-	border: 4px solid #777;
-	margin: 25px;
-	background: #fff;
-}
-.nyroModalCont iframe {
-	width: 600px;
-	height: 400px;
-}
-.nyroModalError {
-	border: 4px solid red;
-	color: red;
-	width: 250px;
-	height: 250px;
-}
-.nyroModalError div {
-	min-width: 0;
-	min-height: 0;
-	padding: 10px;
-}
-.nyroModalLink, .nyroModalDom, .nyroModalForm, .nyroModalFormFile {
-	position: relative;
-	padding: 10px;
-	min-height: 250px;
-	min-width: 250px;
-	max-width: 1000px;
-}
-.nyroModalImage, .nyroModalSwf, .nyroModalIframe, .nyroModalIframeForm {
-	position: relative;
-	overflow: hidden;
-}
-.nyroModalHidden {
-	left: -9999em;
-	top: -9999em;
-}
-.nyroModalLoad {
-	position: absolute;
-	width: 100px;
-	height: 100px;
-	background: #fff url(../img/ajax-loader-43x43.gif) no-repeat center;
-	padding: 0;
-}
-.nyroModalPrev, .nyroModalNext {
-	outline: none;
-	position: absolute;
-	top: 0;
-	height: 60%;
-	width: 150px;
-	min-height: 50px;
-	max-height: 300px;
-	cursor: pointer;
-	text-indent: -9999em;
-	background: transparent url('data:image/gif;base64,AAAA') left 20% no-repeat;
-}
-.nyroModalImage .nyroModalPrev, .nyroModalImage .nyroModalNext {
-	height: 100%;
-	width: 40%;
-	max-height: none;
-}
-.nyroModalPrev {
-	left: 0;
-}
-.nyroModalPrev:hover {
-	background-image: url(../img/prev.gif);
-}
-.nyroModalNext {
-	right: 0;
-	background-position: right 20%;
-}
-.nyroModalNext:hover {
-	background-position: right 20%;
-	background-image: url(../img/next.gif);
-}
\ No newline at end of file
Binary file web/hdabo/static/hdabo/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png has changed
Binary file web/hdabo/static/hdabo/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png has changed
Binary file web/hdabo/static/hdabo/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png has changed
Binary file web/hdabo/static/hdabo/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png has changed
Binary file web/hdabo/static/hdabo/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png has changed
Binary file web/hdabo/static/hdabo/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png has changed
Binary file web/hdabo/static/hdabo/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png has changed
Binary file web/hdabo/static/hdabo/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png has changed
Binary file web/hdabo/static/hdabo/css/smoothness/images/ui-icons_222222_256x240.png has changed
Binary file web/hdabo/static/hdabo/css/smoothness/images/ui-icons_2e83ff_256x240.png has changed
Binary file web/hdabo/static/hdabo/css/smoothness/images/ui-icons_454545_256x240.png has changed
Binary file web/hdabo/static/hdabo/css/smoothness/images/ui-icons_888888_256x240.png has changed
Binary file web/hdabo/static/hdabo/css/smoothness/images/ui-icons_cd0a0a_256x240.png has changed
--- a/web/hdabo/static/hdabo/css/smoothness/jquery-ui-1.8.13.custom.css	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,578 +0,0 @@
-/*
- * jQuery UI CSS Framework 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Theming/API
- */
-
-/* Layout helpers
-----------------------------------*/
-.ui-helper-hidden { display: none; }
-.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
-.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
-.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
-.ui-helper-clearfix { display: inline-block; }
-/* required comment for clearfix to work in Opera \*/
-* html .ui-helper-clearfix { height:1%; }
-.ui-helper-clearfix { display:block; }
-/* end clearfix */
-.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
-
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled { cursor: default !important; }
-
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Overlays */
-.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
-
-
-/*
- * jQuery UI CSS Framework 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Theming/API
- *
- * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
- */
-
-
-/* Component containers
-----------------------------------*/
-.ui-widget { font-family: Arial,Verdana,sans-serif; font-size: 1.1em; }
-.ui-widget .ui-widget { font-size: 1em; }
-.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Arial,Verdana,sans-serif; font-size: 1em; }
-.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
-.ui-widget-content a { color: #222222; }
-.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }
-.ui-widget-header a { color: #222222; }
-
-/* Interaction states
-----------------------------------*/
-.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; }
-.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; }
-.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
-.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; }
-.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
-.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }
-.ui-widget :active { outline: none; }
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight  {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; }
-.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
-.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
-.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
-.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
-.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
-.ui-priority-secondary, .ui-widget-content .ui-priority-secondary,  .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
-.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
-.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
-.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
-.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }
-.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
-.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
-.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
-.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
-
-/* positioning */
-.ui-icon-carat-1-n { background-position: 0 0; }
-.ui-icon-carat-1-ne { background-position: -16px 0; }
-.ui-icon-carat-1-e { background-position: -32px 0; }
-.ui-icon-carat-1-se { background-position: -48px 0; }
-.ui-icon-carat-1-s { background-position: -64px 0; }
-.ui-icon-carat-1-sw { background-position: -80px 0; }
-.ui-icon-carat-1-w { background-position: -96px 0; }
-.ui-icon-carat-1-nw { background-position: -112px 0; }
-.ui-icon-carat-2-n-s { background-position: -128px 0; }
-.ui-icon-carat-2-e-w { background-position: -144px 0; }
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
-.ui-icon-triangle-1-s { background-position: -64px -16px; }
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
-.ui-icon-arrow-1-s { background-position: -64px -32px; }
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
-.ui-icon-arrow-4 { background-position: 0 -80px; }
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
-.ui-icon-extlink { background-position: -32px -80px; }
-.ui-icon-newwin { background-position: -48px -80px; }
-.ui-icon-refresh { background-position: -64px -80px; }
-.ui-icon-shuffle { background-position: -80px -80px; }
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
-.ui-icon-folder-open { background-position: -16px -96px; }
-.ui-icon-document { background-position: -32px -96px; }
-.ui-icon-document-b { background-position: -48px -96px; }
-.ui-icon-note { background-position: -64px -96px; }
-.ui-icon-mail-closed { background-position: -80px -96px; }
-.ui-icon-mail-open { background-position: -96px -96px; }
-.ui-icon-suitcase { background-position: -112px -96px; }
-.ui-icon-comment { background-position: -128px -96px; }
-.ui-icon-person { background-position: -144px -96px; }
-.ui-icon-print { background-position: -160px -96px; }
-.ui-icon-trash { background-position: -176px -96px; }
-.ui-icon-locked { background-position: -192px -96px; }
-.ui-icon-unlocked { background-position: -208px -96px; }
-.ui-icon-bookmark { background-position: -224px -96px; }
-.ui-icon-tag { background-position: -240px -96px; }
-.ui-icon-home { background-position: 0 -112px; }
-.ui-icon-flag { background-position: -16px -112px; }
-.ui-icon-calendar { background-position: -32px -112px; }
-.ui-icon-cart { background-position: -48px -112px; }
-.ui-icon-pencil { background-position: -64px -112px; }
-.ui-icon-clock { background-position: -80px -112px; }
-.ui-icon-disk { background-position: -96px -112px; }
-.ui-icon-calculator { background-position: -112px -112px; }
-.ui-icon-zoomin { background-position: -128px -112px; }
-.ui-icon-zoomout { background-position: -144px -112px; }
-.ui-icon-search { background-position: -160px -112px; }
-.ui-icon-wrench { background-position: -176px -112px; }
-.ui-icon-gear { background-position: -192px -112px; }
-.ui-icon-heart { background-position: -208px -112px; }
-.ui-icon-star { background-position: -224px -112px; }
-.ui-icon-link { background-position: -240px -112px; }
-.ui-icon-cancel { background-position: 0 -128px; }
-.ui-icon-plus { background-position: -16px -128px; }
-.ui-icon-plusthick { background-position: -32px -128px; }
-.ui-icon-minus { background-position: -48px -128px; }
-.ui-icon-minusthick { background-position: -64px -128px; }
-.ui-icon-close { background-position: -80px -128px; }
-.ui-icon-closethick { background-position: -96px -128px; }
-.ui-icon-key { background-position: -112px -128px; }
-.ui-icon-lightbulb { background-position: -128px -128px; }
-.ui-icon-scissors { background-position: -144px -128px; }
-.ui-icon-clipboard { background-position: -160px -128px; }
-.ui-icon-copy { background-position: -176px -128px; }
-.ui-icon-contact { background-position: -192px -128px; }
-.ui-icon-image { background-position: -208px -128px; }
-.ui-icon-video { background-position: -224px -128px; }
-.ui-icon-script { background-position: -240px -128px; }
-.ui-icon-alert { background-position: 0 -144px; }
-.ui-icon-info { background-position: -16px -144px; }
-.ui-icon-notice { background-position: -32px -144px; }
-.ui-icon-help { background-position: -48px -144px; }
-.ui-icon-check { background-position: -64px -144px; }
-.ui-icon-bullet { background-position: -80px -144px; }
-.ui-icon-radio-off { background-position: -96px -144px; }
-.ui-icon-radio-on { background-position: -112px -144px; }
-.ui-icon-pin-w { background-position: -128px -144px; }
-.ui-icon-pin-s { background-position: -144px -144px; }
-.ui-icon-play { background-position: 0 -160px; }
-.ui-icon-pause { background-position: -16px -160px; }
-.ui-icon-seek-next { background-position: -32px -160px; }
-.ui-icon-seek-prev { background-position: -48px -160px; }
-.ui-icon-seek-end { background-position: -64px -160px; }
-.ui-icon-seek-start { background-position: -80px -160px; }
-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
-.ui-icon-seek-first { background-position: -80px -160px; }
-.ui-icon-stop { background-position: -96px -160px; }
-.ui-icon-eject { background-position: -112px -160px; }
-.ui-icon-volume-off { background-position: -128px -160px; }
-.ui-icon-volume-on { background-position: -144px -160px; }
-.ui-icon-power { background-position: 0 -176px; }
-.ui-icon-signal-diag { background-position: -16px -176px; }
-.ui-icon-signal { background-position: -32px -176px; }
-.ui-icon-battery-0 { background-position: -48px -176px; }
-.ui-icon-battery-1 { background-position: -64px -176px; }
-.ui-icon-battery-2 { background-position: -80px -176px; }
-.ui-icon-battery-3 { background-position: -96px -176px; }
-.ui-icon-circle-plus { background-position: 0 -192px; }
-.ui-icon-circle-minus { background-position: -16px -192px; }
-.ui-icon-circle-close { background-position: -32px -192px; }
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
-.ui-icon-circle-check { background-position: -208px -192px; }
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; }
-.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
-.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
-.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
-.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
-.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
-.ui-corner-right {  -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
-.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
-.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }
-
-/* Overlays */
-.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
-.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*
- * jQuery UI Resizable 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Resizable#theming
- */
-.ui-resizable { position: relative;}
-.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;
-	/* http://bugs.jqueryui.com/ticket/7233
-	 - Resizable: resizable handles fail to work in IE if transparent and content overlaps
-	*/
-	background-image:url(data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=);
-}
-.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
-.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
-.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
-.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
-.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
-.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
-.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
-.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
-.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
- * jQuery UI Selectable 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Selectable#theming
- */
-.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
-/*
- * jQuery UI Accordion 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Accordion#theming
- */
-/* IE/Win - Fix animation bug - #4615 */
-.ui-accordion { width: 100%; }
-.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
-.ui-accordion .ui-accordion-li-fix { display: inline; }
-.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
-.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
-.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
-.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
-.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
-.ui-accordion .ui-accordion-content-active { display: block; }
-/*
- * jQuery UI Autocomplete 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Autocomplete#theming
- */
-.ui-autocomplete { position: absolute; cursor: default; }	
-
-/* workarounds */
-* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
-
-/*
- * jQuery UI Menu 1.8.13
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Menu#theming
- */
-.ui-menu {
-	list-style:none;
-	padding: 2px;
-	margin: 0;
-	display:block;
-	float: left;
-}
-.ui-menu .ui-menu {
-	margin-top: -3px;
-}
-.ui-menu .ui-menu-item {
-	margin:0;
-	padding: 0;
-	zoom: 1;
-	float: left;
-	clear: left;
-	width: 100%;
-}
-.ui-menu .ui-menu-item a {
-	text-decoration:none;
-	display:block;
-	padding:.2em .4em;
-	line-height:1.5;
-	zoom:1;
-}
-.ui-menu .ui-menu-item a.ui-state-hover,
-.ui-menu .ui-menu-item a.ui-state-active {
-	font-weight: normal;
-	margin: -1px;
-}
-/*
- * jQuery UI Button 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Button#theming
- */
-.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
-.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
-button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
-.ui-button-icons-only { width: 3.4em; } 
-button.ui-button-icons-only { width: 3.7em; } 
-
-/*button text element */
-.ui-button .ui-button-text { display: block; line-height: 1.4;  }
-.ui-button-text-only .ui-button-text { padding: .4em 1em; }
-.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
-.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
-.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
-.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
-/* no icon support for input elements, provide padding by default */
-input.ui-button { padding: .4em 1em; }
-
-/*button icon element(s) */
-.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
-.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
-.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
-.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
-.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
-
-/*button sets*/
-.ui-buttonset { margin-right: 7px; }
-.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
-
-/* workarounds */
-button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
-/*
- * jQuery UI Dialog 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Dialog#theming
- */
-.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
-.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative;  }
-.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } 
-.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
-.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
-.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
-.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
-.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
-.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
-.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
-.ui-draggable .ui-dialog-titlebar { cursor: move; }
-/*
- * jQuery UI Slider 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Slider#theming
- */
-.ui-slider { position: relative; text-align: left; }
-.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
-.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
-
-.ui-slider-horizontal { height: .8em; }
-.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
-.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
-.ui-slider-horizontal .ui-slider-range-min { left: 0; }
-.ui-slider-horizontal .ui-slider-range-max { right: 0; }
-
-.ui-slider-vertical { width: .8em; height: 100px; }
-.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
-.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
-.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
-.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
- * jQuery UI Tabs 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Tabs#theming
- */
-.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
-.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
-.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
-.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
-.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
-.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
-.ui-tabs .ui-tabs-hide { display: none !important; }
-/*
- * jQuery UI Datepicker 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Datepicker#theming
- */
-.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
-.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
-.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
-.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
-.ui-datepicker .ui-datepicker-prev { left:2px; }
-.ui-datepicker .ui-datepicker-next { right:2px; }
-.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
-.ui-datepicker .ui-datepicker-next-hover { right:1px; }
-.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }
-.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
-.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
-.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
-.ui-datepicker select.ui-datepicker-month, 
-.ui-datepicker select.ui-datepicker-year { width: 49%;}
-.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
-.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  }
-.ui-datepicker td { border: 0; padding: 1px; }
-.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
-.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
-.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
-
-/* with multiple calendars */
-.ui-datepicker.ui-datepicker-multi { width:auto; }
-.ui-datepicker-multi .ui-datepicker-group { float:left; }
-.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
-.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
-.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
-.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
-.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
-.ui-datepicker-row-break { clear:both; width:100%; }
-
-/* RTL support */
-.ui-datepicker-rtl { direction: rtl; }
-.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
-.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
-.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
-.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
-.ui-datepicker-rtl .ui-datepicker-group { float:right; }
-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
-
-/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
-.ui-datepicker-cover {
-    display: none; /*sorry for IE5*/
-    display/**/: block; /*sorry for IE5*/
-    position: absolute; /*must have*/
-    z-index: -1; /*must have*/
-    filter: mask(); /*must have*/
-    top: -4px; /*must have*/
-    left: -4px; /*must have*/
-    width: 200px; /*must have*/
-    height: 200px; /*must have*/
-}/*
- * jQuery UI Progressbar 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Progressbar#theming
- */
-.ui-progressbar { height:2em; text-align: left; }
-.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
\ No newline at end of file
--- a/web/hdabo/static/hdabo/css/style.css	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,419 +0,0 @@
-@charset "UTF-8";
-
-body {
-
- 	font-family: Arial, Helvetica, sans serif;
- 	font-size: 12px;
- 	color: #4F5155;
- 	margin: 5px;
- 	padding: 0px;
- 	min-width:750px;
-	text-align: justify; 	
-}
-body p {
- 	margin: 2px; 	
-}
-
-a img,a:link img, a:active img, a:visited img, a:hover img  {
-	border:0px;
-}
-
-
-a:link
-{
-	color: #50a4a3;
-	text-decoration: none;
-	font-family:  Arial, Helvetica, sans-serif;
-	/*font-weight: bold;*/
-}
-
-a:hover
-{
-	color: #50a4a3;
-	text-decoration: none;
-	font-family:  Arial, Helvetica, sans-serif;
-	/*border-bottom-width: 1px;
-	border-bottom-style: dashed;
-	border-bottom-color: #2c8084;
-	font-weight: bold;*/
-}
-a:visited {
-	color: #50a4a3;
-	font-family:  Arial, Helvetica, sans-serif;
-	/*font-weight: bold;*/
-}
-
-.hda_blue{
-  /*color: #97fefd;*/ 
-  color: #86e6e5; 
-}
-
-
-#header
-{
-    padding: .2em;
-    border-bottom: 1px solid gray;
-    border-left: 1px solid gray;
-}
-
-#header a
-{
-    text-decoration: none;
-}
-
-
-#header_left
-{
-    padding: 0px;
-	max-width: 8em;
-	font-size: 30px;
-	font-weight : bold;
-	text-align: left;
-    text-transform: uppercase;
-}
-
-#header_left p
-{
- 	margin: 0px;
-}
-
-
-#header_left a:hover, #header_left a:visited, #header_left a:link, #header_left a:active, #header_left a:focus
-{
-	color: #4F5155;
-	text-decoration: none;
-}
-
-
-#header_right
-{
-	text-align: right;
-}
-
-#header_right a:link
-{
-	text-decoration: none;
-	color: white;
-}
-
-#header_right a:hover
-{
-	text-decoration: none;
-	color:  white;
-}
-
-#header_right a:visited {
-	text-decoration: none;
-	color: white;
-}
-
-
-#footer
-{
-    clear: both;
-    margin: 0;
-    padding: .5em;
-    /*background-color: #ddd;*/
-    border-top: 1px solid gray;
-}
-
-.version
-{
-    text-align: right;
-    color: white;
-    font-size:9px;
-}
-
-.version:hover
-{
-    color: #2c8084;
-    text-decoration: none;
-    font-weight: bold;
-    border-bottom-width: 0px;
-    border-bottom-style: none;
-}
-
-.small
-{
-    font-size:9px;
-}
-
-.footer_img
-{
-    float: left;
-}
-
-.footer_img img
-{
-    padding-left: 10px;
-    padding-right: 10px;
-}
-
-.footer_img a
-{
-    color: white;
-}
-
-.footer_img a:link
-{
-    color: white;
-}
-
-.footer_img a:hover
-{
-    color: white;
-}
-
-.footer_img a:visited
-{
-    color: white;
-}
-
-
-#home_links
-{
-    line-height: 150%
-}
-
-#search_form_div {
-    text-align: center;
-    padding: 10px;
-    margin: 10px 10px;
-    margin-bottom: 30px;
-    background-color:#ececec;
-    border: 1px solid #7E7E7E
-}
-
-#search_form ul {
-	list-style-type: none;
-	margin: 0;
-	padding: 0;
-}
-
-#search_form ul li {
-	display: inline;
-}
-
-#toolbar {
-	margin-top: 2px;
-	margin-bottom: 2px;
-	border-bottom: 2px solid #707070;
-	padding-top : 0px;
-	padding-bottom : 0px;
-}
-#toolbar ul{
-	padding-left : 0px;
-	padding-right : 0px;
-	padding-top : 0px;
-	padding-bottom : 0px;
-	margin-left : 0px;
-	margin-right : 0px;
-	margin-top: 5px;
-	margin-bottom: 5px;
-}
-#toolbar ul li{
-	display: inline;
-	padding-left : 10px;
-	padding-right : 10px;
-	padding-top : 0px;
-	padding-bottom : 0px;
-}
-
-#inner_content {
-	padding: 5px 0px 50px 0px;
-}
-
-#loginstate {
-	text-align: right;
-}
-
-.projectscontentstitle {
-	color: #949494;
-	font-family: Verdana;
-	font-weight: lighter;
-	font-size: 2.0em;
-	font-style: normal;
-	text-align: left;
-}
-
-
-#loginstate a, #loginstate a:hover, #loginstate a:visited, #loginstate a:link, #loginstate a:active {
-    color:#0063DC;
-    margin-right:4px;
-    text-decoration:none;
-}
-
-#loginstate a:hover{
-    text-decoration: underline;
-}
-
-#loginstate ul {
-    margin:0;
-    padding:0;
-    float: left;
-}
-#loginstate li{
-    display: inline;
-    padding:0;
-    margin:0;
-}
-#loginstate #user{
-    color: #000000;
-    font-weight: bold;
-    margin-right:4px;
-}
-#loginstate ul .usertool a,
-#loginstate ul .usertool a:link, 
-#loginstate ul .usertool a:visited {
-    color:#0063DC;
-    text-decoration:none;
-}
-
-#loginstate ul .usertool a:hover {
-    color:#0063DC;
-    text-decoration:underline;
-}
-
-.errorlist
-{
-    color: red;
-    font-size:12px;
-}
-
-tr.hdabooddline {
-	background: #d8d8d8;
-	/*background: #d6d7f6;*/
-}
-tr.hdaboevenline {
-	background: white;
-	/*background: #e6e6e6;*/
-}
-tr.hdabooddline:hover, tr.hdaboevenline:hover {
-	background: lightblue;
-	/*background: #e6e6e6;*/
-}
-
-tr.hdabosimpleoddline {
-	background: #e4e4e4;
-	/*background: #d6d7f6;*/
-}
-tr.hdabosimpleevenline {
-	background: white;
-	/*background: #e6e6e6;*/
-}
-
-#count_nav_top,
-#count_nav_bottom {
-	text-align: right;
-}
-#count_nav_bottom p,
-#count_nav_top p {
-	font-size: 12px;
-	font-weight : bold;
-}
-
-#tag_table {
-	width: 100%;
-	border-spacing: 0px;
-}
-#tag_table td, th {
-	/*border: thin solid #6495ed;*/
-	padding: 3px;
-}
-.updown_td {
-	width: 12px;
-}
-
-.sheet_title {
-	font-size: 14px;
-}
-
-.complete_sheet {
-	margin-left: 5px;
-	margin-right: 5px;
-}
-.left_sheet {
-	width: 38%;
-	float: left;
-}
-.left_sheet p {
-	margin-bottom: 5px;
-}
-.right_sheet {
-	width: 60%;
-	/*margin-left: 5px;*/
-	float: right;
-}
-
-.large_25 {
-	width: 25px;
-}
-.text_centered {
-	text-align: center;
-}
-.hand_cursor, .reset_wp_info, .remove_wp_link, .remove_tag_from_list {
-	cursor: pointer;
-}
-.updown_td {
-	cursor: n-resize;
-}
-
-tr.dragged_row td {
-    color: yellow;
-    background-color: black;
-}
-
-#all_tags_table {
-	min-width: 600px;
-	border-spacing: 0px;
-}
-#all_tags_table td, th {
-	/*border: thin solid #6495ed;*/
-	padding: 3px;
-}
-
-/* styles for the 4 types of STATUS*/
-.null_result {
-	color: #000000;
-}
-.redirection {
-	color: #0000ff;
-    font-weight: bold;
-    font-style: italic;
-}
-.homonyme {
-	color: #000000;
-    font-weight: bold;
-}
-.match {
-	color: #0000ff;
-    font-weight: bold;
-}
-
-#tags_actions span {
-	margin-left: 5px;
-}
-
-#loginform_div {
-	margin-left: 10px;
-}
-
-#login_fields_list, #submitcontent-buttons-login {
-	margin: 10px 0px;
-}
-
-#search_results {
-	margin-left: 10px;
-}
-
-.result_counter {
-	color: #C6C6C6;
-}
-
-#search_prev_next {
-	margin-top: 20px;
-}
-
-#page_number {
-	text-align: right;
-}
\ No newline at end of file
Binary file web/hdabo/static/hdabo/img/arrow_green_right.png has changed
Binary file web/hdabo/static/hdabo/img/arrow_right.png has changed
Binary file web/hdabo/static/hdabo/img/arrow_up_down.png has changed
Binary file web/hdabo/static/hdabo/img/clock_arrow.png has changed
Binary file web/hdabo/static/hdabo/img/favicon.ico has changed
Binary file web/hdabo/static/hdabo/img/indicator.gif has changed
Binary file web/hdabo/static/hdabo/img/logo_IRI_footer.png has changed
Binary file web/hdabo/static/hdabo/img/red_cross.png has changed
Binary file web/hdabo/static/hdabo/img/sort-asc.png has changed
Binary file web/hdabo/static/hdabo/img/sort-desc.png has changed
Binary file web/hdabo/static/hdabo/img/sort-descending.png has changed
Binary file web/hdabo/static/hdabo/img/tag_remove.png has changed
Binary file web/hdabo/static/hdabo/img/wikipedia_search.png has changed
--- a/web/hdabo/static/hdabo/js/hdabo.js	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,366 +0,0 @@
-// -*- coding: utf-8 -*-
-function init_tags_events()
-{
-    // Tag simple operations : activate/unactivate wp link, reset wp info, remove wp link, remove tag from list
-    $(".reset_wp_info").click(function(e){
-        if(confirm("Confirmez-vous le rétablissement du label original de ce tag ?")){
-            update_tag(this);
-        }
-    });
-    $(".remove_wp_link").click(function(e){
-        if(confirm("Confirmez-vous le suppression du lien Wikipédia pour le tag \"" + $(this).attr('alt') + "\" ?")){
-            update_tag(this);
-        }
-    });
-    $(".remove_tag_from_list").click(function(){
-        if(confirm("Confirmez-vous la suppression du tag \"" + $(this).attr('alt') + "\" de la liste courante ?")){
-            update_tag(this);
-        }
-    });
-    
-    // Wikipedia search management (autocompletion and save changes)
-    $.editable.addInputType('autocomplete', {
-    	element : $.editable.types.text.element,
-    	plugin : function(settings, original) {
-    		$('input', this).autocomplete(settings.autocomplete);
-    	}
-    });
-    $(".wikipediatag").editable(modify_tag_url, { 
-    	indicator : "<img src='"+static_url+"hdabo/img/indicator.gif'>",
-    	type      : "autocomplete",
-    	tooltip   : "Cliquer pour éditer...",
-    	onblur    : "submit",
-    	submitdata: {
-            csrfmiddlewaretoken:global_csrf_token, 
-            datasheet_id:$('#datasheet_id').val(),
-            num_page:$('#num_page').val(),
-            nb_by_page:$('#nb_by_page').val(),
-            sort:$('#sort').val(),
-            searched:$('#searched_str').val()
-        },
-    	callback  : function(value, settings) {
-            $('#tag_table_container').html(value);
-            init_tags_events();
-    	},
-		onerror: function(settings, original, jqXHR) {
-			resp = $.parseJSON(jqXHR.responseText);
-			alert(resp.message);
-			original.reset();
-		},
-    	autocomplete : {
-			source: function( request, response ) {
-				$.ajax({
-					url: "http://fr.wikipedia.org/w/api.php",
-					dataType: "jsonp",
-					data: {
-						action: "opensearch",
-						limit: "20",
-						namespace: "0",
-						format: "json",
-						search: request.term
-					},
-					success: function( data ) {
-						response( $.map( data[1], function( item ) {
-							return {
-								label: item,
-								value: item
-							}
-						}));
-					}
-				});
-			},
-			minLength: 2,
-			open: function() {
-				$( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
-			},
-			close: function() {
-				$( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
-			}
-    	}
-    });
-    
-    // Update alias management
-    $(".tag_alias").editable(update_tag_alias_url, {
-    	indicator : "<img src='"+static_url+"hdabo/img/indicator.gif'>",
-    	type      : "text",
-    	placeholder:"",
-    	tooltip   : "Cliquer pour éditer...",
-    	onblur    : "submit",
-    	submitdata: {
-            csrfmiddlewaretoken:global_csrf_token, 
-            datasheet_id:$('#datasheet_id').val(),
-            num_page:$('#num_page').val(),
-            nb_by_page:$('#nb_by_page').val(),
-            sort:$('#sort').val(),
-            searched:$('#searched_str').val()
-        },
-    	callback  : function(value, settings) {
-            $('#tag_table_container').html(value);
-            init_tags_events();
-    	}
-    });
-    
-    // Tag categories management
-    $(".tag_category").editable(update_tag_category_url, {
-    	indicator : "<img src='"+static_url+"hdabo/img/indicator.gif'>",
-    	type      : "select",
-        data      : categories_list,
-    	placeholder:"",
-    	tooltip   : "Cliquer pour éditer...",
-    	onblur    : "submit",
-    	submitdata: {
-            csrfmiddlewaretoken:global_csrf_token,
-            datasheet_id:$('#datasheet_id').val(),
-            num_page:$('#num_page').val(),
-            nb_by_page:$('#nb_by_page').val(),
-            sort:$('#sort').val(),
-            searched:$('#searched_str').val()
-        },
-    	callback  : function(value, settings) {
-            $('#tag_table_container').html(value);
-            init_tags_events();
-    	}
-    });
-    
-    // Tag table drag and drop
-    $("#tag_table").tableDnD({
-        onDragClass: "dragged_row",
-        onDrop: function(table, row){
-            old_order = row.id;
-            $($(row).children()[1]).html("<img src='"+static_url+"hdabo/img/indicator.gif'/>");
-            rows = table.tBodies[0].rows;
-            nb_rows = rows.length;
-            for(var i=1; i<nb_rows; i++){
-                if(rows[i].id==old_order){
-                    new_order = i; // No need to +1 because rows[0] are headers
-                    $.ajax({
-                        url: tag_up_down_url,
-                        type: 'POST',
-                        data: {csrfmiddlewaretoken:global_csrf_token, 
-                               datasheet_id:$('#datasheet_id').val(),
-                               new_order:new_order,
-                               old_order:old_order
-                               },
-                        // bug with jquery >= 1.5, "json" adds a callback so we don't specify dataType
-                        //dataType: 'json',
-                        success: function(msg, textStatus, XMLHttpRequest) {
-                            $('#tag_table_container').html(msg);
-                            init_tags_events();
-                        }
-                    });
-                }
-            }
-        },
-        dragHandle: "updown_td"
-    });
-}
-
-function init_datasheet_events()
-{
-    var select_done = false;
-    // Wikipedia search management (new tag)
-    $("#wp_search").autocomplete({
-        source: function( request, response ) {
-            $.ajax({
-                url: "http://fr.wikipedia.org/w/api.php",
-                dataType: "jsonp",
-                data: {
-                    action: "opensearch",
-                    limit: "20",
-                    namespace: "0",
-                    format: "json",
-                    search: request.term
-                },
-                success: function( data ) {
-                    response( $.map( data[1], function( item ) {
-                        return {
-                            label: item,
-                            value: item
-                        }
-                    }));
-                }
-            });
-        },
-        select: function(event, ui) { 
-            // Since the event still did not update wp_search's val, we force it.
-            $("#wp_search").val(ui.item.label);
-            select_done = true;
-            $("#ok_search").click();
-        },
-        minLength: 2,
-        open: function() {
-            $( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
-        },
-        close: function() {
-            $( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
-        }
-    });
-    $('#wp_search').keyup(function(e){
-        if((e.keyCode==13) && ($("#wp_search").val()!="") && (select_done==false)){
-            add_tag($("#wp_search").val());
-        }
-        select_done = false;
-    });
-    $("#ok_search").click(function(){
-        if($("#wp_search").val()!=""){
-            add_tag($("#wp_search").val());
-        }
-    });
-    $("#tags_sort").click(function(e){
-    	 e.preventDefault();
-    	if(confirm("Confirmez-vous le tri des tags ?")) {
-    		reorder_tags();
-    	}
-    });
-    // Validate sheet management : the radiobutton name has is "'gr_validated' + datasheet.hda_id"
-    $("#validated").click(function(e){
-        e.preventDefault();
-        // We count the number of tags. It has to be between 5 and 25
-        var nb_tags = $('#tag_table tr').length - 1;
-        if(nb_tags<5 || nb_tags>25){
-            alert("Cette fiche n'est pas validable : elle doit contenir entre 5 et 25 tags.");
-        }
-        else{
-            if(confirm("Confirmez-vous la validation de cette fiche ? Elle contient " + nb_tags + " tags.")){
-                window.location = validate_datasheet_url + "/" + $('#datasheet_id').val() + "/true";
-            }
-        }
-    });
-    $("#not_validated").click(function(e){
-        e.preventDefault();
-        if(confirm("Confirmez-vous l'invalidation de cette fiche ?")){
-            window.location = validate_datasheet_url + "/" + $('#datasheet_id').val() + "/false";
-        }
-    });
-}
-
-function update_tag(btn)
-{
-    new_checked = false;
-    if ($(btn).is(".remove_tag_from_list")) {
-        var url = remove_tag_from_list_url;
-        var id_tag = $(btn).attr('id');
-    }
-    else if ($(btn).is(".reset_wp_info")) {
-        var url = reset_wp_info_url;
-        var id_tag = $(btn).html();
-        $(btn).html("<img src='"+static_url+"hdabo/img/indicator.gif'>");
-    }
-    else if ($(btn).is(".remove_wp_link")) {
-        var url = remove_wp_link_url;
-        var id_tag = $(btn).attr('id');
-    }
-    
-    // 2 cases : 
-    // - ordered tag for one datasheet : $('#datasheet_id') is not null
-    // - all tags list : $('#datasheet_id') is null and $('#num_page') and $('#nb_by_page') are not null
-    $.ajax({
-        url: url,
-        type: 'POST',
-        data: {csrfmiddlewaretoken:global_csrf_token, 
-               datasheet_id:$('#datasheet_id').val(),
-               num_page:$('#num_page').val(),
-               nb_by_page:$('#nb_by_page').val(),
-               sort:$('#sort').val(),
-               searched:$('#searched_str').val(),
-               tag_id:id_tag,
-               activated:new_checked
-               },
-        // bug with jquery >= 1.5, "json" adds a callback so we don't specify dataType
-        //dataType: 'json',
-        success: function(msg, textStatus, XMLHttpRequest) {
-            $('#tag_table_container').html(msg);
-            init_tags_events();
-        },
-		error: function(jqXHR, textStatus, errorThrown) {
-			resp = $.parseJSON(jqXHR.responseText);
-			alert(resp.message);
-			$(btn).html(id_tag);
-		}
-    });
-}
-
-function tag_up_down(arrow)
-{
-    if ($(arrow).is(".up")) {
-        mv = "u";
-    } else {
-        mv = "d";
-    }
-    var url = tag_up_down_url;
-    var id_tag = $(arrow).attr('id');
-    // This indicates the position (from 0) of the tag in the list. NB : it is different from the TagSheet.order in the database.
-    var pos_tag = $(arrow).attr('pos');
-    $.ajax({
-        url: url,
-        type: 'POST',
-        data: {csrfmiddlewaretoken:global_csrf_token, 
-               datasheet_id:$('#datasheet_id').val(),
-               tag_id:id_tag,
-               move:mv,
-               tag_pos:pos_tag
-               },
-        // bug with jquery >= 1.5, "json" adds a callback so we don't specify dataType
-        //dataType: 'json',
-        success: function(msg, textStatus, XMLHttpRequest) {
-            $('#tag_table_container').html(msg);
-            init_tags_events();
-        }
-    });
-}
-
-function add_tag(tag_label)
-{
-    $("#ok_search").html("<img src='"+static_url+"hdabo/img/indicator.gif'>");
-    var url = add_tag_url;
-    $.ajax({
-        url: url,
-        type: 'POST',
-        data: {csrfmiddlewaretoken:global_csrf_token,
-               datasheet_id:$('#datasheet_id').val(),
-               value:tag_label
-               },
-        // bug with jquery >= 1.5, "json" adds a callback so we don't specify dataType
-        //dataType: 'json',
-        success: function(msg, textStatus, XMLHttpRequest) {
-            $('#tag_table_container').html(msg);
-            init_tags_events();
-            // And scroll to the bottom
-            $("html").animate({ scrollTop: $(document).height() }, 500);
-        },
-        error: function(jqXHR, textStatus, errorThrown) {
-			resp = $.parseJSON(jqXHR.responseText);
-			alert(resp.message);
-        },
-        complete: function(){
-            // We empty the input and hide the ok button
-            $("#wp_search").val("");
-            $("#ok_search").html("<b>OK</b>");
-        }
-    });
-}
-
-function reorder_tags() {
-	$('#tags_sort').attr("disabled", "disabled");
-	var tag_sort_old_src = $("#tags_sort").attr("src");
-	$("#tags_sort").attr("src",static_url+"hdabo/img/indicator.gif");
-	$.ajax({
-		url: reorder_tag_datasheet_url,
-		type: 'POST',
-		data: {
-			csrfmiddlewaretoken:global_csrf_token,
-            datasheet_id:$('#datasheet_id').val()
-		},
-        success: function(msg, textStatus, XMLHttpRequest) {
-            $('#tag_table_container').html(msg);
-            init_tags_events();
-            // And scroll to the bottom
-            $("html").animate({ scrollTop: $(document).height() }, 500);
-        },
-        complete: function(){
-        	$("#tags_sort").attr("src",tag_sort_old_src);
-        	$('#tags_sort').removeAttr("disabled");
-        }
-	});
-}
-
--- a/web/hdabo/static/hdabo/js/jquery-ui.min.js	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,784 +0,0 @@
-/*!
- * jQuery UI 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI
- */
-(function(c,j){function k(a,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.13",
-keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();
-b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,
-"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",
-function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth,
-outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a,"tabindex"),d=isNaN(b);
-return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=
-0;e<b.length;e++)a.options[b[e][0]]&&b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&c.ui.isOverAxis(b,e,i)}})}})(jQuery);
-;/*!
- * jQuery UI Widget 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Widget
- */
-(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)b(d).triggerHandler("remove");k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,
-a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.charAt(0)==="_")return h;
-e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=b.extend(true,{},this.options,
-this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},
-widget:function(){return this.element},option:function(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},
-enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
-;/*!
- * jQuery UI Mouse 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Mouse
- *
- * Depends:
- *	jquery.ui.widget.js
- */
-(function(b){var d=false;b(document).mousedown(function(){d=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(c){return a._mouseDown(c)}).bind("click."+this.widgetName,function(c){if(true===b.data(c.target,a.widgetName+".preventClickEvent")){b.removeData(c.target,a.widgetName+".preventClickEvent");c.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+
-this.widgetName)},_mouseDown:function(a){if(!d){this._mouseStarted&&this._mouseUp(a);this._mouseDownEvent=a;var c=this,f=a.which==1,g=typeof this.options.cancel=="string"?b(a.target).parents().add(a.target).filter(this.options.cancel).length:false;if(!f||g||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){c.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=
-this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault();return true}}true===b.data(a.target,this.widgetName+".preventClickEvent")&&b.removeData(a.target,this.widgetName+".preventClickEvent");this._mouseMoveDelegate=function(e){return c._mouseMove(e)};this._mouseUpDelegate=function(e){return c._mouseUp(e)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);a.preventDefault();return d=true}},_mouseMove:function(a){if(b.browser.msie&&
-!(document.documentMode>=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=
-false;a.target==this._mouseDownEvent.target&&b.data(a.target,this.widgetName+".preventClickEvent",true);this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
-;/*
- * jQuery UI Position 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Position
- */
-(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY,
-left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+=
-k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-=
-m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left=
-d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+=
-a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b),
-g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery);
-;/*
- * jQuery UI Draggable 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Draggables
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.mouse.js
- *	jquery.ui.widget.js
- */
-(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper==
-"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b=
-this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;d(b.iframeFix===true?"iframe":b.iframeFix).each(function(){d('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")});return true},_mouseStart:function(a){var b=this.options;this.helper=
-this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});
-this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions();d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);return true},_mouseDrag:function(a,b){this.position=this._generatePosition(a);
-this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b=false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=
-d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&this.options.revert.call(this.element,b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",
-a)!==false&&this._clear();return false},_mouseUp:function(a){this.options.iframeFix===true&&d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});return d.ui.mouse.prototype._mouseUp.call(this,a)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle||!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==
-a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone().removeAttr("id"):this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&&a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a=
-{left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&
-d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=
-this.element.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions=
-{width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[(a.containment=="document"?0:d(window).scrollLeft())-this.offset.relative.left-this.offset.parent.left,(a.containment=="document"?0:d(window).scrollTop())-this.offset.relative.top-this.offset.parent.top,(a.containment=="document"?0:d(window).scrollLeft())+
-d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a.containment=="document"?0:d(window).scrollTop())+(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&a.containment.constructor!=Array){a=d(a.containment);var b=a[0];if(b){a.offset();var c=d(b).css("overflow")!="hidden";this.containment=[(parseInt(d(b).css("borderLeftWidth"),
-10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0),(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0),(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-
-this.margins.top-this.margins.bottom];this.relative_container=a}}else if(a.containment.constructor==Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&
-d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],
-this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,h=a.pageY;if(this.originalPosition){var g;if(this.containment){if(this.relative_container){g=this.relative_container.offset();g=[this.containment[0]+g.left,this.containment[1]+g.top,this.containment[2]+g.left,this.containment[3]+g.top]}else g=this.containment;if(a.pageX-this.offset.click.left<g[0])e=g[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<g[1])h=g[1]+this.offset.click.top;
-if(a.pageX-this.offset.click.left>g[2])e=g[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>g[3])h=g[3]+this.offset.click.top}if(b.grid){h=this.originalPageY+Math.round((h-this.originalPageY)/b.grid[1])*b.grid[1];h=g?!(h-this.offset.click.top<g[1]||h-this.offset.click.top>g[3])?h:!(h-this.offset.click.top<g[1])?h-b.grid[1]:h+b.grid[1]:h;e=this.originalPageX+Math.round((e-this.originalPageX)/b.grid[0])*b.grid[0];e=g?!(e-this.offset.click.left<g[0]||e-this.offset.click.left>g[2])?e:!(e-this.offset.click.left<
-g[0])?e-b.grid[0]:e+b.grid[0]:e}}return{top:h-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop()),left:e-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");
-this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(a,b,c){c=c||this._uiHash();d.ui.plugin.call(this,a,[b,c]);if(a=="drag")this.positionAbs=this._convertPositionTo("absolute");return d.Widget.prototype._trigger.call(this,a,b,c)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});d.extend(d.ui.draggable,{version:"1.8.13"});
-d.ui.plugin.add("draggable","connectToSortable",{start:function(a,b){var c=d(this).data("draggable"),f=c.options,e=d.extend({},b,{item:c.element});c.sortables=[];d(f.connectToSortable).each(function(){var h=d.data(this,"sortable");if(h&&!h.options.disabled){c.sortables.push({instance:h,shouldRevert:h.options.revert});h.refreshPositions();h._trigger("activate",a,e)}})},stop:function(a,b){var c=d(this).data("draggable"),f=d.extend({},b,{item:c.element});d.each(c.sortables,function(){if(this.instance.isOver){this.instance.isOver=
-0;c.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(a);this.instance.options.helper=this.instance.options._helper;c.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval=false;this.instance._trigger("deactivate",a,f)}})},drag:function(a,b){var c=d(this).data("draggable"),f=this;d.each(c.sortables,function(){this.instance.positionAbs=
-c.positionAbs;this.instance.helperProportions=c.helperProportions;this.instance.offset.click=c.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=d(f).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",true);this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return b.helper[0]};a.target=this.instance.currentItem[0];this.instance._mouseCapture(a,
-true);this.instance._mouseStart(a,true,true);this.instance.offset.click.top=c.offset.click.top;this.instance.offset.click.left=c.offset.click.left;this.instance.offset.parent.left-=c.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=c.offset.parent.top-this.instance.offset.parent.top;c._trigger("toSortable",a);c.dropped=this.instance.element;c.currentItem=c.element;this.instance.fromOutside=c}this.instance.currentItem&&this.instance._mouseDrag(a)}else if(this.instance.isOver){this.instance.isOver=
-0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",a,this.instance._uiHash(this.instance));this.instance._mouseStop(a,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&&this.instance.placeholder.remove();c._trigger("fromSortable",a);c.dropped=false}})}});d.ui.plugin.add("draggable","cursor",{start:function(){var a=d("body"),b=d(this).data("draggable").options;if(a.css("cursor"))b._cursor=
-a.css("cursor");a.css("cursor",b.cursor)},stop:function(){var a=d(this).data("draggable").options;a._cursor&&d("body").css("cursor",a._cursor)}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("opacity"))b._opacity=a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");
-if(a.scrollParent[0]!=document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){if(!c.axis||c.axis!="x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop+c.scrollSpeed;else if(a.pageY-b.overflowOffset.top<c.scrollSensitivity)b.scrollParent[0].scrollTop=
-f=b.scrollParent[0].scrollTop-c.scrollSpeed;if(!c.axis||c.axis!="y")if(b.overflowOffset.left+b.scrollParent[0].offsetWidth-a.pageX<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft+c.scrollSpeed;else if(a.pageX-b.overflowOffset.left<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft-c.scrollSpeed}else{if(!c.axis||c.axis!="x")if(a.pageY-d(document).scrollTop()<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()-c.scrollSpeed);
-else if(d(window).height()-(a.pageY-d(document).scrollTop())<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()+c.scrollSpeed);if(!c.axis||c.axis!="y")if(a.pageX-d(document).scrollLeft()<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()-c.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()+c.scrollSpeed)}f!==false&&d.ui.ddmanager&&!c.dropBehaviour&&d.ui.ddmanager.prepareOffsets(b,
-a)}});d.ui.plugin.add("draggable","snap",{start:function(){var a=d(this).data("draggable"),b=a.options;a.snapElements=[];d(b.snap.constructor!=String?b.snap.items||":data(draggable)":b.snap).each(function(){var c=d(this),f=c.offset();this!=a.element[0]&&a.snapElements.push({item:this,width:c.outerWidth(),height:c.outerHeight(),top:f.top,left:f.left})})},drag:function(a,b){for(var c=d(this).data("draggable"),f=c.options,e=f.snapTolerance,h=b.offset.left,g=h+c.helperProportions.width,n=b.offset.top,
-o=n+c.helperProportions.height,i=c.snapElements.length-1;i>=0;i--){var j=c.snapElements[i].left,l=j+c.snapElements[i].width,k=c.snapElements[i].top,m=k+c.snapElements[i].height;if(j-e<h&&h<l+e&&k-e<n&&n<m+e||j-e<h&&h<l+e&&k-e<o&&o<m+e||j-e<g&&g<l+e&&k-e<n&&n<m+e||j-e<g&&g<l+e&&k-e<o&&o<m+e){if(f.snapMode!="inner"){var p=Math.abs(k-o)<=e,q=Math.abs(m-n)<=e,r=Math.abs(j-g)<=e,s=Math.abs(l-h)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k-c.helperProportions.height,left:0}).top-c.margins.top;
-if(q)b.position.top=c._convertPositionTo("relative",{top:m,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j-c.helperProportions.width}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l}).left-c.margins.left}var t=p||q||r||s;if(f.snapMode!="outer"){p=Math.abs(k-n)<=e;q=Math.abs(m-o)<=e;r=Math.abs(j-h)<=e;s=Math.abs(l-g)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k,left:0}).top-c.margins.top;if(q)b.position.top=
-c._convertPositionTo("relative",{top:m-c.helperProportions.height,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l-c.helperProportions.width}).left-c.margins.left}if(!c.snapElements[i].snapping&&(p||q||r||s||t))c.options.snap.snap&&c.options.snap.snap.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=p||q||r||s||t}else{c.snapElements[i].snapping&&
-c.options.snap.release&&c.options.snap.release.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=false}}}});d.ui.plugin.add("draggable","stack",{start:function(){var a=d(this).data("draggable").options;a=d.makeArray(d(a.stack)).sort(function(c,f){return(parseInt(d(c).css("zIndex"),10)||0)-(parseInt(d(f).css("zIndex"),10)||0)});if(a.length){var b=parseInt(a[0].style.zIndex)||0;d(a).each(function(c){this.style.zIndex=b+c});this[0].style.zIndex=b+a.length}}});
-d.ui.plugin.add("draggable","zIndex",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("zIndex"))b._zIndex=a.css("zIndex");a.css("zIndex",b.zIndex)},stop:function(a,b){a=d(this).data("draggable").options;a._zIndex&&d(b.helper).css("zIndex",a._zIndex)}})})(jQuery);
-;/*
- * jQuery UI Droppable 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Droppables
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.widget.js
- *	jquery.ui.mouse.js
- *	jquery.ui.draggable.js
- */
-(function(d){d.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"},_create:function(){var a=this.options,b=a.accept;this.isover=0;this.isout=1;this.accept=d.isFunction(b)?b:function(c){return c.is(b)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};d.ui.ddmanager.droppables[a.scope]=d.ui.ddmanager.droppables[a.scope]||[];d.ui.ddmanager.droppables[a.scope].push(this);
-a.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var a=d.ui.ddmanager.droppables[this.options.scope],b=0;b<a.length;b++)a[b]==this&&a.splice(b,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(a,b){if(a=="accept")this.accept=d.isFunction(b)?b:function(c){return c.is(b)};d.Widget.prototype._setOption.apply(this,arguments)},_activate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&
-this.element.addClass(this.options.activeClass);b&&this._trigger("activate",a,this.ui(b))},_deactivate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);b&&this._trigger("deactivate",a,this.ui(b))},_over:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.addClass(this.options.hoverClass);
-this._trigger("over",a,this.ui(b))}},_out:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("out",a,this.ui(b))}},_drop:function(a,b){var c=b||d.ui.ddmanager.current;if(!c||(c.currentItem||c.element)[0]==this.element[0])return false;var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var g=
-d.data(this,"droppable");if(g.options.greedy&&!g.options.disabled&&g.options.scope==c.options.scope&&g.accept.call(g.element[0],c.currentItem||c.element)&&d.ui.intersect(c,d.extend(g,{offset:g.element.offset()}),g.options.tolerance)){e=true;return false}});if(e)return false;if(this.accept.call(this.element[0],c.currentItem||c.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass);this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("drop",
-a,this.ui(c));return this.element}return false},ui:function(a){return{draggable:a.currentItem||a.element,helper:a.helper,position:a.position,offset:a.positionAbs}}});d.extend(d.ui.droppable,{version:"1.8.13"});d.ui.intersect=function(a,b,c){if(!b.offset)return false;var e=(a.positionAbs||a.position.absolute).left,g=e+a.helperProportions.width,f=(a.positionAbs||a.position.absolute).top,h=f+a.helperProportions.height,i=b.offset.left,k=i+b.proportions.width,j=b.offset.top,l=j+b.proportions.height;
-switch(c){case "fit":return i<=e&&g<=k&&j<=f&&h<=l;case "intersect":return i<e+a.helperProportions.width/2&&g-a.helperProportions.width/2<k&&j<f+a.helperProportions.height/2&&h-a.helperProportions.height/2<l;case "pointer":return d.ui.isOver((a.positionAbs||a.position.absolute).top+(a.clickOffset||a.offset.click).top,(a.positionAbs||a.position.absolute).left+(a.clickOffset||a.offset.click).left,j,i,b.proportions.height,b.proportions.width);case "touch":return(f>=j&&f<=l||h>=j&&h<=l||f<j&&h>l)&&(e>=
-i&&e<=k||g>=i&&g<=k||e<i&&g>k);default:return false}};d.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,b){var c=d.ui.ddmanager.droppables[a.options.scope]||[],e=b?b.type:null,g=(a.currentItem||a.element).find(":data(droppable)").andSelf(),f=0;a:for(;f<c.length;f++)if(!(c[f].options.disabled||a&&!c[f].accept.call(c[f].element[0],a.currentItem||a.element))){for(var h=0;h<g.length;h++)if(g[h]==c[f].element[0]){c[f].proportions.height=0;continue a}c[f].visible=c[f].element.css("display")!=
-"none";if(c[f].visible){e=="mousedown"&&c[f]._activate.call(c[f],b);c[f].offset=c[f].element.offset();c[f].proportions={width:c[f].element[0].offsetWidth,height:c[f].element[0].offsetHeight}}}},drop:function(a,b){var c=false;d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(this.options){if(!this.options.disabled&&this.visible&&d.ui.intersect(a,this,this.options.tolerance))c=c||this._drop.call(this,b);if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],a.currentItem||
-a.element)){this.isout=1;this.isover=0;this._deactivate.call(this,b)}}});return c},drag:function(a,b){a.options.refreshPositions&&d.ui.ddmanager.prepareOffsets(a,b);d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var c=d.ui.intersect(a,this,this.options.tolerance);if(c=!c&&this.isover==1?"isout":c&&this.isover==0?"isover":null){var e;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");if(g.length){e=
-d.data(g[0],"droppable");e.greedyChild=c=="isover"?1:0}}if(e&&c=="isover"){e.isover=0;e.isout=1;e._out.call(e,b)}this[c]=1;this[c=="isout"?"isover":"isout"]=0;this[c=="isover"?"_over":"_out"].call(this,b);if(e&&c=="isout"){e.isout=0;e.isover=1;e._over.call(e,b)}}}})}}})(jQuery);
-;/*
- * jQuery UI Resizable 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Resizables
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.mouse.js
- *	jquery.ui.widget.js
- */
-(function(e){e.widget("ui.resizable",e.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var b=this,a=this.options;this.element.addClass("ui-resizable");e.extend(this,{_aspectRatio:!!a.aspectRatio,aspectRatio:a.aspectRatio,originalElement:this.element,
-_proportionallyResizeElements:[],_helper:a.helper||a.ghost||a.animate?a.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&e.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(e('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),
-top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=
-this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=a.handles||(!e(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",
-nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var d=0;d<c.length;d++){var f=e.trim(c[d]),g=e('<div class="ui-resizable-handle '+("ui-resizable-"+f)+'"></div>');/sw|se|ne|nw/.test(f)&&g.css({zIndex:++a.zIndex});"se"==f&&g.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[f]=".ui-resizable-"+f;this.element.append(g)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor==
-String)this.handles[i]=e(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=e(this.handles[i],this.element),k=0;k=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,k);this._proportionallyResize()}e(this.handles[i])}};this._renderAxis(this.element);this._handles=e(".ui-resizable-handle",this.element).disableSelection();
-this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();e(this.element).addClass("ui-resizable-autohide").hover(function(){if(!a.disabled){e(this).removeClass("ui-resizable-autohide");b._handles.show()}},function(){if(!a.disabled)if(!b.resizing){e(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();
-var b=function(c){e(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a=
-false;for(var c in this.handles)if(e(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:e(document).scrollTop(),left:e(document).scrollLeft()};if(d.is(".ui-draggable")||/absolute/.test(d.css("position")))d.css({position:"absolute",top:c.top,left:c.left});e.browser.opera&&/relative/.test(d.css("position"))&&d.css({position:"relative",top:"auto",left:"auto"});
-this._renderProxy();c=m(this.helper.css("left"));var f=m(this.helper.css("top"));if(a.containment){c+=e(a.containment).scrollLeft()||0;f+=e(a.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:c,top:f};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:c,top:f};this.sizeDiff=
-{width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio:this.originalSize.width/this.originalSize.height||1;a=e(".ui-resizable-"+this.axis).css("cursor");e("body").css("cursor",a=="auto"?this.axis+"-resize":a);d.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,d=this._change[this.axis];
-if(!d)return false;c=d.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize",b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false},_mouseStop:function(b){this.resizing=
-false;var a=this.options,c=this;if(this._helper){var d=this._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName);d=f&&e.ui.hasScroll(d[0],"left")?0:c.sizeDiff.height;f=f?0:c.sizeDiff.width;f={width:c.helper.width()-f,height:c.helper.height()-d};d=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var g=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(e.extend(f,{top:g,left:d}));c.helper.height(c.size.height);
-c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}e("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",b);this._helper&&this.helper.remove();return false},_updateCache:function(b){this.offset=this.helper.offset();if(l(b.left))this.position.left=b.left;if(l(b.top))this.position.top=b.top;if(l(b.height))this.size.height=b.height;if(l(b.width))this.size.width=b.width},_updateRatio:function(b){var a=this.position,c=this.size,
-d=this.axis;if(b.height)b.width=c.height*this.aspectRatio;else if(b.width)b.height=c.width/this.aspectRatio;if(d=="sw"){b.left=a.left+(c.width-b.width);b.top=null}if(d=="nw"){b.top=a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this.options,c=this.axis,d=l(b.width)&&a.maxWidth&&a.maxWidth<b.width,f=l(b.height)&&a.maxHeight&&a.maxHeight<b.height,g=l(b.width)&&a.minWidth&&a.minWidth>b.width,h=l(b.height)&&a.minHeight&&a.minHeight>b.height;if(g)b.width=
-a.minWidth;if(h)b.height=a.minHeight;if(d)b.width=a.maxWidth;if(f)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+this.size.height,k=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(g&&k)b.left=i-a.minWidth;if(d&&k)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(f&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left=null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=
-this.helper||this.element,a=0;a<this._proportionallyResizeElements.length;a++){var c=this._proportionallyResizeElements[a];if(!this.borderDif){var d=[c.css("borderTopWidth"),c.css("borderRightWidth"),c.css("borderBottomWidth"),c.css("borderLeftWidth")],f=[c.css("paddingTop"),c.css("paddingRight"),c.css("paddingBottom"),c.css("paddingLeft")];this.borderDif=e.map(d,function(g,h){g=parseInt(g,10)||0;h=parseInt(f[h],10)||0;return g+h})}e.browser.msie&&(e(b).is(":hidden")||e(b).parents(":hidden").length)||
-c.css({height:b.height()-this.borderDif[0]-this.borderDif[2]||0,width:b.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var b=this.options;this.elementOffset=this.element.offset();if(this._helper){this.helper=this.helper||e('<div style="overflow:hidden;"></div>');var a=e.browser.msie&&e.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-
-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,a){return{width:this.originalSize.width+a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+c}},se:function(b,a,c){return e.extend(this._change.s.apply(this,
-arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a,c]))},ne:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){e.ui.plugin.call(this,b,[a,this.ui()]);b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,
-element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});e.extend(e.ui.resizable,{version:"1.8.13"});e.ui.plugin.add("resizable","alsoResize",{start:function(){var b=e(this).data("resizable").options,a=function(c){e(c).each(function(){var d=e(this);d.data("resizable-alsoresize",{width:parseInt(d.width(),10),height:parseInt(d.height(),10),left:parseInt(d.css("left"),10),top:parseInt(d.css("top"),10),position:d.css("position")})})};
-if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize=b.alsoResize[0];a(b.alsoResize)}else e.each(b.alsoResize,function(c){a(c)});else a(b.alsoResize)},resize:function(b,a){var c=e(this).data("resizable");b=c.options;var d=c.originalSize,f=c.originalPosition,g={height:c.size.height-d.height||0,width:c.size.width-d.width||0,top:c.position.top-f.top||0,left:c.position.left-f.left||0},h=function(i,j){e(i).each(function(){var k=e(this),q=e(this).data("resizable-alsoresize"),
-p={},r=j&&j.length?j:k.parents(a.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(r,function(n,o){if((n=(q[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(e.browser.opera&&/relative/.test(k.css("position"))){c._revertToRelativePosition=true;k.css({position:"absolute",top:"auto",left:"auto"})}k.css(p)})};typeof b.alsoResize=="object"&&!b.alsoResize.nodeType?e.each(b.alsoResize,function(i,j){h(i,j)}):h(b.alsoResize)},stop:function(){var b=e(this).data("resizable"),a=b.options,
-c=function(d){e(d).each(function(){var f=e(this);f.css({position:f.data("resizable-alsoresize").position})})};if(b._revertToRelativePosition){b._revertToRelativePosition=false;typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?e.each(a.alsoResize,function(d){c(d)}):c(a.alsoResize)}e(this).removeData("resizable-alsoresize")}});e.ui.plugin.add("resizable","animate",{stop:function(b){var a=e(this).data("resizable"),c=a.options,d=a._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName),
-g=f&&e.ui.hasScroll(d[0],"left")?0:a.sizeDiff.height;f={width:a.size.width-(f?0:a.sizeDiff.width),height:a.size.height-g};g=parseInt(a.element.css("left"),10)+(a.position.left-a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(e.extend(f,h&&g?{top:h,left:g}:{}),{duration:c.animateDuration,easing:c.animateEasing,step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),
-10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};d&&d.length&&e(d[0]).css({width:i.width,height:i.height});a._updateCache(i);a._propagate("resize",b)}})}});e.ui.plugin.add("resizable","containment",{start:function(){var b=e(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof e?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement=e(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,
-top:0};b.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}}else{var d=e(a),f=[];e(["Top","Right","Left","Bottom"]).each(function(i,j){f[i]=m(d.css("padding"+j))});b.containerOffset=d.offset();b.containerPosition=d.position();b.containerSize={height:d.innerHeight()-f[3],width:d.innerWidth()-f[1]};c=b.containerOffset;var g=b.containerSize.height,h=b.containerSize.width;h=e.ui.hasScroll(a,"left")?a.scrollWidth:h;
-g=e.ui.hasScroll(a)?a.scrollHeight:g;b.parentData={element:a,left:c.left,top:c.top,width:h,height:g}}}},resize:function(b){var a=e(this).data("resizable"),c=a.options,d=a.containerOffset,f=a.position;b=a._aspectRatio||b.shiftKey;var g={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))g=d;if(f.left<(a._helper?d.left:0)){a.size.width+=a._helper?a.position.left-d.left:a.position.left-g.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?d.left:
-0}if(f.top<(a._helper?d.top:0)){a.size.height+=a._helper?a.position.top-d.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper?d.top:0}a.offset.left=a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-g.left:a.offset.left-g.left)+a.sizeDiff.width);d=Math.abs((a._helper?a.offset.top-g.top:a.offset.top-d.top)+a.sizeDiff.height);f=a.containerElement.get(0)==a.element.parent().get(0);g=/relative|absolute/.test(a.containerElement.css("position"));
-if(f&&g)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height=a.size.width/a.aspectRatio}if(d+a.size.height>=a.parentData.height){a.size.height=a.parentData.height-d;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=e(this).data("resizable"),a=b.options,c=b.containerOffset,d=b.containerPosition,f=b.containerElement,g=e(b.helper),h=g.offset(),i=g.outerWidth()-b.sizeDiff.width;g=g.outerHeight()-b.sizeDiff.height;b._helper&&
-!a.animate&&/relative/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g});b._helper&&!a.animate&&/static/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g})}});e.ui.plugin.add("resizable","ghost",{start:function(){var b=e(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25,display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost==
-"string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=e(this).data("resizable");b.ghost&&b.ghost.css({position:"relative",height:b.size.height,width:b.size.width})},stop:function(){var b=e(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});e.ui.plugin.add("resizable","grid",{resize:function(){var b=e(this).data("resizable"),a=b.options,c=b.size,d=b.originalSize,f=b.originalPosition,g=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;
-var h=Math.round((c.width-d.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-d.height)/(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else if(/^(ne)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}else{if(/^(sw)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else{b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}b.position.left=f.left-h}}});var m=function(b){return parseInt(b,
-10)||0},l=function(b){return!isNaN(parseInt(b,10))}})(jQuery);
-;/*
- * jQuery UI Selectable 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Selectables
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.mouse.js
- *	jquery.ui.widget.js
- */
-(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(c.options.filter,c.element[0]);f.each(function(){var d=e(this),b=d.offset();e.data(this,"selectable-item",{element:this,$element:d,left:b.left,top:b.top,right:b.left+d.outerWidth(),bottom:b.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"),
-selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX,
-c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting");b.unselecting=true;f._trigger("unselecting",
-c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f=this;this.dragged=true;if(!this.options.disabled){var d=
-this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.right<b||a.top>i||a.bottom<g);else if(d.tolerance=="fit")k=a.left>b&&a.right<h&&a.top>g&&a.bottom<i;if(k){if(a.selected){a.$element.removeClass("ui-selected");a.selected=false}if(a.unselecting){a.$element.removeClass("ui-unselecting");
-a.unselecting=false}if(!a.selecting){a.$element.addClass("ui-selecting");a.selecting=true;f._trigger("selecting",c,{selecting:a.element})}}else{if(a.selecting)if(c.metaKey&&a.startselected){a.$element.removeClass("ui-selecting");a.selecting=false;a.$element.addClass("ui-selected");a.selected=true}else{a.$element.removeClass("ui-selecting");a.selecting=false;if(a.startselected){a.$element.addClass("ui-unselecting");a.unselecting=true}f._trigger("unselecting",c,{unselecting:a.element})}if(a.selected)if(!c.metaKey&&
-!a.startselected){a.$element.removeClass("ui-selected");a.selected=false;a.$element.addClass("ui-unselecting");a.unselecting=true;f._trigger("unselecting",c,{unselecting:a.element})}}}});return false}},_mouseStop:function(c){var f=this;this.dragged=false;e(".ui-unselecting",this.element[0]).each(function(){var d=e.data(this,"selectable-item");d.$element.removeClass("ui-unselecting");d.unselecting=false;d.startselected=false;f._trigger("unselected",c,{unselected:d.element})});e(".ui-selecting",this.element[0]).each(function(){var d=
-e.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected");d.selecting=false;d.selected=true;d.startselected=true;f._trigger("selected",c,{selected:d.element})});this._trigger("stop",c);this.helper.remove();return false}});e.extend(e.ui.selectable,{version:"1.8.13"})})(jQuery);
-;/*
- * jQuery UI Sortable 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Sortables
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.mouse.js
- *	jquery.ui.widget.js
- */
-(function(d){d.widget("ui.sortable",d.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){var a=this.options;this.containerCache={};this.element.addClass("ui-sortable");
-this.refresh();this.floating=this.items.length?a.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData("sortable-item");return this},_setOption:function(a,b){if(a===
-"disabled"){this.options[a]=b;this.widget()[b?"addClass":"removeClass"]("ui-sortable-disabled")}else d.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(a,b){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(a);var c=null,e=this;d(a.target).parents().each(function(){if(d.data(this,"sortable-item")==e){c=d(this);return false}});if(d.data(a.target,"sortable-item")==e)c=d(a.target);if(!c)return false;if(this.options.handle&&
-!b){var f=false;d(this.options.handle,c).find("*").andSelf().each(function(){if(this==a.target)f=true});if(!f)return false}this.currentItem=c;this._removeCurrentsFromItems();return true},_mouseStart:function(a,b,c){b=this.options;var e=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,
-left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};
-this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();b.containment&&this._setContainment();if(b.cursor){if(d("body").css("cursor"))this._storedCursor=d("body").css("cursor");d("body").css("cursor",b.cursor)}if(b.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",b.opacity)}if(b.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",b.zIndex)}if(this.scrollParent[0]!=
-document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",a,e._uiHash(this));if(d.ui.ddmanager)d.ui.ddmanager.current=this;d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a);
-return true},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var b=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageY<b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop+b.scrollSpeed;else if(a.pageY-this.overflowOffset.top<
-b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop-b.scrollSpeed;if(this.overflowOffset.left+this.scrollParent[0].offsetWidth-a.pageX<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft+b.scrollSpeed;else if(a.pageX-this.overflowOffset.left<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft-b.scrollSpeed}else{if(a.pageY-d(document).scrollTop()<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()-
-b.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()+b.scrollSpeed);if(a.pageX-d(document).scrollLeft()<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()-b.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()+b.scrollSpeed)}c!==false&&d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,
-a)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(b=this.items.length-1;b>=0;b--){c=this.items[b];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!d.ui.contains(this.placeholder[0],e)&&(this.options.type=="semi-dynamic"?!d.ui.contains(this.element[0],
-e):true)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(a,c);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(a,b){if(a){d.ui.ddmanager&&!this.options.dropBehaviour&&d.ui.ddmanager.drop(this,a);if(this.options.revert){var c=this;b=c.placeholder.offset();
-c.reverting=true;d(this.helper).animate({left:b.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:b.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(a)})}else this._clear(a,b);return false}},cancel:function(){var a=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):
-this.currentItem.show();for(var b=this.containers.length-1;b>=0;b--){this.containers[b]._trigger("deactivate",null,a._uiHash(this));if(this.containers[b].containerCache.over){this.containers[b]._trigger("out",null,a._uiHash(this));this.containers[b].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();d.extend(this,{helper:null,
-dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?d(this.domPosition.prev).after(this.currentItem):d(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};d(b).each(function(){var e=(d(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);if(e)c.push((a.key||e[1]+"[]")+"="+(a.key&&a.expression?e[1]:e[2]))});!c.length&&a.key&&c.push(a.key+"=");return c.join("&")},
-toArray:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};b.each(function(){c.push(d(a.item||this).attr(a.attribute||"id")||"")});return c},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,g=a.left,h=g+a.width,i=a.top,k=i+a.height,j=this.offset.click.top,l=this.offset.click.left;j=e+j>i&&e+j<k&&b+l>g&&b+l<h;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||
-this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>a[this.floating?"width":"height"]?j:g<b+this.helperProportions.width/2&&c-this.helperProportions.width/2<h&&i<e+this.helperProportions.height/2&&f-this.helperProportions.height/2<k},_intersectsWithPointer:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left,a.width);b=b&&a;a=this._getDragVerticalDirection();
-var c=this._getDragHorizontalDirection();if(!b)return false;return this.floating?c&&c=="right"||a=="down"?2:1:a&&(a=="down"?2:1)},_intersectsWithSides:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top+a.height/2,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left+a.width/2,a.width);var c=this._getDragVerticalDirection(),e=this._getDragHorizontalDirection();return this.floating&&e?e=="right"&&a||e=="left"&&!a:c&&(c=="down"&&b||c=="up"&&!b)},
-_getDragVerticalDirection:function(){var a=this.positionAbs.top-this.lastPositionAbs.top;return a!=0&&(a>0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a);this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(a){var b=[],c=[],e=this._connectWith();
-if(e&&a)for(a=e.length-1;a>=0;a--)for(var f=d(e[a]),g=f.length-1;g>=0;g--){var h=d.data(f[g],"sortable");if(h&&h!=this&&!h.options.disabled)c.push([d.isFunction(h.options.items)?h.options.items.call(h.element):d(h.options.items,h.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),h])}c.push([d.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):d(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),
-this]);for(a=c.length-1;a>=0;a--)c[a][0].each(function(){b.push(this)});return d(b)},_removeCurrentsFromItems:function(){for(var a=this.currentItem.find(":data(sortable-item)"),b=0;b<this.items.length;b++)for(var c=0;c<a.length;c++)a[c]==this.items[b].item[0]&&this.items.splice(b,1)},_refreshItems:function(a){this.items=[];this.containers=[this];var b=this.items,c=[[d.isFunction(this.options.items)?this.options.items.call(this.element[0],a,{item:this.currentItem}):d(this.options.items,this.element),
-this]],e=this._connectWith();if(e)for(var f=e.length-1;f>=0;f--)for(var g=d(e[f]),h=g.length-1;h>=0;h--){var i=d.data(g[h],"sortable");if(i&&i!=this&&!i.options.disabled){c.push([d.isFunction(i.options.items)?i.options.items.call(i.element[0],a,{item:this.currentItem}):d(i.options.items,i.element),i]);this.containers.push(i)}}for(f=c.length-1;f>=0;f--){a=c[f][1];e=c[f][0];h=0;for(g=e.length;h<g;h++){i=d(e[h]);i.data("sortable-item",a);b.push({item:i,instance:a,width:0,height:0,left:0,top:0})}}},refreshPositions:function(a){if(this.offsetParent&&
-this.helper)this.offset.parent=this._getParentOffset();for(var b=this.items.length-1;b>=0;b--){var c=this.items[b];if(!(c.instance!=this.currentContainer&&this.currentContainer&&c.item[0]!=this.currentItem[0])){var e=this.options.toleranceElement?d(this.options.toleranceElement,c.item):c.item;if(!a){c.width=e.outerWidth();c.height=e.outerHeight()}e=e.offset();c.left=e.left;c.top=e.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(b=
-this.containers.length-1;b>=0;b--){e=this.containers[b].element.offset();this.containers[b].containerCache.left=e.left;this.containers[b].containerCache.top=e.top;this.containers[b].containerCache.width=this.containers[b].element.outerWidth();this.containers[b].containerCache.height=this.containers[b].element.outerHeight()}return this},_createPlaceholder:function(a){var b=a||this,c=b.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f=
-d(document.createElement(b.currentItem[0].nodeName)).addClass(e||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!e)f.style.visibility="hidden";return f},update:function(f,g){if(!(e&&!c.forcePlaceholderSize)){g.height()||g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10));g.width()||g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||
-0,10))}}}}b.placeholder=d(c.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);c.placeholder.update(b,b.placeholder)},_contactContainers:function(a){for(var b=null,c=null,e=this.containers.length-1;e>=0;e--)if(!d.ui.contains(this.currentItem[0],this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(b&&d.ui.contains(this.containers[e].element[0],b.element[0]))){b=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out",
-a,this._uiHash(this));this.containers[e].containerCache.over=0}if(b)if(this.containers.length===1){this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){b=1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],g=this.items.length-1;g>=0;g--)if(d.ui.contains(this.containers[c].element[0],this.items[g].item[0])){var h=this.items[g][this.containers[c].floating?"left":"top"];if(Math.abs(h-
-f)<b){b=Math.abs(h-f);e=this.items[g]}}if(e||this.options.dropOnEmpty){this.currentContainer=this.containers[c];e?this._rearrange(a,e,null,true):this._rearrange(a,null,this.containers[c].element,true);this._trigger("change",a,this._uiHash());this.containers[c]._trigger("change",a,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder);this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}}},_createHelper:function(a){var b=
-this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a,this.currentItem])):b.helper=="clone"?this.currentItem.clone():this.currentItem;a.parents("body").length||d(b.appendTo!="parent"?b.appendTo:this.currentItem[0].parentNode)[0].appendChild(a[0]);if(a[0]==this.currentItem[0])this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")};if(a[0].style.width==
-""||b.forceHelperSize)a.width(this.currentItem.width());if(a[0].style.height==""||b.forceHelperSize)a.height(this.currentItem.height());return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=
-this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a=
-{top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.currentItem.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),
-10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,d(a.containment=="document"?
-document:window).width()-this.helperProportions.width-this.margins.left,(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)){var b=d(a.containment)[0];a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"),
-10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(a,b){if(!b)b=
-this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&
-this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0]))this.offset.relative=this._getRelativeOffset();
-var f=a.pageX,g=a.pageY;if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.left<this.containment[0])f=this.containment[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<this.containment[1])g=this.containment[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>this.containment[2])f=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-
-this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:!(g-this.offset.click.top<this.containment[1])?g-b.grid[1]:g+b.grid[1]:g;f=this.originalPageX+Math.round((f-this.originalPageX)/b.grid[0])*b.grid[0];f=this.containment?!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:!(f-this.offset.click.left<this.containment[0])?f-b.grid[0]:f+b.grid[0]:f}}return{top:g-
-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())}},_rearrange:function(a,b,c,e){c?c[0].appendChild(this.placeholder[0]):b.item[0].parentNode.insertBefore(this.placeholder[0],
-this.direction=="down"?b.item[0]:b.item[0].nextSibling);this.counter=this.counter?++this.counter:1;var f=this,g=this.counter;window.setTimeout(function(){g==f.counter&&f.refreshPositions(!e)},0)},_clear:function(a,b){this.reverting=false;var c=[];!this._noFinalSort&&this.currentItem[0].parentNode&&this.placeholder.before(this.currentItem);this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var e in this._storedCSS)if(this._storedCSS[e]=="auto"||this._storedCSS[e]=="static")this._storedCSS[e]=
-"";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!b&&c.push(function(f){this._trigger("receive",f,this._uiHash(this.fromOutside))});if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!b)c.push(function(f){this._trigger("update",f,this._uiHash())});if(!d.ui.contains(this.element[0],this.currentItem[0])){b||c.push(function(f){this._trigger("remove",
-f,this._uiHash())});for(e=this.containers.length-1;e>=0;e--)if(d.ui.contains(this.containers[e].element[0],this.currentItem[0])&&!b){c.push(function(f){return function(g){f._trigger("receive",g,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(g){f._trigger("update",g,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){b||c.push(function(f){return function(g){f._trigger("deactivate",g,this._uiHash(this))}}.call(this,
-this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out",g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop",
-a,this._uiHash());for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}return false}b||this._trigger("beforeStop",a,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!b){for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){d.Widget.prototype._trigger.apply(this,arguments)===false&&this.cancel()},
-_uiHash:function(a){var b=a||this;return{helper:b.helper,placeholder:b.placeholder||d([]),position:b.position,originalPosition:b.originalPosition,offset:b.positionAbs,item:b.currentItem,sender:a?a.element:null}}});d.extend(d.ui.sortable,{version:"1.8.13"})})(jQuery);
-;/*
- * jQuery UI Accordion 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Accordion
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.widget.js
- */
-(function(c){c.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var a=this,b=a.options;a.running=0;a.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix");
-a.headers=a.element.find(b.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){b.disabled||c(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){b.disabled||c(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){b.disabled||c(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){b.disabled||c(this).removeClass("ui-state-focus")});a.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");
-if(b.navigation){var d=a.element.find("a").filter(b.navigationFilter).eq(0);if(d.length){var h=d.closest(".ui-accordion-header");a.active=h.length?h:d.closest(".ui-accordion-content").prev()}}a.active=a._findActive(a.active||b.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");a.active.next().addClass("ui-accordion-content-active");a._createIcons();a.resize();a.element.attr("role","tablist");a.headers.attr("role","tab").bind("keydown.accordion",
-function(f){return a._keydown(f)}).next().attr("role","tabpanel");a.headers.not(a.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide();a.active.length?a.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):a.headers.eq(0).attr("tabIndex",0);c.browser.safari||a.headers.find("a").attr("tabIndex",-1);b.event&&a.headers.bind(b.event.split(" ").join(".accordion ")+".accordion",function(f){a._clickHandler.call(a,f,this);f.preventDefault()})},_createIcons:function(){var a=
-this.options;if(a.icons){c("<span></span>").addClass("ui-icon "+a.icons.header).prependTo(this.headers);this.active.children(".ui-icon").toggleClass(a.icons.header).toggleClass(a.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var a=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex");
-this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(a.autoHeight||a.fillHeight)b.css("height","");return c.Widget.prototype.destroy.call(this)},_setOption:function(a,b){c.Widget.prototype._setOption.apply(this,arguments);a=="active"&&this.activate(b);if(a=="icons"){this._destroyIcons();
-b&&this._createIcons()}if(a=="disabled")this.headers.add(this.headers.next())[b?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(a){if(!(this.options.disabled||a.altKey||a.ctrlKey)){var b=c.ui.keyCode,d=this.headers.length,h=this.headers.index(a.target),f=false;switch(a.keyCode){case b.RIGHT:case b.DOWN:f=this.headers[(h+1)%d];break;case b.LEFT:case b.UP:f=this.headers[(h-1+d)%d];break;case b.SPACE:case b.ENTER:this._clickHandler({target:a.target},a.target);
-a.preventDefault()}if(f){c(a.target).attr("tabIndex",-1);c(f).attr("tabIndex",0);f.focus();return false}return true}},resize:function(){var a=this.options,b;if(a.fillSpace){if(c.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}b=this.element.parent().height();c.browser.msie&&this.element.parent().css("overflow",d);this.headers.each(function(){b-=c(this).outerHeight(true)});this.headers.next().each(function(){c(this).height(Math.max(0,b-c(this).innerHeight()+
-c(this).height()))}).css("overflow","auto")}else if(a.autoHeight){b=0;this.headers.next().each(function(){b=Math.max(b,c(this).height("").height())}).height(b)}return this},activate:function(a){this.options.active=a;a=this._findActive(a)[0];this._clickHandler({target:a},a);return this},_findActive:function(a){return a?typeof a==="number"?this.headers.filter(":eq("+a+")"):this.headers.not(this.headers.not(a)):a===false?c([]):this.headers.filter(":eq(0)")},_clickHandler:function(a,b){var d=this.options;
-if(!d.disabled)if(a.target){a=c(a.currentTarget||b);b=a[0]===this.active[0];d.active=d.collapsible&&b?false:this.headers.index(a);if(!(this.running||!d.collapsible&&b)){var h=this.active;j=a.next();g=this.active.next();e={options:d,newHeader:b&&d.collapsible?c([]):a,oldHeader:this.active,newContent:b&&d.collapsible?c([]):j,oldContent:g};var f=this.headers.index(this.active[0])>this.headers.index(a[0]);this.active=b?c([]):a;this._toggle(j,g,e,b,f);h.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);
-if(!b){a.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);a.next().addClass("ui-accordion-content-active")}}}else if(d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");var g=this.active.next(),
-e={options:d,newHeader:c([]),oldHeader:d.active,newContent:c([]),oldContent:g},j=this.active=c([]);this._toggle(j,g,e)}},_toggle:function(a,b,d,h,f){var g=this,e=g.options;g.toShow=a;g.toHide=b;g.data=d;var j=function(){if(g)return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data);g.running=b.size()===0?a.size():b.size();if(e.animated){d={};d=e.collapsible&&h?{toShow:c([]),toHide:b,complete:j,down:f,autoHeight:e.autoHeight||e.fillSpace}:{toShow:a,toHide:b,complete:j,down:f,autoHeight:e.autoHeight||
-e.fillSpace};if(!e.proxied)e.proxied=e.animated;if(!e.proxiedDuration)e.proxiedDuration=e.duration;e.animated=c.isFunction(e.proxied)?e.proxied(d):e.proxied;e.duration=c.isFunction(e.proxiedDuration)?e.proxiedDuration(d):e.proxiedDuration;h=c.ui.accordion.animations;var i=e.duration,k=e.animated;if(k&&!h[k]&&!c.easing[k])k="slide";h[k]||(h[k]=function(l){this.slide(l,{easing:k,duration:i||700})});h[k](d)}else{if(e.collapsible&&h)a.toggle();else{b.hide();a.show()}j(true)}b.prev().attr({"aria-expanded":"false",
-"aria-selected":"false",tabIndex:-1}).blur();a.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");if(this.toHide.length)this.toHide.parent()[0].className=this.toHide.parent()[0].className;this._trigger("change",null,this.data)}}});c.extend(c.ui.accordion,{version:"1.8.13",
-animations:{slide:function(a,b){a=c.extend({easing:"swing",duration:300},a,b);if(a.toHide.size())if(a.toShow.size()){var d=a.toShow.css("overflow"),h=0,f={},g={},e;b=a.toShow;e=b[0].style.width;b.width(parseInt(b.parent().width(),10)-parseInt(b.css("paddingLeft"),10)-parseInt(b.css("paddingRight"),10)-(parseInt(b.css("borderLeftWidth"),10)||0)-(parseInt(b.css("borderRightWidth"),10)||0));c.each(["height","paddingTop","paddingBottom"],function(j,i){g[i]="hide";j=(""+c.css(a.toShow[0],i)).match(/^([\d+-.]+)(.*)$/);
-f[i]={value:j[1],unit:j[2]||"px"}});a.toShow.css({height:0,overflow:"hidden"}).show();a.toHide.filter(":hidden").each(a.complete).end().filter(":visible").animate(g,{step:function(j,i){if(i.prop=="height")h=i.end-i.start===0?0:(i.now-i.start)/(i.end-i.start);a.toShow[0].style[i.prop]=h*f[i.prop].value+f[i.prop].unit},duration:a.duration,easing:a.easing,complete:function(){a.autoHeight||a.toShow.css("height","");a.toShow.css({width:e,overflow:d});a.complete()}})}else a.toHide.animate({height:"hide",
-paddingTop:"hide",paddingBottom:"hide"},a);else a.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},a)},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1E3:200})}}})})(jQuery);
-;/*
- * jQuery UI Autocomplete 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Autocomplete
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.widget.js
- *	jquery.ui.position.js
- */
-(function(d){var e=0;d.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var a=this,b=this.element[0].ownerDocument,g;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!(a.options.disabled||a.element.attr("readonly"))){g=
-false;var f=d.ui.keyCode;switch(c.keyCode){case f.PAGE_UP:a._move("previousPage",c);break;case f.PAGE_DOWN:a._move("nextPage",c);break;case f.UP:a._move("previous",c);c.preventDefault();break;case f.DOWN:a._move("next",c);c.preventDefault();break;case f.ENTER:case f.NUMPAD_ENTER:if(a.menu.active){g=true;c.preventDefault()}case f.TAB:if(!a.menu.active)return;a.menu.select(c);break;case f.ESCAPE:a.element.val(a.term);a.close(c);break;default:clearTimeout(a.searching);a.searching=setTimeout(function(){if(a.term!=
-a.element.val()){a.selectedItem=null;a.search(null,c)}},a.options.delay);break}}}).bind("keypress.autocomplete",function(c){if(g){g=false;c.preventDefault()}}).bind("focus.autocomplete",function(){if(!a.options.disabled){a.selectedItem=null;a.previous=a.element.val()}}).bind("blur.autocomplete",function(c){if(!a.options.disabled){clearTimeout(a.searching);a.closing=setTimeout(function(){a.close(c);a._change(c)},150)}});this._initSource();this.response=function(){return a._response.apply(a,arguments)};
-this.menu=d("<ul></ul>").addClass("ui-autocomplete").appendTo(d(this.options.appendTo||"body",b)[0]).mousedown(function(c){var f=a.menu.element[0];d(c.target).closest(".ui-menu-item").length||setTimeout(function(){d(document).one("mousedown",function(h){h.target!==a.element[0]&&h.target!==f&&!d.ui.contains(f,h.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,f){f=f.item.data("item.autocomplete");false!==a._trigger("focus",c,{item:f})&&/^key/.test(c.originalEvent.type)&&
-a.element.val(f.value)},selected:function(c,f){var h=f.item.data("item.autocomplete"),i=a.previous;if(a.element[0]!==b.activeElement){a.element.focus();a.previous=i;setTimeout(function(){a.previous=i;a.selectedItem=h},1)}false!==a._trigger("select",c,{item:h})&&a.element.val(h.value);a.term=a.element.val();a.close(c);a.selectedItem=h},blur:function(){a.menu.element.is(":visible")&&a.element.val()!==a.term&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");
-d.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();d.Widget.prototype.destroy.call(this)},_setOption:function(a,b){d.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource();if(a==="appendTo")this.menu.element.appendTo(d(b||"body",this.element[0].ownerDocument)[0]);a==="disabled"&&
-b&&this.xhr&&this.xhr.abort()},_initSource:function(){var a=this,b,g;if(d.isArray(this.options.source)){b=this.options.source;this.source=function(c,f){f(d.ui.autocomplete.filter(b,c.term))}}else if(typeof this.options.source==="string"){g=this.options.source;this.source=function(c,f){a.xhr&&a.xhr.abort();a.xhr=d.ajax({url:g,data:c,dataType:"json",autocompleteRequest:++e,success:function(h){this.autocompleteRequest===e&&f(h)},error:function(){this.autocompleteRequest===e&&f([])}})}}else this.source=
-this.options.source},search:function(a,b){a=a!=null?a:this.element.val();this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search",b)!==false)return this._search(a)},_search:function(a){this.pending++;this.element.addClass("ui-autocomplete-loading");this.source({term:a},this.response)},_response:function(a){if(!this.options.disabled&&a&&a.length){a=this._normalize(a);this._suggest(a);this._trigger("open")}else this.close();
-this.pending--;this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(a){clearTimeout(this.closing);if(this.menu.element.is(":visible")){this.menu.element.hide();this.menu.deactivate();this._trigger("close",a)}},_change:function(a){this.previous!==this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(a){if(a.length&&a[0].label&&a[0].value)return a;return d.map(a,function(b){if(typeof b==="string")return{label:b,value:b};return d.extend({label:b.label||
-b.value,value:b.value||b.label},b)})},_suggest:function(a){var b=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(b,a);this.menu.deactivate();this.menu.refresh();b.show();this._resizeMenu();b.position(d.extend({of:this.element},this.options.position));this.options.autoFocus&&this.menu.next(new d.Event("mouseover"))},_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(a,b){var g=this;
-d.each(b,function(c,f){g._renderItem(a,f)})},_renderItem:function(a,b){return d("<li></li>").data("item.autocomplete",b).append(d("<a></a>").text(b.label)).appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);else this.search(null,b)},widget:function(){return this.menu.element}});d.extend(d.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,
-"\\$&")},filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i");return d.grep(a,function(c){return g.test(c.label||c.value||c)})}})})(jQuery);
-(function(d){d.widget("ui.menu",{_create:function(){var e=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(a){if(d(a.target).closest(".ui-menu-item a").length){a.preventDefault();e.select(a)}});this.refresh()},refresh:function(){var e=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex",
--1).mouseenter(function(a){e.activate(a,d(this).parent())}).mouseleave(function(){e.deactivate()})},activate:function(e,a){this.deactivate();if(this.hasScroll()){var b=a.offset().top-this.element.offset().top,g=this.element.scrollTop(),c=this.element.height();if(b<0)this.element.scrollTop(g+b);else b>=c&&this.element.scrollTop(g+b-c+a.height())}this.active=a.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",e,{item:a})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id");
-this._trigger("blur");this.active=null}},next:function(e){this.move("next",".ui-menu-item:first",e)},previous:function(e){this.move("prev",".ui-menu-item:last",e)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(e,a,b){if(this.active){e=this.active[e+"All"](".ui-menu-item").eq(0);e.length?this.activate(b,e):this.activate(b,this.element.children(a))}else this.activate(b,
-this.element.children(a))},nextPage:function(e){if(this.hasScroll())if(!this.active||this.last())this.activate(e,this.element.children(".ui-menu-item:first"));else{var a=this.active.offset().top,b=this.element.height(),g=this.element.children(".ui-menu-item").filter(function(){var c=d(this).offset().top-a-b+d(this).height();return c<10&&c>-10});g.length||(g=this.element.children(".ui-menu-item:last"));this.activate(e,g)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||
-this.last()?":first":":last"))},previousPage:function(e){if(this.hasScroll())if(!this.active||this.first())this.activate(e,this.element.children(".ui-menu-item:last"));else{var a=this.active.offset().top,b=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var g=d(this).offset().top-a+b-d(this).height();return g<10&&g>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(e,result)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||
-this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[d.fn.prop?"prop":"attr"]("scrollHeight")},select:function(e){this._trigger("selected",e,{item:this.active})}})})(jQuery);
-;/*
- * jQuery UI Button 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Button
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.widget.js
- */
-(function(a){var g,i=function(b){a(":ui-button",b.target.form).each(function(){var c=a(this).data("button");setTimeout(function(){c.refresh()},1)})},h=function(b){var c=b.name,d=b.form,f=a([]);if(c)f=d?a(d).find("[name='"+c+"']"):a("[name='"+c+"']",b.ownerDocument).filter(function(){return!this.form});return f};a.widget("ui.button",{options:{disabled:null,text:true,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",
-i);if(typeof this.options.disabled!=="boolean")this.options.disabled=this.element.attr("disabled");this._determineButtonType();this.hasTitle=!!this.buttonElement.attr("title");var b=this,c=this.options,d=this.type==="checkbox"||this.type==="radio",f="ui-state-hover"+(!d?" ui-state-active":"");if(c.label===null)c.label=this.buttonElement.html();if(this.element.is(":disabled"))c.disabled=true;this.buttonElement.addClass("ui-button ui-widget ui-state-default ui-corner-all").attr("role","button").bind("mouseenter.button",
-function(){if(!c.disabled){a(this).addClass("ui-state-hover");this===g&&a(this).addClass("ui-state-active")}}).bind("mouseleave.button",function(){c.disabled||a(this).removeClass(f)}).bind("focus.button",function(){a(this).addClass("ui-state-focus")}).bind("blur.button",function(){a(this).removeClass("ui-state-focus")}).bind("click.button",function(e){c.disabled&&e.stopImmediatePropagation()});d&&this.element.bind("change.button",function(){b.refresh()});if(this.type==="checkbox")this.buttonElement.bind("click.button",
-function(){if(c.disabled)return false;a(this).toggleClass("ui-state-active");b.buttonElement.attr("aria-pressed",b.element[0].checked)});else if(this.type==="radio")this.buttonElement.bind("click.button",function(){if(c.disabled)return false;a(this).addClass("ui-state-active");b.buttonElement.attr("aria-pressed",true);var e=b.element[0];h(e).not(e).map(function(){return a(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed",false)});else{this.buttonElement.bind("mousedown.button",
-function(){if(c.disabled)return false;a(this).addClass("ui-state-active");g=this;a(document).one("mouseup",function(){g=null})}).bind("mouseup.button",function(){if(c.disabled)return false;a(this).removeClass("ui-state-active")}).bind("keydown.button",function(e){if(c.disabled)return false;if(e.keyCode==a.ui.keyCode.SPACE||e.keyCode==a.ui.keyCode.ENTER)a(this).addClass("ui-state-active")}).bind("keyup.button",function(){a(this).removeClass("ui-state-active")});this.buttonElement.is("a")&&this.buttonElement.keyup(function(e){e.keyCode===
-a.ui.keyCode.SPACE&&a(this).click()})}this._setOption("disabled",c.disabled)},_determineButtonType:function(){this.type=this.element.is(":checkbox")?"checkbox":this.element.is(":radio")?"radio":this.element.is("input")?"input":"button";if(this.type==="checkbox"||this.type==="radio"){var b=this.element.parents().filter(":last"),c="label[for="+this.element.attr("id")+"]";this.buttonElement=b.find(c);if(!this.buttonElement.length){b=b.length?b.siblings():this.element.siblings();this.buttonElement=b.filter(c);
-if(!this.buttonElement.length)this.buttonElement=b.find(c)}this.element.addClass("ui-helper-hidden-accessible");(b=this.element.is(":checked"))&&this.buttonElement.addClass("ui-state-active");this.buttonElement.attr("aria-pressed",b)}else this.buttonElement=this.element},widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible");this.buttonElement.removeClass("ui-button ui-widget ui-state-default ui-corner-all ui-state-hover ui-state-active  ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only").removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html());
-this.hasTitle||this.buttonElement.removeAttr("title");a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments);if(b==="disabled")c?this.element.attr("disabled",true):this.element.removeAttr("disabled");this._resetButton()},refresh:function(){var b=this.element.is(":disabled");b!==this.options.disabled&&this._setOption("disabled",b);if(this.type==="radio")h(this.element[0]).each(function(){a(this).is(":checked")?a(this).button("widget").addClass("ui-state-active").attr("aria-pressed",
-true):a(this).button("widget").removeClass("ui-state-active").attr("aria-pressed",false)});else if(this.type==="checkbox")this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed",true):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed",false)},_resetButton:function(){if(this.type==="input")this.options.label&&this.element.val(this.options.label);else{var b=this.buttonElement.removeClass("ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only"),
-c=a("<span></span>").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,f=d.primary&&d.secondary,e=[];if(d.primary||d.secondary){if(this.options.text)e.push("ui-button-text-icon"+(f?"s":d.primary?"-primary":"-secondary"));d.primary&&b.prepend("<span class='ui-button-icon-primary ui-icon "+d.primary+"'></span>");d.secondary&&b.append("<span class='ui-button-icon-secondary ui-icon "+d.secondary+"'></span>");if(!this.options.text){e.push(f?"ui-button-icons-only":
-"ui-button-icon-only");this.hasTitle||b.attr("title",c)}}else e.push("ui-button-text-only");b.addClass(e.join(" "))}}});a.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c);a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass("ui-corner-left").end().filter(":last").addClass("ui-corner-right").end().end()},
-destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");a.Widget.prototype.destroy.call(this)}})})(jQuery);
-;/*
- * jQuery UI Dialog 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Dialog
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.widget.js
- *  jquery.ui.button.js
- *	jquery.ui.draggable.js
- *	jquery.ui.mouse.js
- *	jquery.ui.position.js
- *	jquery.ui.resizable.js
- */
-(function(c,l){var m={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},n={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true},o=c.attrFn||{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true,click:true};c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,
-position:{my:"center",at:"center",collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&&c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var a=this,b=a.options,d=b.title||"&#160;",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("<div></div>")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+
-b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),
-h=c('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);return false}).appendTo(f);(a.uiDialogTitlebarCloseText=c("<span></span>")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("<span></span>").addClass("ui-dialog-title").attr("id",
-e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;f.find("*").add(f).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");
-a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d,e;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!==
-b.uiDialog[0]){e=c(this).css("z-index");isNaN(e)||(d=Math.max(d,e))}});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=
-1;d.uiDialog.css("z-index",c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target===
-f[0]&&e.shiftKey){g.focus(1);return false}}});c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._isOpen=true;a._trigger("open");return a}},_createButtons:function(a){var b=this,d=false,e=c("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("<div></div>").addClass("ui-dialog-buttonset").appendTo(e);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,
-function(){return!(d=true)});if(d){c.each(a,function(f,h){h=c.isFunction(h)?{click:h,text:f}:h;var i=c('<button type="button"></button>').click(function(){h.click.apply(b.element[0],arguments)}).appendTo(g);c.each(h,function(j,k){if(j!=="click")j in o?i[j](k):i.attr(j,k)});c.fn.button&&i.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",
-handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",f,a(h))},drag:function(f,h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition,
-originalSize:f.originalSize,position:f.position,size:f.size}}a=a===l?this.options.resizable:a;var d=this,e=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:a,start:function(f,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",f,b(h))},resize:function(f,h){d._trigger("resize",
-f,b(h))},stop:function(f,h){c(this).removeClass("ui-dialog-resizing");e.height=c(this).height();e.width=c(this).width();d._trigger("resizeStop",f,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(a){var b=[],d=[0,0],e;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):
-[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(g,f){if(+b[g]===b[g]){d[g]=b[g];b[g]=f}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(e=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(c.extend({of:window},a));e||this.uiDialog.hide()},_setOptions:function(a){var b=this,d={},e=false;c.each(a,function(g,f){b._setOption(g,f);
-if(g in m)e=true;if(g in n)d[g]=f});e&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",d)},_setOption:function(a,b){var d=this,e=d.uiDialog;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"):
-e.removeClass("ui-dialog-disabled");break;case "draggable":var g=e.is(":data(draggable)");g&&!b&&e.draggable("destroy");!g&&b&&d._makeDraggable();break;case "position":d._position(b);break;case "resizable":(g=e.is(":data(resizable)"))&&!b&&e.resizable("destroy");g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||"&#160;"));break}c.Widget.prototype._setOption.apply(d,arguments)},_size:function(){var a=
-this.options,b,d,e=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();d=Math.max(0,a.minHeight-b);if(a.height==="auto")if(c.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();a=this.element.css("height","auto").height();e||this.uiDialog.hide();this.element.height(Math.max(a,d))}else this.element.height(Math.max(a.height-
-b,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.13",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),
-create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){if(c(d.target).zIndex()<c.ui.dialog.overlay.maxZ)return false})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||c("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),
-height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){var b=c.inArray(a,this.instances);b!=-1&&this.oldInstances.push(this.instances.splice(b,1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var d=0;c.each(this.instances,function(){d=Math.max(d,this.css("z-index"))});this.maxZ=d},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);
-b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a<b?c(window).height()+"px":a+"px"}else return c(document).height()+"px"},width:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);b=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return a<b?c(window).width()+"px":a+"px"}else return c(document).width()+"px"},resize:function(){var a=c([]);c.each(c.ui.dialog.overlay.instances,
-function(){a=a.add(this)});a.css({width:0,height:0}).css({width:c.ui.dialog.overlay.width(),height:c.ui.dialog.overlay.height()})}});c.extend(c.ui.dialog.overlay.prototype,{destroy:function(){c.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);
-;/*
- * jQuery UI Slider 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Slider
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.mouse.js
- *	jquery.ui.widget.js
- */
-(function(d){d.widget("ui.slider",d.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var b=this,a=this.options,c=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f=a.values&&a.values.length||1,e=[];this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+
-this.orientation+" ui-widget ui-widget-content ui-corner-all"+(a.disabled?" ui-slider-disabled ui-disabled":""));this.range=d([]);if(a.range){if(a.range===true){if(!a.values)a.values=[this._valueMin(),this._valueMin()];if(a.values.length&&a.values.length!==2)a.values=[a.values[0],a.values[0]]}this.range=d("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(a.range==="min"||a.range==="max"?" ui-slider-range-"+a.range:""))}for(var j=c.length;j<f;j+=1)e.push("<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>");
-this.handles=c.add(d(e.join("")).appendTo(b.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(g){g.preventDefault()}).hover(function(){a.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(a.disabled)d(this).blur();else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(g){d(this).data("index.ui-slider-handle",
-g)});this.handles.keydown(function(g){var k=true,l=d(this).data("index.ui-slider-handle"),i,h,m;if(!b.options.disabled){switch(g.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:k=false;if(!b._keySliding){b._keySliding=true;d(this).addClass("ui-state-active");i=b._start(g,l);if(i===false)return}break}m=b.options.step;i=b.options.values&&b.options.values.length?
-(h=b.values(l)):(h=b.value());switch(g.keyCode){case d.ui.keyCode.HOME:h=b._valueMin();break;case d.ui.keyCode.END:h=b._valueMax();break;case d.ui.keyCode.PAGE_UP:h=b._trimAlignValue(i+(b._valueMax()-b._valueMin())/5);break;case d.ui.keyCode.PAGE_DOWN:h=b._trimAlignValue(i-(b._valueMax()-b._valueMin())/5);break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(i===b._valueMax())return;h=b._trimAlignValue(i+m);break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(i===b._valueMin())return;h=b._trimAlignValue(i-
-m);break}b._slide(g,l,h);return k}}).keyup(function(g){var k=d(this).data("index.ui-slider-handle");if(b._keySliding){b._keySliding=false;b._stop(g,k);b._change(g,k);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy();
-return this},_mouseCapture:function(b){var a=this.options,c,f,e,j,g;if(a.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:b.pageX,y:b.pageY});f=this._valueMax()-this._valueMin()+1;j=this;this.handles.each(function(k){var l=Math.abs(c-j.values(k));if(f>l){f=l;e=d(this);g=k}});if(a.range===true&&this.values(1)===a.min){g+=1;e=d(this.handles[g])}if(this._start(b,g)===false)return false;
-this._mouseSliding=true;j._handleIndex=g;e.addClass("ui-state-active").focus();a=e.offset();this._clickOffset=!d(b.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:b.pageX-a.left-e.width()/2,top:b.pageY-a.top-e.height()/2-(parseInt(e.css("borderTopWidth"),10)||0)-(parseInt(e.css("borderBottomWidth"),10)||0)+(parseInt(e.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(b,g,c);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(b){var a=
-this._normValueFromMouse({x:b.pageX,y:b.pageY});this._slide(b,this._handleIndex,a);return false},_mouseStop:function(b){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(b,this._handleIndex);this._change(b,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(b){var a;if(this.orientation==="horizontal"){a=
-this.elementSize.width;b=b.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{a=this.elementSize.height;b=b.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}a=b/a;if(a>1)a=1;if(a<0)a=0;if(this.orientation==="vertical")a=1-a;b=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+a*b)},_start:function(b,a){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a);
-c.values=this.values()}return this._trigger("start",b,c)},_slide:function(b,a,c){var f;if(this.options.values&&this.options.values.length){f=this.values(a?0:1);if(this.options.values.length===2&&this.options.range===true&&(a===0&&c>f||a===1&&c<f))c=f;if(c!==this.values(a)){f=this.values();f[a]=c;b=this._trigger("slide",b,{handle:this.handles[a],value:c,values:f});this.values(a?0:1);b!==false&&this.values(a,c,true)}}else if(c!==this.value()){b=this._trigger("slide",b,{handle:this.handles[a],value:c});
-b!==false&&this.value(c)}},_stop:function(b,a){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a);c.values=this.values()}this._trigger("stop",b,c)},_change:function(b,a){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a);c.values=this.values()}this._trigger("change",b,c)}},value:function(b){if(arguments.length){this.options.value=
-this._trimAlignValue(b);this._refreshValue();this._change(null,0)}else return this._value()},values:function(b,a){var c,f,e;if(arguments.length>1){this.options.values[b]=this._trimAlignValue(a);this._refreshValue();this._change(null,b)}else if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;f=arguments[0];for(e=0;e<c.length;e+=1){c[e]=this._trimAlignValue(f[e]);this._change(null,e)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(b):
-this.value();else return this._values()},_setOption:function(b,a){var c,f=0;if(d.isArray(this.options.values))f=this.options.values.length;d.Widget.prototype._setOption.apply(this,arguments);switch(b){case "disabled":if(a){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.attr("disabled","disabled");this.element.addClass("ui-disabled")}else{this.handles.removeAttr("disabled");this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation();
-this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(c=0;c<f;c+=1)this._change(null,c);this._animateOff=false;break}},_value:function(){var b=this.options.value;return b=this._trimAlignValue(b)},_values:function(b){var a,c;if(arguments.length){a=this.options.values[b];
-return a=this._trimAlignValue(a)}else{a=this.options.values.slice();for(c=0;c<a.length;c+=1)a[c]=this._trimAlignValue(a[c]);return a}},_trimAlignValue:function(b){if(b<=this._valueMin())return this._valueMin();if(b>=this._valueMax())return this._valueMax();var a=this.options.step>0?this.options.step:1,c=(b-this._valueMin())%a;alignValue=b-c;if(Math.abs(c)*2>=a)alignValue+=c>0?a:-a;return parseFloat(alignValue.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},
-_refreshValue:function(){var b=this.options.range,a=this.options,c=this,f=!this._animateOff?a.animate:false,e,j={},g,k,l,i;if(this.options.values&&this.options.values.length)this.handles.each(function(h){e=(c.values(h)-c._valueMin())/(c._valueMax()-c._valueMin())*100;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";d(this).stop(1,1)[f?"animate":"css"](j,a.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(h===0)c.range.stop(1,1)[f?"animate":"css"]({left:e+"%"},a.animate);
-if(h===1)c.range[f?"animate":"css"]({width:e-g+"%"},{queue:false,duration:a.animate})}else{if(h===0)c.range.stop(1,1)[f?"animate":"css"]({bottom:e+"%"},a.animate);if(h===1)c.range[f?"animate":"css"]({height:e-g+"%"},{queue:false,duration:a.animate})}g=e});else{k=this.value();l=this._valueMin();i=this._valueMax();e=i!==l?(k-l)/(i-l)*100:0;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";this.handle.stop(1,1)[f?"animate":"css"](j,a.animate);if(b==="min"&&this.orientation==="horizontal")this.range.stop(1,
-1)[f?"animate":"css"]({width:e+"%"},a.animate);if(b==="max"&&this.orientation==="horizontal")this.range[f?"animate":"css"]({width:100-e+"%"},{queue:false,duration:a.animate});if(b==="min"&&this.orientation==="vertical")this.range.stop(1,1)[f?"animate":"css"]({height:e+"%"},a.animate);if(b==="max"&&this.orientation==="vertical")this.range[f?"animate":"css"]({height:100-e+"%"},{queue:false,duration:a.animate})}}});d.extend(d.ui.slider,{version:"1.8.13"})})(jQuery);
-;/*
- * jQuery UI Tabs 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Tabs
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.widget.js
- */
-(function(d,p){function u(){return++v}function w(){return++x}var v=0,x=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading&#8230;</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(true)},_setOption:function(b,e){if(b=="selected")this.options.collapsible&&
-e==this.options.selected||this.select(e);else{this.options[b]=e;this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+u()},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+w());return d.cookie.apply(null,[b].concat(d.makeArray(arguments)))},_ui:function(b,e){return{tab:b,panel:e,index:this.anchors.index(b)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=
-d(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(b){function e(g,f){g.css("display","");!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}var a=this,c=this.options,h=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=d(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);this.anchors.each(function(g,f){var i=d(f).attr("href"),l=i.split("#")[0],q;if(l&&(l===location.toString().split("#")[0]||
-(q=d("base")[0])&&l===q.href)){i=f.hash;f.href=i}if(h.test(i))a.panels=a.panels.add(a.element.find(a._sanitizeSelector(i)));else if(i&&i!=="#"){d.data(f,"href.tabs",i);d.data(f,"load.tabs",i.replace(/#.*$/,""));i=a._tabId(f);f.href="#"+i;f=a.element.find("#"+i);if(!f.length){f=d(c.panelTemplate).attr("id",i).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else c.disabled.push(g)});if(b){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");
-this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(c.selected===p){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){c.selected=g;return false}});if(typeof c.selected!=="number"&&c.cookie)c.selected=parseInt(a._cookie(),10);if(typeof c.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)c.selected=
-this.lis.index(this.lis.filter(".ui-tabs-selected"));c.selected=c.selected||(this.lis.length?0:-1)}else if(c.selected===null)c.selected=-1;c.selected=c.selected>=0&&this.anchors[c.selected]||c.selected<0?c.selected:0;c.disabled=d.unique(c.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(c.selected,c.disabled)!=-1&&c.disabled.splice(d.inArray(c.selected,c.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");
-if(c.selected>=0&&this.anchors.length){a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(c.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[c.selected],a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash))[0]))});this.load(c.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else c.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));
-this.element[c.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");c.cookie&&this._cookie(c.selected,c.cookie);b=0;for(var j;j=this.lis[b];b++)d(j)[d.inArray(b,c.disabled)!=-1&&!d(j).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");c.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(c.event!=="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+
-g)};this.lis.bind("mouseover.tabs",function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(c.fx)if(d.isArray(c.fx)){m=c.fx[0];o=c.fx[1]}else m=o=c.fx;var r=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",
-function(){e(f,o);a._trigger("show",null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},s=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")};
-this.anchors.bind(c.event+".tabs",function(){var g=this,f=d(g).closest("li"),i=a.panels.filter(":not(.ui-tabs-hide)"),l=a.element.find(a._sanitizeSelector(g.hash));if(f.hasClass("ui-tabs-selected")&&!c.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a.panels.filter(":animated").length||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}c.selected=a.anchors.index(this);a.abort();if(c.collapsible)if(f.hasClass("ui-tabs-selected")){c.selected=
--1;c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){s(g,i)}).dequeue("tabs");this.blur();return false}else if(!i.length){c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this));this.blur();return false}c.cookie&&a._cookie(c.selected,c.cookie);if(l.length){i.length&&a.element.queue("tabs",function(){s(g,i)});a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";
-d.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(b){if(typeof b=="string")b=this.anchors.index(this.anchors.filter("[href$="+b+"]"));return b},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e=
-d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(c,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this,"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});b.cookie&&this._cookie(null,b.cookie);return this},add:function(b,
-e,a){if(a===p)a=this.anchors.length;var c=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,b).replace(/#\{label\}/g,e));b=!b.indexOf("#")?b.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var j=c.element.find("#"+b);j.length||(j=d(h.panelTemplate).attr("id",b).data("destroy.tabs",true));j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);j.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]);
-j.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");j.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){c._trigger("show",null,c._ui(c.anchors[0],c.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[a],this.panels[a]));return this},remove:function(b){b=this._getIndex(b);var e=this.options,a=this.lis.eq(b).remove(),c=this.panels.eq(b).remove();
-if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(b+(b+1<this.anchors.length?1:-1));e.disabled=d.map(d.grep(e.disabled,function(h){return h!=b}),function(h){return h>=b?--h:h});this._tabify();this._trigger("remove",null,this._ui(a.find("a")[0],c[0]));return this},enable:function(b){b=this._getIndex(b);var e=this.options;if(d.inArray(b,e.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=b});this._trigger("enable",null,
-this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(b){b=this._getIndex(b);var e=this.options;if(b!=e.selected){this.lis.eq(b).addClass("ui-state-disabled");e.disabled.push(b);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[b],this.panels[b]))}return this},select:function(b){b=this._getIndex(b);if(b==-1)if(this.options.collapsible&&this.options.selected!=-1)b=this.options.selected;else return this;this.anchors.eq(b).trigger(this.options.event+".tabs");return this},
-load:function(b){b=this._getIndex(b);var e=this,a=this.options,c=this.anchors.eq(b)[0],h=d.data(c,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(c,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(a.spinner){var j=d("span",c);j.data("label.tabs",j.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){e.element.find(e._sanitizeSelector(c.hash)).html(k);e._cleanup();a.cache&&d.data(c,
-"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.error(k,n,b,c)}catch(m){}}}));e.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},
-url:function(b,e){this.anchors.eq(b).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.13"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(b,e){var a=this,c=this.options,h=a._rotate||(a._rotate=function(j){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=c.selected;a.select(++k<a.anchors.length?k:0)},b);j&&j.stopPropagation()});e=a._unrotate||(a._unrotate=!e?function(j){j.clientX&&
-a.rotate(null)}:function(){t=c.selected;h()});if(b){this.element.bind("tabsshow",h);this.anchors.bind(c.event+".tabs",e);h()}else{clearTimeout(a.rotation);this.element.unbind("tabsshow",h);this.anchors.unbind(c.event+".tabs",e);delete this._rotate;delete this._unrotate}return this}})})(jQuery);
-;/*
- * jQuery UI Datepicker 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Datepicker
- *
- * Depends:
- *	jquery.ui.core.js
- */
-(function(d,B){function M(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass=
-"ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su",
-"Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",
-minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false};d.extend(this._defaults,this.regional[""]);this.dpDiv=N(d('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}function N(a){return a.delegate("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a",
-"mouseout",function(){d(this).removeClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).removeClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).removeClass("ui-datepicker-next-hover")}).delegate("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a","mouseover",function(){if(!d.datepicker._isDisabledDatepicker(J.inline?a.parent()[0]:J.input[0])){d(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
-d(this).addClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).addClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).addClass("ui-datepicker-next-hover")}})}function H(a,b){d.extend(a,b);for(var c in b)if(b[c]==null||b[c]==B)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.13"}});var z=(new Date).getTime(),J;d.extend(M.prototype,{markerClassName:"hasDatepicker",log:function(){this.debug&&console.log.apply("",arguments)},
-_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){H(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]=f}}}e=a.nodeName.toLowerCase();f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a,
-b){return{id:a[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:N(d('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",
-function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&&b.append.remove();if(c){b.append=d('<span class="'+this._appendClass+'">'+c+"</span>");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c=="focus"||c=="both")a.focus(this._showDatepicker);
-if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("<img/>").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('<button type="button"></button>').addClass(this._triggerClass).html(f==""?c:d("<img/>").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker():d.datepicker._showDatepicker(a[0]);
-return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;g<f.length;g++)if(f[g].length>h){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a,c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=d(a);
-if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b),true);this._updateDatepicker(b);this._updateAlternate(b);b.dpDiv.show()}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+=1;this._dialogInput=d('<input type="text" id="'+("dp"+this.uuid)+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');
-this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}H(a.settings,e||{});b=b&&b.constructor==Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/
-2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,
-"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=
-false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().removeClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=
-true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().addClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false;
-for(var b=0;b<this._disabledInputs.length;b++)if(this._disabledInputs[b]==a)return true;return false},_getInst:function(a){try{return d.data(a,"datepicker")}catch(b){throw"Missing instance data for this datepicker";}},_optionDatepicker:function(a,b,c){var e=this._getInst(a);if(arguments.length==2&&typeof b=="string")return b=="defaults"?d.extend({},d.datepicker._defaults):e?b=="all"?d.extend({},e.settings):this._get(e,b):null;var f=b||{};if(typeof b=="string"){f={};f[b]=c}if(e){this._curInst==e&&
-this._hideDatepicker();var h=this._getDateDatepicker(a,true),i=this._getMinMaxDate(e,"min"),g=this._getMinMaxDate(e,"max");H(e.settings,f);if(i!==null&&f.dateFormat!==B&&f.minDate===B)e.settings.minDate=this._formatDate(e,i);if(g!==null&&f.dateFormat!==B&&f.maxDate===B)e.settings.maxDate=this._formatDate(e,g);this._attachments(d(a),e);this._autoSize(e);this._setDate(e,h);this._updateAlternate(e);this._updateDatepicker(e)}},_changeDatepicker:function(a,b,c){this._optionDatepicker(a,b,c)},_refreshDatepicker:function(a){(a=
-this._getInst(a))&&this._updateDatepicker(a)},_setDateDatepicker:function(a,b){if(a=this._getInst(a)){this._setDate(a,b);this._updateDatepicker(a);this._updateAlternate(a)}},_getDateDatepicker:function(a,b){(a=this._getInst(a))&&!a.inline&&this._setDateFromField(a,b);return a?this._getDate(a):null},_doKeyDown:function(a){var b=d.datepicker._getInst(a.target),c=true,e=b.dpDiv.is(".ui-datepicker-rtl");b._keyEvent=true;if(d.datepicker._datepickerShowing)switch(a.keyCode){case 9:d.datepicker._hideDatepicker();
-c=false;break;case 13:c=d("td."+d.datepicker._dayOverClass+":not(."+d.datepicker._currentClass+")",b.dpDiv);c[0]?d.datepicker._selectDay(a.target,b.selectedMonth,b.selectedYear,c[0]):d.datepicker._hideDatepicker();return false;case 27:d.datepicker._hideDatepicker();break;case 33:d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 34:d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,
-"stepMonths"),"M");break;case 35:if(a.ctrlKey||a.metaKey)d.datepicker._clearDate(a.target);c=a.ctrlKey||a.metaKey;break;case 36:if(a.ctrlKey||a.metaKey)d.datepicker._gotoToday(a.target);c=a.ctrlKey||a.metaKey;break;case 37:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?+1:-1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 38:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,
--7,"D");c=a.ctrlKey||a.metaKey;break;case 39:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?-1:+1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 40:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,+7,"D");c=a.ctrlKey||a.metaKey;break;default:c=false}else if(a.keyCode==36&&a.ctrlKey)d.datepicker._showDatepicker(this);else c=false;if(c){a.preventDefault();
-a.stopPropagation()}},_doKeyPress:function(a){var b=d.datepicker._getInst(a.target);if(d.datepicker._get(b,"constrainInput")){b=d.datepicker._possibleChars(d.datepicker._get(b,"dateFormat"));var c=String.fromCharCode(a.charCode==B?a.keyCode:a.charCode);return a.ctrlKey||a.metaKey||c<" "||!b||b.indexOf(c)>-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a);
-d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target||a;if(a.nodeName.toLowerCase()!="input")a=d("input",a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);d.datepicker._curInst&&d.datepicker._curInst!=b&&d.datepicker._curInst.dpDiv.stop(true,true);var c=d.datepicker._get(b,"beforeShow");H(b.settings,c?c.apply(a,[a,b]):{});b.lastVal=
-null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value="";if(!d.datepicker._pos){d.datepicker._pos=d.datepicker._findPos(a);d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=
-null;b.dpDiv.empty();b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);c=d.datepicker._checkOffset(b,c,e);b.dpDiv.css({position:d.datepicker._inDialog&&d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){var i=b.dpDiv.find("iframe.ui-datepicker-cover");if(i.length){var g=d.datepicker._getBorders(b.dpDiv);i.css({left:-g[0],
-top:-g[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex(d(a).zIndex()+1);d.datepicker._datepickerShowing=true;d.effects&&d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}},_updateDatepicker:function(a){var b=d.datepicker._getBorders(a.dpDiv);J=a;a.dpDiv.empty().append(this._generateHTML(a));var c=a.dpDiv.find("iframe.ui-datepicker-cover");
-c.length&&c.css({left:-b[0],top:-b[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()});a.dpDiv.find("."+this._dayOverClass+" a").mouseover();b=this._getNumberOfMonths(a);c=b[1];a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");c>1&&a.dpDiv.addClass("ui-datepicker-multi-"+c).css("width",17*c+"em");a.dpDiv[(b[0]!=1||b[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");
-a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var e=a.yearshtml;setTimeout(function(){e===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml);e=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},
-_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),j=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e-
-g):0);b.top-=Math.min(b.top,b.top+f>j&&j>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1||d.expr.filters.hidden(a));)a=a[b?"previousSibling":"nextSibling"];a=d(a).offset();return[a.left,a.top]},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);this._curInst=
-null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();if(a=this._get(b,"onClose"))a.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b]);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},
-_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):
-0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e._selectingMonthYear=
-false;e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_clickMonthYear:function(a){var b=this._getInst(d(a)[0]);b.input&&b._selectingMonthYear&&setTimeout(function(){b.input.focus()},0);b._selectingMonthYear=!b._selectingMonthYear},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay=
-d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=d(a);this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);
-else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=
-a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?b.toString():b+"";if(b=="")return null;var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;e=typeof e!="string"?e:(new Date).getFullYear()%100+parseInt(e,10);for(var f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,
-g=(c?c.monthNames:null)||this._defaults.monthNames,j=c=-1,l=-1,u=-1,k=false,o=function(p){(p=A+1<a.length&&a.charAt(A+1)==p)&&A++;return p},m=function(p){var C=o(p);p=new RegExp("^\\d{1,"+(p=="@"?14:p=="!"?20:p=="y"&&C?4:p=="o"?3:2)+"}");p=b.substring(s).match(p);if(!p)throw"Missing number at position "+s;s+=p[0].length;return parseInt(p[0],10)},n=function(p,C,K){p=d.map(o(p)?K:C,function(w,x){return[[x,w]]}).sort(function(w,x){return-(w[1].length-x[1].length)});var E=-1;d.each(p,function(w,x){w=
-x[1];if(b.substr(s,w.length).toLowerCase()==w.toLowerCase()){E=x[0];s+=w.length;return false}});if(E!=-1)return E+1;else throw"Unknown name at position "+s;},r=function(){if(b.charAt(s)!=a.charAt(A))throw"Unexpected literal at position "+s;s++},s=0,A=0;A<a.length;A++)if(k)if(a.charAt(A)=="'"&&!o("'"))k=false;else r();else switch(a.charAt(A)){case "d":l=m("d");break;case "D":n("D",f,h);break;case "o":u=m("o");break;case "m":j=m("m");break;case "M":j=n("M",i,g);break;case "y":c=m("y");break;case "@":var v=
-new Date(m("@"));c=v.getFullYear();j=v.getMonth()+1;l=v.getDate();break;case "!":v=new Date((m("!")-this._ticksTo1970)/1E4);c=v.getFullYear();j=v.getMonth()+1;l=v.getDate();break;case "'":if(o("'"))r();else k=true;break;default:r()}if(c==-1)c=(new Date).getFullYear();else if(c<100)c+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c<=e?0:-100);if(u>-1){j=1;l=u;do{e=this._getDaysInMonth(c,j-1);if(l<=e)break;j++;l-=e}while(1)}v=this._daylightSavingAdjust(new Date(c,j-1,l));if(v.getFullYear()!=
-c||v.getMonth()+1!=j||v.getDate()!=l)throw"Invalid date";return v},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,
-h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:null)||this._defaults.monthNames;var i=function(o){(o=k+1<a.length&&a.charAt(k+1)==o)&&k++;return o},g=function(o,m,n){m=""+m;if(i(o))for(;m.length<n;)m="0"+m;return m},j=function(o,m,n,r){return i(o)?r[m]:n[m]},l="",u=false;if(b)for(var k=0;k<a.length;k++)if(u)if(a.charAt(k)=="'"&&!i("'"))u=false;else l+=a.charAt(k);else switch(a.charAt(k)){case "d":l+=g("d",b.getDate(),2);break;case "D":l+=j("D",b.getDay(),e,f);break;
-case "o":l+=g("o",(b.getTime()-(new Date(b.getFullYear(),0,0)).getTime())/864E5,3);break;case "m":l+=g("m",b.getMonth()+1,2);break;case "M":l+=j("M",b.getMonth(),h,c);break;case "y":l+=i("y")?b.getFullYear():(b.getYear()%100<10?"0":"")+b.getYear()%100;break;case "@":l+=b.getTime();break;case "!":l+=b.getTime()*1E4+this._ticksTo1970;break;case "'":if(i("'"))l+="'";else u=true;break;default:l+=a.charAt(k)}return l},_possibleChars:function(a){for(var b="",c=false,e=function(h){(h=f+1<a.length&&a.charAt(f+
-1)==h)&&f++;return h},f=0;f<a.length;f++)if(c)if(a.charAt(f)=="'"&&!e("'"))c=false;else b+=a.charAt(f);else switch(a.charAt(f)){case "d":case "m":case "y":case "@":b+="0123456789";break;case "D":case "M":return null;case "'":if(e("'"))b+="'";else c=true;break;default:b+=a.charAt(f)}return b},_get:function(a,b){return a.settings[b]!==B?a.settings[b]:this._defaults[b]},_setDateFromField:function(a,b){if(a.input.val()!=a.lastVal){var c=this._get(a,"dateFormat"),e=a.lastVal=a.input?a.input.val():null,
-f,h;f=h=this._getDefaultDate(a);var i=this._getFormatConfig(a);try{f=this.parseDate(c,e,i)||h}catch(g){this.log(g);e=b?"":e}a.selectedDay=f.getDate();a.drawMonth=a.selectedMonth=f.getMonth();a.drawYear=a.selectedYear=f.getFullYear();a.currentDay=e?f.getDate():0;a.currentMonth=e?f.getMonth():0;a.currentYear=e?f.getFullYear():0;this._adjustInstDate(a)}},_getDefaultDate:function(a){return this._restrictMinMax(a,this._determineDate(a,this._get(a,"defaultDate"),new Date))},_determineDate:function(a,b,
-c){var e=function(h){var i=new Date;i.setDate(i.getDate()+h);return i},f=function(h){try{return d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),h,d.datepicker._getFormatConfig(a))}catch(i){}var g=(h.toLowerCase().match(/^c/)?d.datepicker._getDate(a):null)||new Date,j=g.getFullYear(),l=g.getMonth();g=g.getDate();for(var u=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,k=u.exec(h);k;){switch(k[2]||"d"){case "d":case "D":g+=parseInt(k[1],10);break;case "w":case "W":g+=parseInt(k[1],10)*7;break;case "m":case "M":l+=
-parseInt(k[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(j,l));break;case "y":case "Y":j+=parseInt(k[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(j,l));break}k=u.exec(h)}return new Date(j,l,g)};if(b=(b=b==null||b===""?c:typeof b=="string"?f(b):typeof b=="number"?isNaN(b)?c:e(b):new Date(b.getTime()))&&b.toString()=="Invalid Date"?c:b){b.setHours(0);b.setMinutes(0);b.setSeconds(0);b.setMilliseconds(0)}return this._daylightSavingAdjust(b)},_daylightSavingAdjust:function(a){if(!a)return null;
-a.setHours(a.getHours()>12?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||
-a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),j=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay?
-new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),k=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=k&&n<k?k:n;this._daylightSavingAdjust(new Date(m,g,1))>n;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-j,1)),this._getFormatConfig(a));
-n=this._canAdjustMonth(a,-1,m,g)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+z+".datepicker._adjustDate('#"+a.id+"', -"+j+", 'M');\" title=\""+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>":f?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>";var r=this._get(a,"nextText");r=!h?r:this.formatDate(r,this._daylightSavingAdjust(new Date(m,
-g+j,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+z+".datepicker._adjustDate('#"+a.id+"', +"+j+", 'M');\" title=\""+r+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+r+"</span></a>":f?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+r+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+r+"</span></a>";j=this._get(a,"currentText");r=this._get(a,"gotoCurrent")&&
-a.currentDay?u:b;j=!h?j:this.formatDate(j,r,this._getFormatConfig(a));h=!a.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+z+'.datepicker._hideDatepicker();">'+this._get(a,"closeText")+"</button>":"";e=e?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(c?h:"")+(this._isInRange(a,r)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+
-z+".datepicker._gotoToday('#"+a.id+"');\">"+j+"</button>":"")+(c?"":h)+"</div>":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;j=this._get(a,"showWeek");r=this._get(a,"dayNames");this._get(a,"dayNamesShort");var s=this._get(a,"dayNamesMin"),A=this._get(a,"monthNames"),v=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),C=this._get(a,"showOtherMonths"),K=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var E=this._getDefaultDate(a),w="",x=0;x<i[0];x++){for(var O=
-"",G=0;G<i[1];G++){var P=this._daylightSavingAdjust(new Date(m,g,a.selectedDay)),t=" ui-corner-all",y="";if(l){y+='<div class="ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":"left");break;case i[1]-1:y+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:y+=" ui-datepicker-group-middle";t="";break}y+='">'}y+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+t+'">'+(/all|left/.test(t)&&x==0?c?
-f:n:"")+(/all|right/.test(t)&&x==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,k,o,x>0||G>0,A,v)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var D=j?'<th class="ui-datepicker-week-col">'+this._get(a,"weekHeader")+"</th>":"";for(t=0;t<7;t++){var q=(t+h)%7;D+="<th"+((t+h+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+r[q]+'">'+s[q]+"</span></th>"}y+=D+"</tr></thead><tbody>";D=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay,
-D);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;D=l?6:Math.ceil((t+D)/7);q=this._daylightSavingAdjust(new Date(m,g,1-t));for(var Q=0;Q<D;Q++){y+="<tr>";var R=!j?"":'<td class="ui-datepicker-week-col">'+this._get(a,"calculateWeek")(q)+"</td>";for(t=0;t<7;t++){var I=p?p.apply(a.input?a.input[0]:null,[q]):[true,""],F=q.getMonth()!=g,L=F&&!K||!I[0]||k&&q<k||o&&q>o;R+='<td class="'+((t+h+6)%7>=5?" ui-datepicker-week-end":"")+(F?" ui-datepicker-other-month":"")+(q.getTime()==P.getTime()&&g==a.selectedMonth&&
-a._keyEvent||E.getTime()==q.getTime()&&E.getTime()==P.getTime()?" "+this._dayOverClass:"")+(L?" "+this._unselectableClass+" ui-state-disabled":"")+(F&&!C?"":" "+I[1]+(q.getTime()==u.getTime()?" "+this._currentClass:"")+(q.getTime()==b.getTime()?" ui-datepicker-today":""))+'"'+((!F||C)&&I[2]?' title="'+I[2]+'"':"")+(L?"":' onclick="DP_jQuery_'+z+".datepicker._selectDay('#"+a.id+"',"+q.getMonth()+","+q.getFullYear()+', this);return false;"')+">"+(F&&!C?"&#xa0;":L?'<span class="ui-state-default">'+q.getDate()+
-"</span>":'<a class="ui-state-default'+(q.getTime()==b.getTime()?" ui-state-highlight":"")+(q.getTime()==u.getTime()?" ui-state-active":"")+(F?" ui-priority-secondary":"")+'" href="#">'+q.getDate()+"</a>")+"</td>";q.setDate(q.getDate()+1);q=this._daylightSavingAdjust(q)}y+=R+"</tr>"}g++;if(g>11){g=0;m++}y+="</tbody></table>"+(l?"</div>"+(i[0]>0&&G==i[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");O+=y}w+=O}w+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':
-"");a._keyEvent=false;return w},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='<div class="ui-datepicker-title">',o="";if(h||!j)o+='<span class="ui-datepicker-month">'+i[b]+"</span>";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+z+".datepicker._selectMonthYear('#"+a.id+"', this, 'M');\" onclick=\"DP_jQuery_"+z+".datepicker._clickMonthYear('#"+
-a.id+"');\">";for(var n=0;n<12;n++)if((!i||n>=e.getMonth())&&(!m||n<=f.getMonth()))o+='<option value="'+n+'"'+(n==b?' selected="selected"':"")+">"+g[n]+"</option>";o+="</select>"}u||(k+=o+(h||!(j&&l)?"&#xa0;":""));if(!a.yearshtml){a.yearshtml="";if(h||!l)k+='<span class="ui-datepicker-year">'+c+"</span>";else{g=this._get(a,"yearRange").split(":");var r=(new Date).getFullYear();i=function(s){s=s.match(/c[+-].*/)?c+parseInt(s.substring(1),10):s.match(/[+-].*/)?r+parseInt(s,10):parseInt(s,10);return isNaN(s)?
-r:s};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b,e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(a.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+z+".datepicker._selectMonthYear('#"+a.id+"', this, 'Y');\" onclick=\"DP_jQuery_"+z+".datepicker._clickMonthYear('#"+a.id+"');\">";b<=g;b++)a.yearshtml+='<option value="'+b+'"'+(b==c?' selected="selected"':"")+">"+b+"</option>";a.yearshtml+="</select>";k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+=
-(h||!(j&&l)?"&#xa0;":"")+o;k+="</div>";return k},_adjustInstDate:function(a,b,c){var e=a.drawYear+(c=="Y"?b:0),f=a.drawMonth+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,
-"max");b=c&&b<c?c:b;return b=a&&b>a?a:b},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");if(b)b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,
-b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a);c=this._daylightSavingAdjust(new Date(c,e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!=
-"string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));
-return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker=function(a){if(!this.length)return this;if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&
-arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));return this.each(function(){typeof a=="string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new M;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.13";window["DP_jQuery_"+z]=d})(jQuery);
-;/*
- * jQuery UI Progressbar 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Progressbar
- *
- * Depends:
- *   jquery.ui.core.js
- *   jquery.ui.widget.js
- */
-(function(b,d){b.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=b("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");
-this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===d)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){if(a==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*
-this._value()/this.options.max},_refreshValue:function(){var a=this.value(),c=this._percentage();if(this.oldValue!==a){this.oldValue=a;this._trigger("change")}this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.13"})})(jQuery);
-;/*
- * jQuery UI Effects 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/
- */
-jQuery.effects||function(f,j){function m(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1],
-16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return n.transparent;return n[f.trim(c).toLowerCase()]}function s(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return m(b)}function o(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,
-a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function p(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in t||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function u(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function k(c,a,b,d){if(typeof c=="object"){d=
-a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:b in f.fx.speeds?f.fx.speeds[b]:f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}function l(c){if(!c||typeof c==="number"||f.fx.speeds[c])return true;if(typeof c==="string"&&!f.effects[c])return true;return false}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor",
-"borderTopColor","borderColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=s(b.elem,a);b.end=m(b.end);b.colorInit=true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var n={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,
-0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,
-211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},q=["add","remove","toggle"],t={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b,
-d){if(f.isFunction(b)){d=b;b=null}return this.queue(function(){var e=f(this),g=e.attr("style")||" ",h=p(o.call(this)),r,v=e.attr("class");f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});r=p(o.call(this));e.attr("class",v);e.animate(u(h,r),{queue:false,duration:a,easding:b,complete:function(){f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments);f.dequeue(this)}})})};
-f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,a):f.effects.animateClass.apply(this,
-[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.13",save:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.data("ec.storage."+a[b],c[0].style[a[b]])},restore:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.css(a[b],c.data("ec.storage."+a[b]))},setMode:function(c,a){if(a=="toggle")a=c.is(":hidden")?"show":"hide";return a},getBaseline:function(c,a){var b;switch(c[0]){case "top":b=
-0;break;case "middle":b=0.5;break;case "bottom":b=1;break;default:b=c[0]/a.height}switch(c[1]){case "left":c=0;break;case "center":c=0.5;break;case "right":c=1;break;default:c=c[1]/a.width}return{x:c,y:b}},createWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent();var a={width:c.outerWidth(true),height:c.outerHeight(true),"float":c.css("float")},b=f("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0});
-c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c);return c},setTransition:function(c,
-a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)});return d.call(this,b)},_show:f.fn.show,show:function(c){if(l(c))return this._show.apply(this,arguments);else{var a=k.apply(this,arguments);
-a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(l(c))return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(l(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%",
-"pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*
-((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=
-e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=
-e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/
-h);return-(h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g))+b},easeOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*a)*Math.sin((a*e-c)*2*Math.PI/g)+d+b},easeInOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e/2)==2)return b+d;g||(g=e*0.3*1.5);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);if(a<1)return-0.5*
-h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)+b;return h*Math.pow(2,-10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)*0.5+d+b},easeInBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*(a/=e)*a*((g+1)*a-g)+b},easeOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*((a=a/e-1)*a*((g+1)*a+g)+1)+b},easeInOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;if((a/=e/2)<1)return d/2*a*a*(((g*=1.525)+1)*a-g)+b;return d/2*((a-=2)*a*(((g*=1.525)+1)*a+g)+2)+b},easeInBounce:function(c,a,b,d,e){return d-f.easing.easeOutBounce(c,
-e-a,0,d,e)+b},easeOutBounce:function(c,a,b,d,e){return(a/=e)<1/2.75?d*7.5625*a*a+b:a<2/2.75?d*(7.5625*(a-=1.5/2.75)*a+0.75)+b:a<2.5/2.75?d*(7.5625*(a-=2.25/2.75)*a+0.9375)+b:d*(7.5625*(a-=2.625/2.75)*a+0.984375)+b},easeInOutBounce:function(c,a,b,d,e){if(a<e/2)return f.easing.easeInBounce(c,a*2,0,d,e)*0.5+b;return f.easing.easeOutBounce(c,a*2-e,0,d,e)*0.5+d*0.5+b}})}(jQuery);
-;/*
- * jQuery UI Effects Blind 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Blind
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(b){b.effects.blind=function(c){return this.queue(function(){var a=b(this),g=["position","top","bottom","left","right"],f=b.effects.setMode(a,c.options.mode||"hide"),d=c.options.direction||"vertical";b.effects.save(a,g);a.show();var e=b.effects.createWrapper(a).css({overflow:"hidden"}),h=d=="vertical"?"height":"width";d=d=="vertical"?e.height():e.width();f=="show"&&e.css(h,0);var i={};i[h]=f=="show"?d:0;e.animate(i,c.duration,c.options.easing,function(){f=="hide"&&a.hide();b.effects.restore(a,
-g);b.effects.removeWrapper(a);c.callback&&c.callback.apply(a[0],arguments);a.dequeue()})})}})(jQuery);
-;/*
- * jQuery UI Effects Bounce 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Bounce
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(e){e.effects.bounce=function(b){return this.queue(function(){var a=e(this),l=["position","top","bottom","left","right"],h=e.effects.setMode(a,b.options.mode||"effect"),d=b.options.direction||"up",c=b.options.distance||20,m=b.options.times||5,i=b.duration||250;/show|hide/.test(h)&&l.push("opacity");e.effects.save(a,l);a.show();e.effects.createWrapper(a);var f=d=="up"||d=="down"?"top":"left";d=d=="up"||d=="left"?"pos":"neg";c=b.options.distance||(f=="top"?a.outerHeight({margin:true})/3:a.outerWidth({margin:true})/
-3);if(h=="show")a.css("opacity",0).css(f,d=="pos"?-c:c);if(h=="hide")c/=m*2;h!="hide"&&m--;if(h=="show"){var g={opacity:1};g[f]=(d=="pos"?"+=":"-=")+c;a.animate(g,i/2,b.options.easing);c/=2;m--}for(g=0;g<m;g++){var j={},k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing);c=h=="hide"?c*2:c/2}if(h=="hide"){g={opacity:0};g[f]=(d=="pos"?"-=":"+=")+c;a.animate(g,i/2,b.options.easing,function(){a.hide();e.effects.restore(a,l);e.effects.removeWrapper(a);
-b.callback&&b.callback.apply(this,arguments)})}else{j={};k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing,function(){e.effects.restore(a,l);e.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments)})}a.queue("fx",function(){a.dequeue()});a.dequeue()})}})(jQuery);
-;/*
- * jQuery UI Effects Clip 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Clip
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(b){b.effects.clip=function(e){return this.queue(function(){var a=b(this),i=["position","top","bottom","left","right","height","width"],f=b.effects.setMode(a,e.options.mode||"hide"),c=e.options.direction||"vertical";b.effects.save(a,i);a.show();var d=b.effects.createWrapper(a).css({overflow:"hidden"});d=a[0].tagName=="IMG"?d:a;var g={size:c=="vertical"?"height":"width",position:c=="vertical"?"top":"left"};c=c=="vertical"?d.height():d.width();if(f=="show"){d.css(g.size,0);d.css(g.position,
-c/2)}var h={};h[g.size]=f=="show"?c:0;h[g.position]=f=="show"?0:c/2;d.animate(h,{queue:false,duration:e.duration,easing:e.options.easing,complete:function(){f=="hide"&&a.hide();b.effects.restore(a,i);b.effects.removeWrapper(a);e.callback&&e.callback.apply(a[0],arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Drop 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Drop
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(c){c.effects.drop=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right","opacity"],e=c.effects.setMode(a,d.options.mode||"hide"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a);var f=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var g=d.options.distance||(f=="top"?a.outerHeight({margin:true})/2:a.outerWidth({margin:true})/2);if(e=="show")a.css("opacity",0).css(f,b=="pos"?-g:g);var i={opacity:e==
-"show"?1:0};i[f]=(e=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+g;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){e=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Explode 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Explode
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(j){j.effects.explode=function(a){return this.queue(function(){var c=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3,d=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3;a.options.mode=a.options.mode=="toggle"?j(this).is(":visible")?"hide":"show":a.options.mode;var b=j(this).show().css("visibility","hidden"),g=b.offset();g.top-=parseInt(b.css("marginTop"),10)||0;g.left-=parseInt(b.css("marginLeft"),10)||0;for(var h=b.outerWidth(true),i=b.outerHeight(true),e=0;e<c;e++)for(var f=
-0;f<d;f++)b.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-f*(h/d),top:-e*(i/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:h/d,height:i/c,left:g.left+f*(h/d)+(a.options.mode=="show"?(f-Math.floor(d/2))*(h/d):0),top:g.top+e*(i/c)+(a.options.mode=="show"?(e-Math.floor(c/2))*(i/c):0),opacity:a.options.mode=="show"?0:1}).animate({left:g.left+f*(h/d)+(a.options.mode=="show"?0:(f-Math.floor(d/2))*(h/d)),top:g.top+
-e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.mode=="show"?1:0},a.duration||500);setTimeout(function(){a.options.mode=="show"?b.css({visibility:"visible"}):b.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(b[0]);b.dequeue();j("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery);
-;/*
- * jQuery UI Effects Fade 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Fade
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(b){b.effects.fade=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide");c.animate({opacity:d},{queue:false,duration:a.duration,easing:a.options.easing,complete:function(){a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Fold 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Fold
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(c){c.effects.fold=function(a){return this.queue(function(){var b=c(this),j=["position","top","bottom","left","right"],d=c.effects.setMode(b,a.options.mode||"hide"),g=a.options.size||15,h=!!a.options.horizFirst,k=a.duration?a.duration/2:c.fx.speeds._default/2;c.effects.save(b,j);b.show();var e=c.effects.createWrapper(b).css({overflow:"hidden"}),f=d=="show"!=h,l=f?["width","height"]:["height","width"];f=f?[e.width(),e.height()]:[e.height(),e.width()];var i=/([0-9]+)%/.exec(g);if(i)g=parseInt(i[1],
-10)/100*f[d=="hide"?0:1];if(d=="show")e.css(h?{height:0,width:g}:{height:g,width:0});h={};i={};h[l[0]]=d=="show"?f[0]:g;i[l[1]]=d=="show"?f[1]:0;e.animate(h,k,a.options.easing).animate(i,k,a.options.easing,function(){d=="hide"&&b.hide();c.effects.restore(b,j);c.effects.removeWrapper(b);a.callback&&a.callback.apply(b[0],arguments);b.dequeue()})})}})(jQuery);
-;/*
- * jQuery UI Effects Highlight 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Highlight
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&&
-this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Pulsate 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Pulsate
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(d){d.effects.pulsate=function(a){return this.queue(function(){var b=d(this),c=d.effects.setMode(b,a.options.mode||"show");times=(a.options.times||5)*2-1;duration=a.duration?a.duration/2:d.fx.speeds._default/2;isVisible=b.is(":visible");animateTo=0;if(!isVisible){b.css("opacity",0).show();animateTo=1}if(c=="hide"&&isVisible||c=="show"&&!isVisible)times--;for(c=0;c<times;c++){b.animate({opacity:animateTo},duration,a.options.easing);animateTo=(animateTo+1)%2}b.animate({opacity:animateTo},duration,
-a.options.easing,function(){animateTo==0&&b.hide();a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()}).dequeue()})}})(jQuery);
-;/*
- * jQuery UI Effects Scale 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Scale
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(c){c.effects.puff=function(b){return this.queue(function(){var a=c(this),e=c.effects.setMode(a,b.options.mode||"hide"),g=parseInt(b.options.percent,10)||150,h=g/100,i={height:a.height(),width:a.width()};c.extend(b.options,{fade:true,mode:e,percent:e=="hide"?g:100,from:e=="hide"?i:{height:i.height*h,width:i.width*h}});a.effect("scale",b.options,b.duration,b.callback);a.dequeue()})};c.effects.scale=function(b){return this.queue(function(){var a=c(this),e=c.extend(true,{},b.options),g=c.effects.setMode(a,
-b.options.mode||"effect"),h=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:g=="hide"?0:100),i=b.options.direction||"both",f=b.options.origin;if(g!="effect"){e.origin=f||["middle","center"];e.restore=true}f={height:a.height(),width:a.width()};a.from=b.options.from||(g=="show"?{height:0,width:0}:f);h={y:i!="horizontal"?h/100:1,x:i!="vertical"?h/100:1};a.to={height:f.height*h.y,width:f.width*h.x};if(b.options.fade){if(g=="show"){a.from.opacity=0;a.to.opacity=1}if(g=="hide"){a.from.opacity=
-1;a.to.opacity=0}}e.from=a.from;e.to=a.to;e.mode=g;a.effect("size",e,b.duration,b.callback);a.dequeue()})};c.effects.size=function(b){return this.queue(function(){var a=c(this),e=["position","top","bottom","left","right","width","height","overflow","opacity"],g=["position","top","bottom","left","right","overflow","opacity"],h=["width","height","overflow"],i=["fontSize"],f=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],k=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],
-p=c.effects.setMode(a,b.options.mode||"effect"),n=b.options.restore||false,m=b.options.scale||"both",l=b.options.origin,j={height:a.height(),width:a.width()};a.from=b.options.from||j;a.to=b.options.to||j;if(l){l=c.effects.getBaseline(l,j);a.from.top=(j.height-a.from.height)*l.y;a.from.left=(j.width-a.from.width)*l.x;a.to.top=(j.height-a.to.height)*l.y;a.to.left=(j.width-a.to.width)*l.x}var d={from:{y:a.from.height/j.height,x:a.from.width/j.width},to:{y:a.to.height/j.height,x:a.to.width/j.width}};
-if(m=="box"||m=="both"){if(d.from.y!=d.to.y){e=e.concat(f);a.from=c.effects.setTransition(a,f,d.from.y,a.from);a.to=c.effects.setTransition(a,f,d.to.y,a.to)}if(d.from.x!=d.to.x){e=e.concat(k);a.from=c.effects.setTransition(a,k,d.from.x,a.from);a.to=c.effects.setTransition(a,k,d.to.x,a.to)}}if(m=="content"||m=="both")if(d.from.y!=d.to.y){e=e.concat(i);a.from=c.effects.setTransition(a,i,d.from.y,a.from);a.to=c.effects.setTransition(a,i,d.to.y,a.to)}c.effects.save(a,n?e:g);a.show();c.effects.createWrapper(a);
-a.css("overflow","hidden").css(a.from);if(m=="content"||m=="both"){f=f.concat(["marginTop","marginBottom"]).concat(i);k=k.concat(["marginLeft","marginRight"]);h=e.concat(f).concat(k);a.find("*[width]").each(function(){child=c(this);n&&c.effects.save(child,h);var o={height:child.height(),width:child.width()};child.from={height:o.height*d.from.y,width:o.width*d.from.x};child.to={height:o.height*d.to.y,width:o.width*d.to.x};if(d.from.y!=d.to.y){child.from=c.effects.setTransition(child,f,d.from.y,child.from);
-child.to=c.effects.setTransition(child,f,d.to.y,child.to)}if(d.from.x!=d.to.x){child.from=c.effects.setTransition(child,k,d.from.x,child.from);child.to=c.effects.setTransition(child,k,d.to.x,child.to)}child.css(child.from);child.animate(child.to,b.duration,b.options.easing,function(){n&&c.effects.restore(child,h)})})}a.animate(a.to,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){a.to.opacity===0&&a.css("opacity",a.from.opacity);p=="hide"&&a.hide();c.effects.restore(a,
-n?e:g);c.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Shake 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Shake
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(d){d.effects.shake=function(a){return this.queue(function(){var b=d(this),j=["position","top","bottom","left","right"];d.effects.setMode(b,a.options.mode||"effect");var c=a.options.direction||"left",e=a.options.distance||20,l=a.options.times||3,f=a.duration||a.options.duration||140;d.effects.save(b,j);b.show();d.effects.createWrapper(b);var g=c=="up"||c=="down"?"top":"left",h=c=="up"||c=="left"?"pos":"neg";c={};var i={},k={};c[g]=(h=="pos"?"-=":"+=")+e;i[g]=(h=="pos"?"+=":"-=")+e*2;k[g]=
-(h=="pos"?"-=":"+=")+e*2;b.animate(c,f,a.options.easing);for(e=1;e<l;e++)b.animate(i,f,a.options.easing).animate(k,f,a.options.easing);b.animate(i,f,a.options.easing).animate(c,f/2,a.options.easing,function(){d.effects.restore(b,j);d.effects.removeWrapper(b);a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()});b.dequeue()})}})(jQuery);
-;/*
- * jQuery UI Effects Slide 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Slide
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(c){c.effects.slide=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right"],f=c.effects.setMode(a,d.options.mode||"show"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a).css({overflow:"hidden"});var g=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var e=d.options.distance||(g=="top"?a.outerHeight({margin:true}):a.outerWidth({margin:true}));if(f=="show")a.css(g,b=="pos"?isNaN(e)?"-"+e:-e:e);
-var i={};i[g]=(f=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+e;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){f=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Transfer 1.8.13
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Transfer
- *
- * Depends:
- *	jquery.effects.core.js
- */
-(function(e){e.effects.transfer=function(a){return this.queue(function(){var b=e(this),c=e(a.options.to),d=c.offset();c={top:d.top,left:d.left,height:c.innerHeight(),width:c.innerWidth()};d=b.offset();var f=e('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(a.options.className).css({top:d.top,left:d.left,height:b.innerHeight(),width:b.innerWidth(),position:"absolute"}).animate(c,a.duration,a.options.easing,function(){f.remove();a.callback&&a.callback.apply(b[0],arguments);
-b.dequeue()})})}})(jQuery);
-;
\ No newline at end of file
--- a/web/hdabo/static/hdabo/js/jquery.jeditable.js	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,546 +0,0 @@
-/*
- * Jeditable - jQuery in place edit plugin
- *
- * Copyright (c) 2006-2009 Mika Tuupola, Dylan Verheul
- *
- * Licensed under the MIT license:
- *   http://www.opensource.org/licenses/mit-license.php
- *
- * Project home:
- *   http://www.appelsiini.net/projects/jeditable
- *
- * Based on editable by Dylan Verheul <dylan_at_dyve.net>:
- *    http://www.dyve.net/jquery/?editable
- *
- */
-
-/**
-  * Version 1.7.2-dev
-  *
-  * ** means there is basic unit tests for this parameter. 
-  *
-  * @name  Jeditable
-  * @type  jQuery
-  * @param String  target             (POST) URL or function to send edited content to **
-  * @param Hash    options            additional options 
-  * @param String  options[method]    method to use to send edited content (POST or PUT) **
-  * @param Function options[callback] Function to run after submitting edited content **
-  * @param String  options[name]      POST parameter name of edited content
-  * @param String  options[id]        POST parameter name of edited div id
-  * @param Hash    options[submitdata] Extra parameters to send when submitting edited content.
-  * @param String  options[type]      text, textarea or select (or any 3rd party input type) **
-  * @param Integer options[rows]      number of rows if using textarea ** 
-  * @param Integer options[cols]      number of columns if using textarea **
-  * @param Mixed   options[height]    'auto', 'none' or height in pixels **
-  * @param Mixed   options[width]     'auto', 'none' or width in pixels **
-  * @param String  options[loadurl]   URL to fetch input content before editing **
-  * @param String  options[loadtype]  Request type for load url. Should be GET or POST.
-  * @param String  options[loadtext]  Text to display while loading external content.
-  * @param Mixed   options[loaddata]  Extra parameters to pass when fetching content before editing.
-  * @param Mixed   options[data]      Or content given as paramameter. String or function.**
-  * @param String  options[indicator] indicator html to show when saving
-  * @param String  options[tooltip]   optional tooltip text via title attribute **
-  * @param String  options[event]     jQuery event such as 'click' of 'dblclick' **
-  * @param String  options[submit]    submit button value, empty means no button **
-  * @param String  options[cancel]    cancel button value, empty means no button **
-  * @param String  options[cssclass]  CSS class to apply to input form. 'inherit' to copy from parent. **
-  * @param String  options[style]     Style to apply to input form 'inherit' to copy from parent. **
-  * @param String  options[select]    true or false, when true text is highlighted ??
-  * @param String  options[placeholder] Placeholder text or html to insert when element is empty. **
-  * @param String  options[onblur]    'cancel', 'submit', 'ignore' or function ??
-  *             
-  * @param Function options[onsubmit] function(settings, original) { ... } called before submit
-  * @param Function options[onreset]  function(settings, original) { ... } called before reset
-  * @param Function options[onerror]  function(settings, original, xhr) { ... } called on error
-  *             
-  * @param Hash    options[ajaxoptions]  jQuery Ajax options. See docs.jquery.com.
-  *             
-  */
-
-(function($) {
-
-    $.fn.editable = function(target, options) {
-            
-        if ('disable' == target) {
-            $(this).data('disabled.editable', true);
-            return;
-        }
-        if ('enable' == target) {
-            $(this).data('disabled.editable', false);
-            return;
-        }
-        if ('destroy' == target) {
-            $(this)
-                .unbind($(this).data('event.editable'))
-                .removeData('disabled.editable')
-                .removeData('event.editable');
-            return;
-        }
-        
-        var settings = $.extend({}, $.fn.editable.defaults, {target:target}, options);
-        
-        /* setup some functions */
-        var plugin   = $.editable.types[settings.type].plugin || function() { };
-        var submit   = $.editable.types[settings.type].submit || function() { };
-        var buttons  = $.editable.types[settings.type].buttons 
-                    || $.editable.types['defaults'].buttons;
-        var content  = $.editable.types[settings.type].content 
-                    || $.editable.types['defaults'].content;
-        var element  = $.editable.types[settings.type].element 
-                    || $.editable.types['defaults'].element;
-        var reset    = $.editable.types[settings.type].reset 
-                    || $.editable.types['defaults'].reset;
-        var callback = settings.callback || function() { };
-        var onedit   = settings.onedit   || function() { }; 
-        var onsubmit = settings.onsubmit || function() { };
-        var onreset  = settings.onreset  || function() { };
-        var onerror  = settings.onerror  || reset;
-          
-        /* Show tooltip. */
-        if (settings.tooltip) {
-            $(this).attr('title', settings.tooltip);
-        }
-        
-        settings.autowidth  = 'auto' == settings.width;
-        settings.autoheight = 'auto' == settings.height;
-        
-        return this.each(function() {
-                        
-            /* Save this to self because this changes when scope changes. */
-            var self = this;  
-                   
-            /* Inlined block elements lose their width and height after first edit. */
-            /* Save them for later use as workaround. */
-            var savedwidth  = $(self).width();
-            var savedheight = $(self).height();
-
-            /* Save so it can be later used by $.editable('destroy') */
-            $(this).data('event.editable', settings.event);
-            
-            /* If element is empty add something clickable (if requested) */
-            if (!$.trim($(this).html())) {
-                $(this).html(settings.placeholder);
-            }
-            
-            $(this).bind(settings.event, function(e) {
-                
-                /* Abort if element is disabled. */
-                if (true === $(this).data('disabled.editable')) {
-                    return;
-                }
-                
-                /* Prevent throwing an exeption if edit field is clicked again. */
-                if (self.editing) {
-                    return;
-                }
-                
-                /* Abort if onedit hook returns false. */
-                if (false === onedit.apply(this, [settings, self])) {
-                   return;
-                }
-                
-                /* Prevent default action and bubbling. */
-                e.preventDefault();
-                e.stopPropagation();
-                
-                /* Remove tooltip. */
-                if (settings.tooltip) {
-                    $(self).removeAttr('title');
-                }
-                
-                /* Figure out how wide and tall we are, saved width and height. */
-                /* Workaround for http://dev.jquery.com/ticket/2190 */
-                if (0 == $(self).width()) {
-                    settings.width  = savedwidth;
-                    settings.height = savedheight;
-                } else {
-                    if (settings.width != 'none') {
-                        settings.width = 
-                            settings.autowidth ? $(self).width()  : settings.width;
-                    }
-                    if (settings.height != 'none') {
-                        settings.height = 
-                            settings.autoheight ? $(self).height() : settings.height;
-                    }
-                }
-                
-                /* Remove placeholder text, replace is here because of IE. */
-                if ($(this).html().toLowerCase().replace(/(;|"|\/)/g, '') == 
-                    settings.placeholder.toLowerCase().replace(/(;|"|\/)/g, '')) {
-                        $(this).html('');
-                }
-                                
-                self.editing    = true;
-                self.revert     = $(self).html();
-                $(self).html('');
-
-                /* Create the form object. */
-                var form = $('<form />');
-                
-                /* Apply css or style or both. */
-                if (settings.cssclass) {
-                    if ('inherit' == settings.cssclass) {
-                        form.attr('class', $(self).attr('class'));
-                    } else {
-                        form.attr('class', settings.cssclass);
-                    }
-                }
-
-                if (settings.style) {
-                    if ('inherit' == settings.style) {
-                        form.attr('style', $(self).attr('style'));
-                        /* IE needs the second line or display wont be inherited. */
-                        form.css('display', $(self).css('display'));                
-                    } else {
-                        form.attr('style', settings.style);
-                    }
-                }
-
-                /* Add main input element to form and store it in input. */
-                var input = element.apply(form, [settings, self]);
-
-                /* Set input content via POST, GET, given data or existing value. */
-                var input_content;
-                
-                if (settings.loadurl) {
-                    var t = setTimeout(function() {
-                        input.disabled = true;
-                        content.apply(form, [settings.loadtext, settings, self]);
-                    }, 100);
-
-                    var loaddata = {};
-                    loaddata[settings.id] = self.id;
-                    if ($.isFunction(settings.loaddata)) {
-                        $.extend(loaddata, settings.loaddata.apply(self, [self.revert, settings]));
-                    } else {
-                        $.extend(loaddata, settings.loaddata);
-                    }
-                    $.ajax({
-                       type : settings.loadtype,
-                       url  : settings.loadurl,
-                       data : loaddata,
-                       async : false,
-                       success: function(result) {
-                          window.clearTimeout(t);
-                          input_content = result;
-                          input.disabled = false;
-                       }
-                    });
-                } else if (settings.data) {
-                    input_content = settings.data;
-                    if ($.isFunction(settings.data)) {
-                        input_content = settings.data.apply(self, [self.revert, settings]);
-                    }
-                } else {
-                    input_content = self.revert; 
-                }
-                content.apply(form, [input_content, settings, self]);
-
-                input.attr('name', settings.name);
-        
-                /* Add buttons to the form. */
-                buttons.apply(form, [settings, self]);
-         
-                /* Add created form to self. */
-                $(self).append(form);
-         
-                /* Attach 3rd party plugin if requested. */
-                plugin.apply(form, [settings, self]);
-
-                /* Focus to first visible form element. */
-                $(':input:visible:enabled:first', form).focus();
-
-                /* Highlight input contents when requested. */
-                if (settings.select) {
-                    input.select();
-                }
-        
-                /* discard changes if pressing esc */
-                input.keydown(function(e) {
-                    if (e.keyCode == 27) {
-                        e.preventDefault();
-                        reset.apply(form, [settings, self]);
-                    }
-                });
-
-                /* Discard, submit or nothing with changes when clicking outside. */
-                /* Do nothing is usable when navigating with tab. */
-                var t;
-                if ('cancel' == settings.onblur) {
-                    input.blur(function(e) {
-                        /* Prevent canceling if submit was clicked. */
-                        t = setTimeout(function() {
-                            reset.apply(form, [settings, self]);
-                        }, 500);
-                    });
-                } else if ('submit' == settings.onblur) {
-                    input.blur(function(e) {
-                        /* Prevent double submit if submit was clicked. */
-                        t = setTimeout(function() {
-                            form.submit();
-                        }, 200);
-                    });
-                } else if ($.isFunction(settings.onblur)) {
-                    input.blur(function(e) {
-                        settings.onblur.apply(self, [input.val(), settings]);
-                    });
-                } else {
-                    input.blur(function(e) {
-                      /* TODO: maybe something here */
-                    });
-                }
-
-                form.submit(function(e) {
-
-                    if (t) { 
-                        clearTimeout(t);
-                    }
-
-                    /* Do no submit. */
-                    e.preventDefault(); 
-            
-                    /* Call before submit hook. */
-                    /* If it returns false abort submitting. */                    
-                    if (false !== onsubmit.apply(form, [settings, self])) { 
-                        /* Custom inputs call before submit hook. */
-                        /* If it returns false abort submitting. */
-                        if (false !== submit.apply(form, [settings, self])) { 
-
-                          /* Check if given target is function */
-                          if ($.isFunction(settings.target)) {
-                              var str = settings.target.apply(self, [input.val(), settings]);
-                              $(self).html(str);
-                              self.editing = false;
-                              callback.apply(self, [self.innerHTML, settings]);
-                              /* TODO: this is not dry */                              
-                              if (!$.trim($(self).html())) {
-                                  $(self).html(settings.placeholder);
-                              }
-                          } else {
-                              /* Add edited content and id of edited element to POST. */
-                              var submitdata = {};
-                              submitdata[settings.name] = input.val();
-                              submitdata[settings.id] = self.id;
-                              /* Add extra data to be POST:ed. */
-                              if ($.isFunction(settings.submitdata)) {
-                                  $.extend(submitdata, settings.submitdata.apply(self, [self.revert, settings]));
-                              } else {
-                                  $.extend(submitdata, settings.submitdata);
-                              }
-
-                              /* Quick and dirty PUT support. */
-                              if ('PUT' == settings.method) {
-                                  submitdata['_method'] = 'put';
-                              }
-
-                              /* Show the saving indicator. */
-                              $(self).html(settings.indicator);
-                              
-                              /* Defaults for ajaxoptions. */
-                              var ajaxoptions = {
-                                  type    : 'POST',
-                                  data    : submitdata,
-                                  dataType: 'html',
-                                  url     : settings.target,
-                                  success : function(result, status) {
-                                      if (ajaxoptions.dataType == 'html') {
-                                        $(self).html(result);
-                                      }
-                                      self.editing = false;
-                                      callback.apply(self, [result, settings]);
-                                      if (!$.trim($(self).html())) {
-                                          $(self).html(settings.placeholder);
-                                      }
-                                  },
-                                  error   : function(xhr, status, error) {
-                                      onerror.apply(form, [settings, self, xhr]);
-                                  }
-                              };
-                              
-                              /* Override with what is given in settings.ajaxoptions. */
-                              $.extend(ajaxoptions, settings.ajaxoptions);   
-                              $.ajax(ajaxoptions);          
-                              
-                            }
-                        }
-                    }
-                    
-                    /* Show tooltip again. */
-                    $(self).attr('title', settings.tooltip);
-                    
-                    return false;
-                });
-            });
-            
-            /* Privileged methods */
-            this.reset = function(form) {
-                /* Prevent calling reset twice when blurring. */
-                if (this.editing) {
-                    /* Before reset hook, if it returns false abort reseting. */
-                    if (false !== onreset.apply(form, [settings, self])) { 
-                        $(self).html(self.revert);
-                        self.editing   = false;
-                        if (!$.trim($(self).html())) {
-                            $(self).html(settings.placeholder);
-                        }
-                        /* Show tooltip again. */
-                        if (settings.tooltip) {
-                            $(self).attr('title', settings.tooltip);                
-                        }
-                    }                    
-                }
-            };            
-        });
-
-    };
-
-
-    $.editable = {
-        types: {
-            defaults: {
-                element : function(settings, original) {
-                    var input = $('<input type="hidden"></input>');                
-                    $(this).append(input);
-                    return(input);
-                },
-                content : function(string, settings, original) {
-                    $(':input:first', this).val(string);
-                },
-                reset : function(settings, original) {
-                  original.reset(this);
-                },
-                buttons : function(settings, original) {
-                    var form = this;
-                    if (settings.submit) {
-                        /* If given html string use that. */
-                        if (settings.submit.match(/>$/)) {
-                            var submit = $(settings.submit).click(function() {
-                                if (submit.attr("type") != "submit") {
-                                    form.submit();
-                                }
-                            });
-                        /* Otherwise use button with given string as text. */
-                        } else {
-                            var submit = $('<button type="submit" />');
-                            submit.html(settings.submit);                            
-                        }
-                        $(this).append(submit);
-                    }
-                    if (settings.cancel) {
-                        /* If given html string use that. */
-                        if (settings.cancel.match(/>$/)) {
-                            var cancel = $(settings.cancel);
-                        /* otherwise use button with given string as text */
-                        } else {
-                            var cancel = $('<button type="cancel" />');
-                            cancel.html(settings.cancel);
-                        }
-                        $(this).append(cancel);
-
-                        $(cancel).click(function(event) {
-                            if ($.isFunction($.editable.types[settings.type].reset)) {
-                                var reset = $.editable.types[settings.type].reset;                                                                
-                            } else {
-                                var reset = $.editable.types['defaults'].reset;                                
-                            }
-                            reset.apply(form, [settings, original]);
-                            return false;
-                        });
-                    }
-                }
-            },
-            text: {
-                element : function(settings, original) {
-                    var input = $('<input />');
-                    if (settings.width  != 'none') { input.attr('width', settings.width);  }
-                    if (settings.height != 'none') { input.attr('height', settings.height); }
-                    /* https://bugzilla.mozilla.org/show_bug.cgi?id=236791 */
-                    //input[0].setAttribute('autocomplete','off');
-                    input.attr('autocomplete','off');
-                    $(this).append(input);
-                    return(input);
-                }
-            },
-            textarea: {
-                element : function(settings, original) {
-                    var textarea = $('<textarea />');
-                    if (settings.rows) {
-                        textarea.attr('rows', settings.rows);
-                    } else if (settings.height != "none") {
-                        textarea.height(settings.height);
-                    }
-                    if (settings.cols) {
-                        textarea.attr('cols', settings.cols);
-                    } else if (settings.width != "none") {
-                        textarea.width(settings.width);
-                    }
-                    $(this).append(textarea);
-                    return(textarea);
-                }
-            },
-            select: {
-               element : function(settings, original) {
-                    var select = $('<select />');
-                    $(this).append(select);
-                    return(select);
-                },
-                content : function(data, settings, original) {
-                    /* If it is string assume it is json. */
-                    if (String == data.constructor) {      
-                        eval ('var json = ' + data);
-                    } else {
-                    /* Otherwise assume it is a hash already. */
-                        var json = data;
-                    }
-                    for (var key in json) {
-                        if (!json.hasOwnProperty(key)) {
-                            continue;
-                        }
-                        if ('selected' == key) {
-                            continue;
-                        } 
-                        var option = $('<option />').val(key).append(json[key]);
-                        $('select', this).append(option);    
-                    }                    
-                    /* Loop option again to set selected. IE needed this... */ 
-                    $('select', this).children().each(function() {
-                        if ($(this).val() == json['selected'] || 
-                            $(this).text() == $.trim(original.revert)) {
-                                $(this).attr('selected', 'selected');
-                        }
-                    });
-                    /* Submit on change if no submit button defined. */
-                    if (!settings.submit) {
-                        var form = this;
-                        $('select', this).change(function() {
-                            form.submit();
-                        });
-                    }
-                }
-            }
-        },
-
-        /* Add new input type */
-        addInputType: function(name, input) {
-            $.editable.types[name] = input;
-        }
-    };
-
-    /* Publicly accessible defaults. */
-    $.fn.editable.defaults = {
-        name       : 'value',
-        id         : 'id',
-        type       : 'text',
-        width      : 'auto',
-        height     : 'auto',
-        event      : 'click.editable',
-        onblur     : 'cancel',
-        loadtype   : 'GET',
-        loadtext   : 'Loading...',
-        placeholder: 'Click to edit',
-        loaddata   : {},
-        submitdata : {},
-        ajaxoptions: {}
-    };
-
-})(jQuery);
--- a/web/hdabo/static/hdabo/js/jquery.js	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8865 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.6
- * http://jquery.com/
- *
- * Copyright 2011, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2011, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Mon May 2 13:50:00 2011 -0400
- */
-(function( window, undefined ) {
-
-// Use the correct document accordingly with window argument (sandbox)
-var document = window.document,
-	navigator = window.navigator,
-	location = window.location;
-var jQuery = (function() {
-
-// 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, rootjQuery );
-	},
-
-	// Map over jQuery in case of overwrite
-	_jQuery = window.jQuery,
-
-	// Map over the $ in case of overwrite
-	_$ = window.$,
-
-	// 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\-]*)$)/,
-
-	// Check if a string has a non-whitespace character in it
-	rnotwhite = /\S/,
-
-	// Used for trimming whitespace
-	trimLeft = /^\s+/,
-	trimRight = /\s+$/,
-
-	// Check for digits
-	rdigit = /\d/,
-
-	// Match a standalone tag
-	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
-
-	// JSON RegExp
-	rvalidchars = /^[\],:{}\s]*$/,
-	rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
-	rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
-	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
-
-	// Useragent RegExp
-	rwebkit = /(webkit)[ \/]([\w.]+)/,
-	ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
-	rmsie = /(msie) ([\w.]+)/,
-	rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
-
-	// Keep a UserAgent string for use with jQuery.browser
-	userAgent = navigator.userAgent,
-
-	// For matching the engine and version of the browser
-	browserMatch,
-
-	// The deferred used on DOM ready
-	readyList,
-
-	// The ready event handler
-	DOMContentLoaded,
-
-	// Save a reference to some core methods
-	toString = Object.prototype.toString,
-	hasOwn = Object.prototype.hasOwnProperty,
-	push = Array.prototype.push,
-	slice = Array.prototype.slice,
-	trim = String.prototype.trim,
-	indexOf = Array.prototype.indexOf,
-
-	// [[Class]] -> type pairs
-	class2type = {};
-
-jQuery.fn = jQuery.prototype = {
-	constructor: jQuery,
-	init: function( selector, context, rootjQuery ) {
-		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 && document.body ) {
-			this.context = document;
-			this[0] = document.body;
-			this.selector = selector;
-			this.length = 1;
-			return this;
-		}
-
-		// Handle HTML strings
-		if ( typeof selector === "string" ) {
-			// Are we dealing with HTML string or an ID?
-			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
-				// Assume that strings that start and end with <> are HTML and skip the regex check
-				match = [ null, selector, null ];
-
-			} else {
-				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] ) {
-					context = context instanceof jQuery ? context[0] : context;
-					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 = jQuery.buildFragment( [ match[1] ], [ doc ] );
-						selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes;
-					}
-
-					return jQuery.merge( this, selector );
-
-				// HANDLE: $("#id")
-				} else {
-					elem = document.getElementById( match[2] );
-
-					// Check parentNode to catch when Blackberry 4.6 returns
-					// nodes that are no longer in the document #6963
-					if ( elem && elem.parentNode ) {
-						// 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: $(expr, $(...))
-			} else if ( !context || context.jquery ) {
-				return (context || rootjQuery).find( selector );
-
-			// HANDLE: $(expr, context)
-			// (which is just equivalent to: $(context).find(expr)
-			} else {
-				return this.constructor( 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.6",
-
-	// 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[ this.length + num ] : 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 = this.constructor();
-
-		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();
-
-		// Add the callback
-		readyList.done( 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 || this.constructor(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() {
-	var options, name, src, copy, copyIsArray, clone,
-		target = arguments[0] || {},
-		i = 1,
-		length = arguments.length,
-		deep = false;
-
-	// 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 plain objects or arrays
-				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
-					if ( copyIsArray ) {
-						copyIsArray = false;
-						clone = src && jQuery.isArray(src) ? src : [];
-
-					} else {
-						clone = src && jQuery.isPlainObject(src) ? src : {};
-					}
-
-					// 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 ) {
-		if ( window.$ === jQuery ) {
-			window.$ = _$;
-		}
-
-		if ( deep && window.jQuery === jQuery ) {
-			window.jQuery = _jQuery;
-		}
-
-		return jQuery;
-	},
-
-	// Is the DOM ready to be used? Set to true once it occurs.
-	isReady: false,
-
-	// A counter to track how many items to wait for before
-	// the ready event fires. See #6781
-	readyWait: 1,
-
-	// Hold (or release) the ready event
-	holdReady: function( hold ) {
-		if ( hold ) {
-			jQuery.readyWait++;
-		} else {
-			jQuery.ready( true );
-		}
-	},
-
-	// Handle when the DOM is ready
-	ready: function( wait ) {
-		// Either a released hold or an DOMready/load event and not yet ready
-		if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
-			// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-			if ( !document.body ) {
-				return setTimeout( jQuery.ready, 1 );
-			}
-
-			// Remember that the DOM is ready
-			jQuery.isReady = true;
-
-			// If a normal DOM Ready event fired, decrement, and wait if need be
-			if ( wait !== true && --jQuery.readyWait > 0 ) {
-				return;
-			}
-
-			// If there are functions bound, to execute
-			readyList.resolveWith( document, [ jQuery ] );
-
-			// Trigger any bound ready events
-			if ( jQuery.fn.trigger ) {
-				jQuery( document ).trigger( "ready" ).unbind( "ready" );
-			}
-		}
-	},
-
-	bindReady: function() {
-		if ( readyList ) {
-			return;
-		}
-
-		readyList = jQuery._Deferred();
-
-		// Catch cases where $(document).ready() is called after the
-		// browser event has already occurred.
-		if ( document.readyState === "complete" ) {
-			// Handle it asynchronously to allow scripts the opportunity to delay ready
-			return setTimeout( jQuery.ready, 1 );
-		}
-
-		// 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 jQuery.type(obj) === "function";
-	},
-
-	isArray: Array.isArray || function( obj ) {
-		return jQuery.type(obj) === "array";
-	},
-
-	// A crude way of determining if an object is a window
-	isWindow: function( obj ) {
-		return obj && typeof obj === "object" && "setInterval" in obj;
-	},
-
-	isNaN: function( obj ) {
-		return obj == null || !rdigit.test( obj ) || isNaN( obj );
-	},
-
-	type: function( obj ) {
-		return obj == null ?
-			String( obj ) :
-			class2type[ toString.call(obj) ] || "object";
-	},
-
-	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 || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
-			return false;
-		}
-
-		// Not own constructor property must be Object
-		if ( obj.constructor &&
-			!hasOwn.call(obj, "constructor") &&
-			!hasOwn.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 || hasOwn.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 );
-
-		// Attempt to parse using the native JSON parser first
-		if ( window.JSON && window.JSON.parse ) {
-			return window.JSON.parse( data );
-		}
-
-		// Make sure the incoming data is actual JSON
-		// Logic borrowed from http://json.org/json2.js
-		if ( rvalidchars.test( data.replace( rvalidescape, "@" )
-			.replace( rvalidtokens, "]" )
-			.replace( rvalidbraces, "")) ) {
-
-			return (new Function( "return " + data ))();
-
-		}
-		jQuery.error( "Invalid JSON: " + data );
-	},
-
-	// Cross-browser xml parsing
-	// (xml & tmp used internally)
-	parseXML: function( data , xml , tmp ) {
-
-		if ( window.DOMParser ) { // Standard
-			tmp = new DOMParser();
-			xml = tmp.parseFromString( data , "text/xml" );
-		} else { // IE
-			xml = new ActiveXObject( "Microsoft.XMLDOM" );
-			xml.async = "false";
-			xml.loadXML( data );
-		}
-
-		tmp = xml.documentElement;
-
-		if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) {
-			jQuery.error( "Invalid XML: " + data );
-		}
-
-		return xml;
-	},
-
-	noop: function() {},
-
-	// Evaluates a script in a global context
-	// Workarounds based on findings by Jim Driscoll
-	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
-	globalEval: function( data ) {
-		if ( data && rnotwhite.test( data ) ) {
-			// We use execScript on Internet Explorer
-			// We use an anonymous function so that context is window
-			// rather than jQuery in Firefox
-			( window.execScript || function( data ) {
-				window[ "eval" ].call( window, data );
-			} )( data );
-		}
-	},
-
-	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 ( ; i < length; ) {
-					if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
-						break;
-					}
-				}
-			}
-		}
-
-		return object;
-	},
-
-	// Use native String.trim function wherever possible
-	trim: trim ?
-		function( text ) {
-			return text == null ?
-				"" :
-				trim.call( text );
-		} :
-
-		// Otherwise use our own trimming functionality
-		function( text ) {
-			return text == null ?
-				"" :
-				text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
-		},
-
-	// 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)
-			// Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
-			var type = jQuery.type( array );
-
-			if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
-				push.call( ret, array );
-			} else {
-				jQuery.merge( ret, array );
-			}
-		}
-
-		return ret;
-	},
-
-	inArray: function( elem, array ) {
-
-		if ( indexOf ) {
-			return indexOf.call( array, 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 = [], retVal;
-		inv = !!inv;
-
-		// Go through the array, only saving the items
-		// that pass the validator function
-		for ( var i = 0, length = elems.length; i < length; i++ ) {
-			retVal = !!callback( elems[ i ], i );
-			if ( inv !== retVal ) {
-				ret.push( elems[ i ] );
-			}
-		}
-
-		return ret;
-	},
-
-	// arg is for internal usage only
-	map: function( elems, callback, arg ) {
-		var value, key, ret = [],
-			i = 0,
-			length = elems.length,
-			// jquery objects are treated as arrays
-			isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
-
-		// Go through the array, translating each of the items to their
-		if ( isArray ) {
-			for ( ; i < length; i++ ) {
-				value = callback( elems[ i ], i, arg );
-
-				if ( value != null ) {
-					ret[ ret.length ] = value;
-				}
-			}
-
-		// Go through every key on the object,
-		} else {
-			for ( key in elems ) {
-				value = callback( elems[ key ], key, arg );
-
-				if ( value != null ) {
-					ret[ ret.length ] = value;
-				}
-			}
-		}
-
-		// Flatten any nested arrays
-		return ret.concat.apply( [], ret );
-	},
-
-	// A global GUID counter for objects
-	guid: 1,
-
-	// Bind a function to a context, optionally partially applying any
-	// arguments.
-	proxy: function( fn, context ) {
-		if ( typeof context === "string" ) {
-			var tmp = fn[ context ];
-			context = fn;
-			fn = tmp;
-		}
-
-		// Quick check to determine if target is callable, in the spec
-		// this throws a TypeError, but we will just return undefined.
-		if ( !jQuery.isFunction( fn ) ) {
-			return undefined;
-		}
-
-		// Simulated bind
-		var args = slice.call( arguments, 2 ),
-			proxy = function() {
-				return fn.apply( context, args.concat( slice.call( arguments ) ) );
-			};
-
-		// Set the guid of unique handler to the same of original handler, so it can be removed
-		proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
-
-		return proxy;
-	},
-
-	// Mutifunctional method to get and set values to a collection
-	// The value/s can be optionally by executed if its a function
-	access: function( elems, key, value, exec, fn, pass ) {
-		var length = elems.length;
-
-		// Setting many attributes
-		if ( typeof key === "object" ) {
-			for ( var k in key ) {
-				jQuery.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;
-	},
-
-	now: function() {
-		return (new Date()).getTime();
-	},
-
-	// Use of jQuery.browser is frowned upon.
-	// More details: http://docs.jquery.com/Utilities/jQuery.browser
-	uaMatch: function( ua ) {
-		ua = ua.toLowerCase();
-
-		var match = rwebkit.exec( ua ) ||
-			ropera.exec( ua ) ||
-			rmsie.exec( ua ) ||
-			ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
-			[];
-
-		return { browser: match[1] || "", version: match[2] || "0" };
-	},
-
-	sub: function() {
-		function jQuerySub( selector, context ) {
-			return new jQuerySub.fn.init( selector, context );
-		}
-		jQuery.extend( true, jQuerySub, this );
-		jQuerySub.superclass = this;
-		jQuerySub.fn = jQuerySub.prototype = this();
-		jQuerySub.fn.constructor = jQuerySub;
-		jQuerySub.sub = this.sub;
-		jQuerySub.fn.init = function init( selector, context ) {
-			if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
-				context = jQuerySub( context );
-			}
-
-			return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
-		};
-		jQuerySub.fn.init.prototype = jQuerySub.fn;
-		var rootjQuerySub = jQuerySub(document);
-		return jQuerySub;
-	},
-
-	browser: {}
-});
-
-// Populate the class2type map
-jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
-	class2type[ "[object " + name + "]" ] = name.toLowerCase();
-});
-
-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;
-}
-
-// IE doesn't match non-breaking spaces with \s
-if ( rnotwhite.test( "\xA0" ) ) {
-	trimLeft = /^[\s\xA0]+/;
-	trimRight = /[\s\xA0]+$/;
-}
-
-// 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(e) {
-		setTimeout( doScrollCheck, 1 );
-		return;
-	}
-
-	// and execute any waiting functions
-	jQuery.ready();
-}
-
-// Expose jQuery to the global object
-return jQuery;
-
-})();
-
-
-var // Promise methods
-	promiseMethods = "done fail isResolved isRejected promise then always pipe".split( " " ),
-	// Static reference to slice
-	sliceDeferred = [].slice;
-
-jQuery.extend({
-	// Create a simple deferred (one callbacks list)
-	_Deferred: function() {
-		var // callbacks list
-			callbacks = [],
-			// stored [ context , args ]
-			fired,
-			// to avoid firing when already doing so
-			firing,
-			// flag to know if the deferred has been cancelled
-			cancelled,
-			// the deferred itself
-			deferred  = {
-
-				// done( f1, f2, ...)
-				done: function() {
-					if ( !cancelled ) {
-						var args = arguments,
-							i,
-							length,
-							elem,
-							type,
-							_fired;
-						if ( fired ) {
-							_fired = fired;
-							fired = 0;
-						}
-						for ( i = 0, length = args.length; i < length; i++ ) {
-							elem = args[ i ];
-							type = jQuery.type( elem );
-							if ( type === "array" ) {
-								deferred.done.apply( deferred, elem );
-							} else if ( type === "function" ) {
-								callbacks.push( elem );
-							}
-						}
-						if ( _fired ) {
-							deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] );
-						}
-					}
-					return this;
-				},
-
-				// resolve with given context and args
-				resolveWith: function( context, args ) {
-					if ( !cancelled && !fired && !firing ) {
-						// make sure args are available (#8421)
-						args = args || [];
-						firing = 1;
-						try {
-							while( callbacks[ 0 ] ) {
-								callbacks.shift().apply( context, args );
-							}
-						}
-						finally {
-							fired = [ context, args ];
-							firing = 0;
-						}
-					}
-					return this;
-				},
-
-				// resolve with this as context and given arguments
-				resolve: function() {
-					deferred.resolveWith( this, arguments );
-					return this;
-				},
-
-				// Has this deferred been resolved?
-				isResolved: function() {
-					return !!( firing || fired );
-				},
-
-				// Cancel
-				cancel: function() {
-					cancelled = 1;
-					callbacks = [];
-					return this;
-				}
-			};
-
-		return deferred;
-	},
-
-	// Full fledged deferred (two callbacks list)
-	Deferred: function( func ) {
-		var deferred = jQuery._Deferred(),
-			failDeferred = jQuery._Deferred(),
-			promise;
-		// Add errorDeferred methods, then and promise
-		jQuery.extend( deferred, {
-			then: function( doneCallbacks, failCallbacks ) {
-				deferred.done( doneCallbacks ).fail( failCallbacks );
-				return this;
-			},
-			always: function() {
-				return deferred.done.apply( deferred, arguments ).fail.apply( this, arguments );
-			},
-			fail: failDeferred.done,
-			rejectWith: failDeferred.resolveWith,
-			reject: failDeferred.resolve,
-			isRejected: failDeferred.isResolved,
-			pipe: function( fnDone, fnFail ) {
-				return jQuery.Deferred(function( newDefer ) {
-					jQuery.each( {
-						done: [ fnDone, "resolve" ],
-						fail: [ fnFail, "reject" ]
-					}, function( handler, data ) {
-						var fn = data[ 0 ],
-							action = data[ 1 ],
-							returned;
-						if ( jQuery.isFunction( fn ) ) {
-							deferred[ handler ](function() {
-								returned = fn.apply( this, arguments );
-								if ( jQuery.isFunction( returned.promise ) ) {
-									returned.promise().then( newDefer.resolve, newDefer.reject );
-								} else {
-									newDefer[ action ]( returned );
-								}
-							});
-						} else {
-							deferred[ handler ]( newDefer[ action ] );
-						}
-					});
-				}).promise();
-			},
-			// Get a promise for this deferred
-			// If obj is provided, the promise aspect is added to the object
-			promise: function( obj ) {
-				if ( obj == null ) {
-					if ( promise ) {
-						return promise;
-					}
-					promise = obj = {};
-				}
-				var i = promiseMethods.length;
-				while( i-- ) {
-					obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ];
-				}
-				return obj;
-			}
-		});
-		// Make sure only one callback list will be used
-		deferred.done( failDeferred.cancel ).fail( deferred.cancel );
-		// Unexpose cancel
-		delete deferred.cancel;
-		// Call given func if any
-		if ( func ) {
-			func.call( deferred, deferred );
-		}
-		return deferred;
-	},
-
-	// Deferred helper
-	when: function( firstParam ) {
-		var args = arguments,
-			i = 0,
-			length = args.length,
-			count = length,
-			deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
-				firstParam :
-				jQuery.Deferred();
-		function resolveFunc( i ) {
-			return function( value ) {
-				args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
-				if ( !( --count ) ) {
-					// Strange bug in FF4:
-					// Values changed onto the arguments object sometimes end up as undefined values
-					// outside the $.when method. Cloning the object into a fresh array solves the issue
-					deferred.resolveWith( deferred, sliceDeferred.call( args, 0 ) );
-				}
-			};
-		}
-		if ( length > 1 ) {
-			for( ; i < length; i++ ) {
-				if ( args[ i ] && jQuery.isFunction( args[ i ].promise ) ) {
-					args[ i ].promise().then( resolveFunc(i), deferred.reject );
-				} else {
-					--count;
-				}
-			}
-			if ( !count ) {
-				deferred.resolveWith( deferred, args );
-			}
-		} else if ( deferred !== firstParam ) {
-			deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
-		}
-		return deferred.promise();
-	}
-});
-
-
-
-jQuery.support = (function() {
-
-	var div = document.createElement( "div" ),
-		all,
-		a,
-		select,
-		opt,
-		input,
-		marginDiv,
-		support,
-		fragment,
-		body,
-		bodyStyle,
-		tds,
-		events,
-		eventName,
-		i,
-		isSupported;
-
-	// Preliminary tests
-	div.setAttribute("className", "t");
-	div.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
-
-	all = div.getElementsByTagName( "*" );
-	a = div.getElementsByTagName( "a" )[ 0 ];
-
-	// Can't get basic test support
-	if ( !all || !all.length || !a ) {
-		return {};
-	}
-
-	// First batch of supports tests
-	select = document.createElement( "select" );
-	opt = select.appendChild( document.createElement("option") );
-	input = div.getElementsByTagName( "input" )[ 0 ];
-
-	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 instead)
-		style: /top/.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: ( input.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: opt.selected,
-
-		// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
-		getSetAttribute: div.className !== "t",
-
-		// Will be defined later
-		submitBubbles: true,
-		changeBubbles: true,
-		focusinBubbles: false,
-		deleteExpando: true,
-		noCloneEvent: true,
-		inlineBlockNeedsLayout: false,
-		shrinkWrapBlocks: false,
-		reliableMarginRight: true
-	};
-
-	// Make sure checked status is properly cloned
-	input.checked = true;
-	support.noCloneChecked = input.cloneNode( true ).checked;
-
-	// Make sure that the options inside disabled selects aren't marked as disabled
-	// (WebKit marks them as disabled)
-	select.disabled = true;
-	support.optDisabled = !opt.disabled;
-
-	// Test to see if it's possible to delete an expando from an element
-	// Fails in Internet Explorer
-	try {
-		delete div.test;
-	} catch( e ) {
-		support.deleteExpando = false;
-	}
-
-	if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
-		div.attachEvent( "onclick", function click() {
-			// Cloning a node shouldn't copy over any
-			// bound event handlers (IE does this)
-			support.noCloneEvent = false;
-			div.detachEvent( "onclick", click );
-		});
-		div.cloneNode( true ).fireEvent( "onclick" );
-	}
-
-	// Check if a radio maintains it's value
-	// after being appended to the DOM
-	input = document.createElement("input");
-	input.value = "t";
-	input.setAttribute("type", "radio");
-	support.radioValue = input.value === "t";
-
-	input.setAttribute("checked", "checked");
-	div.appendChild( input );
-	fragment = document.createDocumentFragment();
-	fragment.appendChild( div.firstChild );
-
-	// WebKit doesn't clone checked state correctly in fragments
-	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
-	div.innerHTML = "";
-
-	// Figure out if the W3C box model works as expected
-	div.style.width = div.style.paddingLeft = "1px";
-
-	// We use our own, invisible, body
-	body = document.createElement( "body" );
-	bodyStyle = {
-		visibility: "hidden",
-		width: 0,
-		height: 0,
-		border: 0,
-		margin: 0,
-		// Set background to avoid IE crashes when removing (#9028)
-		background: "none"
-	};
-	for ( i in bodyStyle ) {
-		body.style[ i ] = bodyStyle[ i ];
-	}
-	body.appendChild( div );
-	document.documentElement.appendChild( body );
-
-	// Check if a disconnected checkbox will retain its checked
-	// value of true after appended to the DOM (IE6/7)
-	support.appendChecked = input.checked;
-
-	support.boxModel = div.offsetWidth === 2;
-
-	if ( "zoom" in div.style ) {
-		// Check if natively block-level elements act like inline-block
-		// elements when setting their display to 'inline' and giving
-		// them layout
-		// (IE < 8 does this)
-		div.style.display = "inline";
-		div.style.zoom = 1;
-		support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );
-
-		// Check if elements with layout shrink-wrap their children
-		// (IE 6 does this)
-		div.style.display = "";
-		div.innerHTML = "<div style='width:4px;'></div>";
-		support.shrinkWrapBlocks = ( div.offsetWidth !== 2 );
-	}
-
-	div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
-	tds = div.getElementsByTagName( "td" );
-
-	// Check if table cells still have offsetWidth/Height when they are set
-	// to display:none and there are still other visible table cells in a
-	// table row; if so, offsetWidth/Height are not reliable for use when
-	// determining if an element has been hidden directly using
-	// display:none (it is still safe to use offsets if a parent element is
-	// hidden; don safety goggles and see bug #4512 for more information).
-	// (only IE 8 fails this test)
-	isSupported = ( tds[ 0 ].offsetHeight === 0 );
-
-	tds[ 0 ].style.display = "";
-	tds[ 1 ].style.display = "none";
-
-	// Check if empty table cells still have offsetWidth/Height
-	// (IE < 8 fail this test)
-	support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
-	div.innerHTML = "";
-
-	// Check if div with explicit width and no margin-right incorrectly
-	// gets computed margin-right based on width of container. For more
-	// info see bug #3333
-	// Fails in WebKit before Feb 2011 nightlies
-	// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
-	if ( document.defaultView && document.defaultView.getComputedStyle ) {
-		marginDiv = document.createElement( "div" );
-		marginDiv.style.width = "0";
-		marginDiv.style.marginRight = "0";
-		div.appendChild( marginDiv );
-		support.reliableMarginRight =
-			( parseInt( document.defaultView.getComputedStyle( marginDiv, null ).marginRight, 10 ) || 0 ) === 0;
-	}
-
-	// Remove the body element we added
-	body.innerHTML = "";
-	document.documentElement.removeChild( body );
-
-	// Technique from Juriy Zaytsev
-	// http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
-	// We only care about the case where non-standard event systems
-	// are used, namely in IE. Short-circuiting here helps us to
-	// avoid an eval call (in setAttribute) which can cause CSP
-	// to go haywire. See: https://developer.mozilla.org/en/Security/CSP
-	if ( div.attachEvent ) {
-		for( i in {
-			submit: 1,
-			change: 1,
-			focusin: 1
-		} ) {
-			eventName = "on" + i;
-			isSupported = ( eventName in div );
-			if ( !isSupported ) {
-				div.setAttribute( eventName, "return;" );
-				isSupported = ( typeof div[ eventName ] === "function" );
-			}
-			support[ i + "Bubbles" ] = isSupported;
-		}
-	}
-
-	return support;
-})();
-
-// Keep track of boxModel
-jQuery.boxModel = jQuery.support.boxModel;
-
-
-
-
-var rbrace = /^(?:\{.*\}|\[.*\])$/,
-	rmultiDash = /([a-z])([A-Z])/g;
-
-jQuery.extend({
-	cache: {},
-
-	// Please use with caution
-	uuid: 0,
-
-	// Unique for each copy of jQuery on the page
-	// Non-digits removed to match rinlinejQuery
-	expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
-
-	// The following elements throw uncatchable exceptions if you
-	// attempt to add expando properties to them.
-	noData: {
-		"embed": true,
-		// Ban all objects except for Flash (which handle expandos)
-		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
-		"applet": true
-	},
-
-	hasData: function( elem ) {
-		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
-
-		return !!elem && !isEmptyDataObject( elem );
-	},
-
-	data: function( elem, name, data, pvt /* Internal Use Only */ ) {
-		if ( !jQuery.acceptData( elem ) ) {
-			return;
-		}
-
-		var internalKey = jQuery.expando, getByName = typeof name === "string", thisCache,
-
-			// We have to handle DOM nodes and JS objects differently because IE6-7
-			// can't GC object references properly across the DOM-JS boundary
-			isNode = elem.nodeType,
-
-			// Only DOM nodes need the global jQuery cache; JS object data is
-			// attached directly to the object so GC can occur automatically
-			cache = isNode ? jQuery.cache : elem,
-
-			// Only defining an ID for JS objects if its cache already exists allows
-			// the code to shortcut on the same path as a DOM node with no cache
-			id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando;
-
-		// Avoid doing any more work than we need to when trying to get data on an
-		// object that has no data at all
-		if ( (!id || (pvt && id && !cache[ id ][ internalKey ])) && getByName && data === undefined ) {
-			return;
-		}
-
-		if ( !id ) {
-			// Only DOM nodes need a new unique ID for each element since their data
-			// ends up in the global cache
-			if ( isNode ) {
-				elem[ jQuery.expando ] = id = ++jQuery.uuid;
-			} else {
-				id = jQuery.expando;
-			}
-		}
-
-		if ( !cache[ id ] ) {
-			cache[ id ] = {};
-
-			// TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
-			// metadata on plain JS objects when the object is serialized using
-			// JSON.stringify
-			if ( !isNode ) {
-				cache[ id ].toJSON = jQuery.noop;
-			}
-		}
-
-		// An object can be passed to jQuery.data instead of a key/value pair; this gets
-		// shallow copied over onto the existing cache
-		if ( typeof name === "object" || typeof name === "function" ) {
-			if ( pvt ) {
-				cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name);
-			} else {
-				cache[ id ] = jQuery.extend(cache[ id ], name);
-			}
-		}
-
-		thisCache = cache[ id ];
-
-		// Internal jQuery data is stored in a separate object inside the object's data
-		// cache in order to avoid key collisions between internal data and user-defined
-		// data
-		if ( pvt ) {
-			if ( !thisCache[ internalKey ] ) {
-				thisCache[ internalKey ] = {};
-			}
-
-			thisCache = thisCache[ internalKey ];
-		}
-
-		if ( data !== undefined ) {
-			thisCache[ name ] = data;
-		}
-
-		// TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should
-		// not attempt to inspect the internal events object using jQuery.data, as this
-		// internal data object is undocumented and subject to change.
-		if ( name === "events" && !thisCache[name] ) {
-			return thisCache[ internalKey ] && thisCache[ internalKey ].events;
-		}
-
-		return getByName ? thisCache[ name ] : thisCache;
-	},
-
-	removeData: function( elem, name, pvt /* Internal Use Only */ ) {
-		if ( !jQuery.acceptData( elem ) ) {
-			return;
-		}
-
-		var internalKey = jQuery.expando, isNode = elem.nodeType,
-
-			// See jQuery.data for more information
-			cache = isNode ? jQuery.cache : elem,
-
-			// See jQuery.data for more information
-			id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
-
-		// If there is already no cache entry for this object, there is no
-		// purpose in continuing
-		if ( !cache[ id ] ) {
-			return;
-		}
-
-		if ( name ) {
-			var thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ];
-
-			if ( thisCache ) {
-				delete thisCache[ name ];
-
-				// If there is no data left in the cache, we want to continue
-				// and let the cache object itself get destroyed
-				if ( !isEmptyDataObject(thisCache) ) {
-					return;
-				}
-			}
-		}
-
-		// See jQuery.data for more information
-		if ( pvt ) {
-			delete cache[ id ][ internalKey ];
-
-			// Don't destroy the parent cache unless the internal data object
-			// had been the only thing left in it
-			if ( !isEmptyDataObject(cache[ id ]) ) {
-				return;
-			}
-		}
-
-		var internalCache = cache[ id ][ internalKey ];
-
-		// Browsers that fail expando deletion also refuse to delete expandos on
-		// the window, but it will allow it on all other JS objects; other browsers
-		// don't care
-		if ( jQuery.support.deleteExpando || cache != window ) {
-			delete cache[ id ];
-		} else {
-			cache[ id ] = null;
-		}
-
-		// We destroyed the entire user cache at once because it's faster than
-		// iterating through each key, but we need to continue to persist internal
-		// data if it existed
-		if ( internalCache ) {
-			cache[ id ] = {};
-			// TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
-			// metadata on plain JS objects when the object is serialized using
-			// JSON.stringify
-			if ( !isNode ) {
-				cache[ id ].toJSON = jQuery.noop;
-			}
-
-			cache[ id ][ internalKey ] = internalCache;
-
-		// Otherwise, we need to eliminate the expando on the node to avoid
-		// false lookups in the cache for entries that no longer exist
-		} else if ( isNode ) {
-			// IE does not allow us to delete expando properties from nodes,
-			// nor does it have a removeAttribute function on Document nodes;
-			// we must handle all of these cases
-			if ( jQuery.support.deleteExpando ) {
-				delete elem[ jQuery.expando ];
-			} else if ( elem.removeAttribute ) {
-				elem.removeAttribute( jQuery.expando );
-			} else {
-				elem[ jQuery.expando ] = null;
-			}
-		}
-	},
-
-	// For internal use only.
-	_data: function( elem, name, data ) {
-		return jQuery.data( elem, name, data, true );
-	},
-
-	// A method for determining if a DOM node can handle the data expando
-	acceptData: function( elem ) {
-		if ( elem.nodeName ) {
-			var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
-
-			if ( match ) {
-				return !(match === true || elem.getAttribute("classid") !== match);
-			}
-		}
-
-		return true;
-	}
-});
-
-jQuery.fn.extend({
-	data: function( key, value ) {
-		var data = null;
-
-		if ( typeof key === "undefined" ) {
-			if ( this.length ) {
-				data = jQuery.data( this[0] );
-
-				if ( this[0].nodeType === 1 ) {
-			    var attr = this[0].attributes, name;
-					for ( var i = 0, l = attr.length; i < l; i++ ) {
-						name = attr[i].name;
-
-						if ( name.indexOf( "data-" ) === 0 ) {
-							name = jQuery.camelCase( name.substring(5) );
-
-							dataAttr( this[0], name, data[ name ] );
-						}
-					}
-				}
-			}
-
-			return data;
-
-		} 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 ) {
-			data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
-
-			// Try to fetch any internally stored data first
-			if ( data === undefined && this.length ) {
-				data = jQuery.data( this[0], key );
-				data = dataAttr( this[0], key, data );
-			}
-
-			return data === undefined && parts[1] ?
-				this.data( parts[0] ) :
-				data;
-
-		} else {
-			return this.each(function() {
-				var $this = jQuery( this ),
-					args = [ parts[0], value ];
-
-				$this.triggerHandler( "setData" + parts[1] + "!", args );
-				jQuery.data( this, key, value );
-				$this.triggerHandler( "changeData" + parts[1] + "!", args );
-			});
-		}
-	},
-
-	removeData: function( key ) {
-		return this.each(function() {
-			jQuery.removeData( this, key );
-		});
-	}
-});
-
-function dataAttr( elem, key, data ) {
-	// If nothing was found internally, try to fetch any
-	// data from the HTML5 data-* attribute
-	if ( data === undefined && elem.nodeType === 1 ) {
-		name = "data-" + key.replace( rmultiDash, "$1-$2" ).toLowerCase();
-
-		data = elem.getAttribute( name );
-
-		if ( typeof data === "string" ) {
-			try {
-				data = data === "true" ? true :
-				data === "false" ? false :
-				data === "null" ? null :
-				!jQuery.isNaN( data ) ? parseFloat( data ) :
-					rbrace.test( data ) ? jQuery.parseJSON( data ) :
-					data;
-			} catch( e ) {}
-
-			// Make sure we set the data so it isn't changed later
-			jQuery.data( elem, key, data );
-
-		} else {
-			data = undefined;
-		}
-	}
-
-	return data;
-}
-
-// TODO: This is a hack for 1.5 ONLY to allow objects with a single toJSON
-// property to be considered empty objects; this property always exists in
-// order to make sure JSON.stringify does not expose internal metadata
-function isEmptyDataObject( obj ) {
-	for ( var name in obj ) {
-		if ( name !== "toJSON" ) {
-			return false;
-		}
-	}
-
-	return true;
-}
-
-
-
-
-function handleQueueMarkDefer( elem, type, src ) {
-	var deferDataKey = type + "defer",
-		queueDataKey = type + "queue",
-		markDataKey = type + "mark",
-		defer = jQuery.data( elem, deferDataKey, undefined, true );
-	if ( defer &&
-		( src === "queue" || !jQuery.data( elem, queueDataKey, undefined, true ) ) &&
-		( src === "mark" || !jQuery.data( elem, markDataKey, undefined, true ) ) ) {
-		// Give room for hard-coded callbacks to fire first
-		// and eventually mark/queue something else on the element
-		setTimeout( function() {
-			if ( !jQuery.data( elem, queueDataKey, undefined, true ) &&
-				!jQuery.data( elem, markDataKey, undefined, true ) ) {
-				jQuery.removeData( elem, deferDataKey, true );
-				defer.resolve();
-			}
-		}, 0 );
-	}
-}
-
-jQuery.extend({
-
-	_mark: function( elem, type ) {
-		if ( elem ) {
-			type = (type || "fx") + "mark";
-			jQuery.data( elem, type, (jQuery.data(elem,type,undefined,true) || 0) + 1, true );
-		}
-	},
-
-	_unmark: function( force, elem, type ) {
-		if ( force !== true ) {
-			type = elem;
-			elem = force;
-			force = false;
-		}
-		if ( elem ) {
-			type = type || "fx";
-			var key = type + "mark",
-				count = force ? 0 : ( (jQuery.data( elem, key, undefined, true) || 1 ) - 1 );
-			if ( count ) {
-				jQuery.data( elem, key, count, true );
-			} else {
-				jQuery.removeData( elem, key, true );
-				handleQueueMarkDefer( elem, type, "mark" );
-			}
-		}
-	},
-
-	queue: function( elem, type, data ) {
-		if ( elem ) {
-			type = (type || "fx") + "queue";
-			var q = jQuery.data( elem, type, undefined, true );
-			// Speed up dequeue by getting out quickly if this is just a lookup
-			if ( data ) {
-				if ( !q || jQuery.isArray(data) ) {
-					q = jQuery.data( elem, type, jQuery.makeArray(data), true );
-				} else {
-					q.push( data );
-				}
-			}
-			return q || [];
-		}
-	},
-
-	dequeue: function( elem, type ) {
-		type = type || "fx";
-
-		var queue = jQuery.queue( elem, type ),
-			fn = queue.shift(),
-			defer;
-
-		// 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);
-			});
-		}
-
-		if ( !queue.length ) {
-			jQuery.removeData( elem, type + "queue", true );
-			handleQueueMarkDefer( elem, type, "queue" );
-		}
-	}
-});
-
-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() {
-			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", [] );
-	},
-	// Get a promise resolved when queues of a certain type
-	// are emptied (fx is the type by default)
-	promise: function( type, object ) {
-		if ( typeof type !== "string" ) {
-			object = type;
-			type = undefined;
-		}
-		type = type || "fx";
-		var defer = jQuery.Deferred(),
-			elements = this,
-			i = elements.length,
-			count = 1,
-			deferDataKey = type + "defer",
-			queueDataKey = type + "queue",
-			markDataKey = type + "mark";
-		function resolve() {
-			if ( !( --count ) ) {
-				defer.resolveWith( elements, [ elements ] );
-			}
-		}
-		while( i-- ) {
-			if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
-					( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
-						jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
-					jQuery.data( elements[ i ], deferDataKey, jQuery._Deferred(), true ) )) {
-				count++;
-				tmp.done( resolve );
-			}
-		}
-		resolve();
-		return defer.promise();
-	}
-});
-
-
-
-
-var rclass = /[\n\t\r]/g,
-	rspace = /\s+/,
-	rreturn = /\r/g,
-	rtype = /^(?:button|input)$/i,
-	rfocusable = /^(?:button|input|object|select|textarea)$/i,
-	rclickable = /^a(?:rea)?$/i,
-	rspecial = /^(?:data-|aria-)/,
-	rinvalidChar = /\:/,
-	formHook;
-
-jQuery.fn.extend({
-	attr: function( name, value ) {
-		return jQuery.access( this, name, value, true, jQuery.attr );
-	},
-
-	removeAttr: function( name ) {
-		return this.each(function() {
-			jQuery.removeAttr( this, name );
-		});
-	},
-	
-	prop: function( name, value ) {
-		return jQuery.access( this, name, value, true, jQuery.prop );
-	},
-	
-	removeProp: function( name ) {
-		return this.each(function() {
-			// try/catch handles cases where IE balks (such as removing a property on window)
-			try {
-				this[ name ] = undefined;
-				delete this[ name ];
-			} catch( e ) {}
-		});
-	},
-
-	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 ) {
-		var hooks, ret,
-			elem = this[0];
-		
-		if ( !arguments.length ) {
-			if ( elem ) {
-				hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];
-
-				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
-					return ret;
-				}
-
-				return (elem.value || "").replace(rreturn, "");
-			}
-
-			return undefined;
-		}
-
-		var isFunction = jQuery.isFunction( value );
-
-		return this.each(function( i ) {
-			var self = jQuery(this), val;
-
-			if ( this.nodeType !== 1 ) {
-				return;
-			}
-
-			if ( isFunction ) {
-				val = value.call( this, i, self.val() );
-			} else {
-				val = value;
-			}
-
-			// Treat null/undefined as ""; convert numbers to string
-			if ( val == null ) {
-				val = "";
-			} else if ( typeof val === "number" ) {
-				val += "";
-			} else if ( jQuery.isArray( val ) ) {
-				val = jQuery.map(val, function ( value ) {
-					return value == null ? "" : value + "";
-				});
-			}
-
-			hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];
-
-			// If set returns undefined, fall back to normal setting
-			if ( !hooks || ("set" in hooks && hooks.set( this, val, "value" ) === undefined) ) {
-				this.value = val;
-			}
-		});
-	}
-});
-
-jQuery.extend({
-	valHooks: {
-		option: {
-			get: function( elem ) {
-				// attributes.value is undefined in Blackberry 4.7 but
-				// uses .value. See #6932
-				var val = elem.attributes.value;
-				return !val || val.specified ? elem.value : elem.text;
-			}
-		},
-		select: {
-			get: function( elem ) {
-				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 ];
-
-					// Don't return options that are disabled or in a disabled optgroup
-					if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
-							(!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
-
-						// Get the specific 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 );
-					}
-				}
-
-				// Fixes Bug #2551 -- select.val() broken in IE after form.reset()
-				if ( one && !values.length && options.length ) {
-					return jQuery( options[ index ] ).val();
-				}
-
-				return values;
-			},
-
-			set: function( elem, value ) {
-				var values = jQuery.makeArray( value );
-
-				jQuery(elem).find("option").each(function() {
-					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
-				});
-
-				if ( !values.length ) {
-					elem.selectedIndex = -1;
-				}
-				return values;
-			}
-		}
-	},
-
-	attrFn: {
-		val: true,
-		css: true,
-		html: true,
-		text: true,
-		data: true,
-		width: true,
-		height: true,
-		offset: true
-	},
-	
-	attrFix: {
-		// Always normalize to ensure hook usage
-		tabindex: "tabIndex",
-		readonly: "readOnly"
-	},
-	
-	attr: function( elem, name, value, pass ) {
-		var nType = elem.nodeType;
-		
-		// don't get/set attributes on text, comment and attribute nodes
-		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
-			return undefined;
-		}
-
-		if ( pass && name in jQuery.attrFn ) {
-			return jQuery( elem )[ name ]( value );
-		}
-		
-		var ret, hooks,
-			notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-		
-		// Normalize the name if needed
-		name = notxml && jQuery.attrFix[ name ] || name;
-
-		// Get the appropriate hook, or the formHook
-		// if getSetAttribute is not supported and we have form objects in IE6/7
-		hooks = jQuery.attrHooks[ name ] ||
-			( formHook && (jQuery.nodeName( elem, "form" ) || rinvalidChar.test( name )) ?
-				formHook :
-				undefined );
-
-		if ( value !== undefined ) {
-
-			if ( value === null || (value === false && !rspecial.test( name )) ) {
-				jQuery.removeAttr( elem, name );
-				return undefined;
-
-			} else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
-				return ret;
-
-			} else {
-
-				// Set boolean attributes to the same name
-				if ( value === true && !rspecial.test( name ) ) {
-					value = name;
-				}
-
-				elem.setAttribute( name, "" + value );
-				return value;
-			}
-
-		} else {
-
-			if ( hooks && "get" in hooks && notxml ) {
-				return hooks.get( elem, name );
-
-			} else {
-
-				ret = elem.getAttribute( name );
-
-				// Non-existent attributes return null, we normalize to undefined
-				return ret === null ?
-					undefined :
-					ret;
-			}
-		}
-	},
-	
-	removeAttr: function( elem, name ) {
-		if ( elem.nodeType === 1 ) {
-			name = jQuery.attrFix[ name ] || name;
-		
-			if ( jQuery.support.getSetAttribute ) {
-				// Use removeAttribute in browsers that support it
-				elem.removeAttribute( name );
-			} else {
-				jQuery.attr( elem, name, "" );
-				elem.removeAttributeNode( elem.getAttributeNode( name ) );
-			}
-		}
-	},
-
-	attrHooks: {
-		type: {
-			set: function( elem, value ) {
-				// We can't allow the type property to be changed (since it causes problems in IE)
-				if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
-					jQuery.error( "type property can't be changed" );
-				} else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
-					// Setting the type on a radio button after the value resets the value in IE6-9
-					// Reset value to it's default in case type is set after value
-					// This is for element creation
-					var val = elem.getAttribute("value");
-					elem.setAttribute( "type", value );
-					if ( val ) {
-						elem.value = val;
-					}
-					return value;
-				}
-			}
-		},
-		tabIndex: {
-			get: function( elem ) {
-				// 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/
-				var attributeNode = elem.getAttributeNode("tabIndex");
-
-				return attributeNode && attributeNode.specified ?
-					parseInt( attributeNode.value, 10 ) :
-					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
-						0 :
-						undefined;
-			}
-		}
-	},
-	
-	propFix: {},
-	
-	prop: function( elem, name, value ) {
-		var nType = elem.nodeType;
-		
-		// don't get/set properties on text, comment and attribute nodes
-		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
-			return undefined;
-		}
-		
-		var ret, hooks,
-			notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-		
-		// Try to normalize/fix the name
-		name = notxml && jQuery.propFix[ name ] || name;
-		
-		hooks = jQuery.propHooks[ name ];
-		
-		if ( value !== undefined ) {
-			if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
-				return ret;
-			
-			} else {
-				return (elem[ name ] = value);
-			}
-		
-		} else {
-			if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== undefined ) {
-				return ret;
-				
-			} else {
-				return elem[ name ];
-			}
-		}
-	},
-	
-	propHooks: {}
-});
-
-// IE6/7 do not support getting/setting some attributes with get/setAttribute
-if ( !jQuery.support.getSetAttribute ) {
-	jQuery.attrFix = jQuery.extend( jQuery.attrFix, {
-		"for": "htmlFor",
-		"class": "className",
-		maxlength: "maxLength",
-		cellspacing: "cellSpacing",
-		cellpadding: "cellPadding",
-		rowspan: "rowSpan",
-		colspan: "colSpan",
-		usemap: "useMap",
-		frameborder: "frameBorder"
-	});
-	
-	// Use this for any attribute on a form in IE6/7
-	formHook = jQuery.attrHooks.name = jQuery.attrHooks.value = jQuery.valHooks.button = {
-		get: function( elem, name ) {
-			var ret;
-			if ( name === "value" && !jQuery.nodeName( elem, "button" ) ) {
-				return elem.getAttribute( name );
-			}
-			ret = elem.getAttributeNode( name );
-			// Return undefined if not specified instead of empty string
-			return ret && ret.specified ?
-				ret.nodeValue :
-				undefined;
-		},
-		set: function( elem, value, name ) {
-			// Check form objects in IE (multiple bugs related)
-			// Only use nodeValue if the attribute node exists on the form
-			var ret = elem.getAttributeNode( name );
-			if ( ret ) {
-				ret.nodeValue = value;
-				return value;
-			}
-		}
-	};
-
-	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
-	// This is for removals
-	jQuery.each([ "width", "height" ], function( i, name ) {
-		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
-			set: function( elem, value ) {
-				if ( value === "" ) {
-					elem.setAttribute( name, "auto" );
-					return value;
-				}
-			}
-		});
-	});
-}
-
-
-// Some attributes require a special call on IE
-if ( !jQuery.support.hrefNormalized ) {
-	jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
-		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
-			get: function( elem ) {
-				var ret = elem.getAttribute( name, 2 );
-				return ret === null ? undefined : ret;
-			}
-		});
-	});
-}
-
-if ( !jQuery.support.style ) {
-	jQuery.attrHooks.style = {
-		get: function( elem ) {
-			// Return undefined in the case of empty string
-			// Normalize to lowercase since IE uppercases css property names
-			return elem.style.cssText.toLowerCase() || undefined;
-		},
-		set: function( elem, value ) {
-			return (elem.style.cssText = "" + value);
-		}
-	};
-}
-
-// Safari mis-reports the default selected property of an option
-// Accessing the parent's selectedIndex property fixes it
-if ( !jQuery.support.optSelected ) {
-	jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
-		get: function( elem ) {
-			var parent = elem.parentNode;
-
-			if ( parent ) {
-				parent.selectedIndex;
-
-				// Make sure that it also works with optgroups, see #5701
-				if ( parent.parentNode ) {
-					parent.parentNode.selectedIndex;
-				}
-			}
-		}
-	});
-}
-
-// Radios and checkboxes getter/setter
-if ( !jQuery.support.checkOn ) {
-	jQuery.each([ "radio", "checkbox" ], function() {
-		jQuery.valHooks[ this ] = {
-			get: function( elem ) {
-				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
-				return elem.getAttribute("value") === null ? "on" : elem.value;
-			}
-		};
-	});
-}
-jQuery.each([ "radio", "checkbox" ], function() {
-	jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
-		set: function( elem, value ) {
-			if ( jQuery.isArray( value ) ) {
-				return (elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0);
-			}
-		}
-	});
-});
-
-
-
-
-var hasOwn = Object.prototype.hasOwnProperty,
-	rnamespaces = /\.(.*)$/,
-	rformElems = /^(?:textarea|input|select)$/i,
-	rperiod = /\./g,
-	rspaces = / /g,
-	rescape = /[^\w\s.|`]/g,
-	fcleanup = function( nm ) {
-		return nm.replace(rescape, "\\$&");
-	};
-
-/*
- * 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;
-		}
-
-		if ( handler === false ) {
-			handler = returnFalse;
-		} else if ( !handler ) {
-			// Fixes bug #7229. Fix recommended by jdalton
-			return;
-		}
-
-		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,
-			eventHandle = elemData.handle;
-
-		if ( !events ) {
-			elemData.events = events = {};
-		}
-
-		if ( !eventHandle ) {
-			elemData.handle = eventHandle = function( e ) {
-				// Discard the second event of a jQuery.event.trigger() and
-				// when an event is called after a page has unloaded
-				return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
-					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;
-			if ( !handleObj.guid ) {
-				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 event optimization
-			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;
-		}
-
-		if ( handler === false ) {
-			handler = returnFalse;
-		}
-
-		var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
-			elemData = jQuery.hasData( elem ) && 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 ( 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 ( 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 ) {
-					jQuery.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, undefined, true );
-			}
-		}
-	},
-	
-	// Events that are safe to short-circuit if no handlers are attached.
-	// Native DOM events should not be added, they may have inline handlers.
-	customEvent: {
-		"getData": true,
-		"setData": true,
-		"changeData": true
-	},
-
-	trigger: function( event, data, elem, onlyHandlers ) {
-		// Event object or event type
-		var type = event.type || event,
-			namespaces = [],
-			exclusive;
-
-		if ( type.indexOf("!") >= 0 ) {
-			// Exclusive events trigger only for the exact event (no namespaces)
-			type = type.slice(0, -1);
-			exclusive = true;
-		}
-
-		if ( type.indexOf(".") >= 0 ) {
-			// Namespaced trigger; create a regexp to match event type in handle()
-			namespaces = type.split(".");
-			type = namespaces.shift();
-			namespaces.sort();
-		}
-
-		if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
-			// No jQuery handlers for this event type, and it can't have inline handlers
-			return;
-		}
-
-		// Caller can pass in an Event, Object, or just an event type string
-		event = typeof event === "object" ?
-			// jQuery.Event object
-			event[ jQuery.expando ] ? event :
-			// Object literal
-			new jQuery.Event( type, event ) :
-			// Just the event type (string)
-			new jQuery.Event( type );
-
-		event.type = type;
-		event.exclusive = exclusive;
-		event.namespace = namespaces.join(".");
-		event.namespace_re = new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)");
-		
-		// triggerHandler() and global events don't bubble or run the default action
-		if ( onlyHandlers || !elem ) {
-			event.preventDefault();
-			event.stopPropagation();
-		}
-
-		// Handle a global trigger
-		if ( !elem ) {
-			// TODO: Stop taunting the data cache; remove global events and always attach to document
-			jQuery.each( jQuery.cache, function() {
-				// internalKey variable is just used to make it easier to find
-				// and potentially change this stuff later; currently it just
-				// points to jQuery.expando
-				var internalKey = jQuery.expando,
-					internalCache = this[ internalKey ];
-				if ( internalCache && internalCache.events && internalCache.events[ type ] ) {
-					jQuery.event.trigger( event, data, internalCache.handle.elem );
-				}
-			});
-			return;
-		}
-
-		// Don't do events on text and comment nodes
-		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
-			return;
-		}
-
-		// Clean up the event in case it is being reused
-		event.result = undefined;
-		event.target = elem;
-
-		// Clone any incoming data and prepend the event, creating the handler arg list
-		data = data ? jQuery.makeArray( data ) : [];
-		data.unshift( event );
-
-		var cur = elem,
-			// IE doesn't like method names with a colon (#3533, #8272)
-			ontype = type.indexOf(":") < 0 ? "on" + type : "";
-
-		// Fire event on the current element, then bubble up the DOM tree
-		do {
-			var handle = jQuery._data( cur, "handle" );
-
-			event.currentTarget = cur;
-			if ( handle ) {
-				handle.apply( cur, data );
-			}
-
-			// Trigger an inline bound script
-			if ( ontype && jQuery.acceptData( cur ) && cur[ ontype ] && cur[ ontype ].apply( cur, data ) === false ) {
-				event.result = false;
-				event.preventDefault();
-			}
-
-			// Bubble up to document, then to window
-			cur = cur.parentNode || cur.ownerDocument || cur === event.target.ownerDocument && window;
-		} while ( cur && !event.isPropagationStopped() );
-
-		// If nobody prevented the default action, do it now
-		if ( !event.isDefaultPrevented() ) {
-			var old,
-				special = jQuery.event.special[ type ] || {};
-
-			if ( (!special._default || special._default.call( elem.ownerDocument, event ) === false) &&
-				!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
-
-				// Call a native DOM method on the target with the same name name as the event.
-				// Can't use an .isFunction)() check here because IE6/7 fails that test.
-				// IE<9 dies on focus to hidden element (#1486), may want to revisit a try/catch.
-				try {
-					if ( ontype && elem[ type ] ) {
-						// Don't re-trigger an onFOO event when we call its FOO() method
-						old = elem[ ontype ];
-
-						if ( old ) {
-							elem[ ontype ] = null;
-						}
-
-						jQuery.event.triggered = type;
-						elem[ type ]();
-					}
-				} catch ( ieError ) {}
-
-				if ( old ) {
-					elem[ ontype ] = old;
-				}
-
-				jQuery.event.triggered = undefined;
-			}
-		}
-		
-		return event.result;
-	},
-
-	handle: function( event ) {
-		event = jQuery.event.fix( event || window.event );
-		// Snapshot the handlers list since a called handler may add/remove events.
-		var handlers = ((jQuery._data( this, "events" ) || {})[ event.type ] || []).slice(0),
-			run_all = !event.exclusive && !event.namespace,
-			args = Array.prototype.slice.call( arguments, 0 );
-
-		// Use the fix-ed Event rather than the (read-only) native event
-		args[0] = event;
-		event.currentTarget = this;
-
-		for ( var j = 0, l = handlers.length; j < l; j++ ) {
-			var handleObj = handlers[ j ];
-
-			// Triggered event must 1) be non-exclusive and have no namespace, or
-			// 2) have namespace(s) a subset or equal to those in the bound event.
-			if ( run_all || event.namespace_re.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, args );
-
-				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 pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
-
-	fix: function( event ) {
-		if ( event[ jQuery.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 ) {
-			// Fixes #1925 where srcElement might not be defined either
-			event.target = event.srcElement || document;
-		}
-
-		// 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 eventDocument = event.target.ownerDocument || document,
-				doc = eventDocument.documentElement,
-				body = eventDocument.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 == null && (event.charCode != null || event.keyCode != null) ) {
-			event.which = event.charCode != null ? 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,
-					liveConvert( handleObj.origType, handleObj.selector ),
-					jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) );
-			},
-
-			remove: function( handleObj ) {
-				jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj );
-			}
-		},
-
-		beforeunload: {
-			setup: function( data, namespaces, eventHandle ) {
-				// We only want to do this special case on windows
-				if ( jQuery.isWindow( this ) ) {
-					this.onbeforeunload = eventHandle;
-				}
-			},
-
-			teardown: function( namespaces, eventHandle ) {
-				if ( this.onbeforeunload === eventHandle ) {
-					this.onbeforeunload = null;
-				}
-			}
-		}
-	}
-};
-
-jQuery.removeEvent = document.removeEventListener ?
-	function( elem, type, handle ) {
-		if ( elem.removeEventListener ) {
-			elem.removeEventListener( type, handle, false );
-		}
-	} :
-	function( elem, type, handle ) {
-		if ( elem.detachEvent ) {
-			elem.detachEvent( "on" + type, handle );
-		}
-	};
-
-jQuery.Event = function( src, props ) {
-	// Allow instantiation without the 'new' keyword
-	if ( !this.preventDefault ) {
-		return new jQuery.Event( src, props );
-	}
-
-	// Event object
-	if ( src && src.type ) {
-		this.originalEvent = src;
-		this.type = src.type;
-
-		// Events bubbling up the document may have been marked as prevented
-		// by a handler lower down the tree; reflect the correct value.
-		this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false ||
-			src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse;
-
-	// Event type
-	} else {
-		this.type = src;
-	}
-
-	// Put explicitly provided properties onto the event object
-	if ( props ) {
-		jQuery.extend( this, props );
-	}
-
-	// timeStamp is buggy for some events on Firefox(#3843)
-	// So we won't rely on the native value
-	this.timeStamp = jQuery.now();
-
-	// Mark it as fixed
-	this[ jQuery.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)
-		} else {
-			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 {
-
-		// Chrome does something similar, the parentNode property
-		// can be accessed but is null.
-		if ( parent && parent !== document && !parent.parentNode ) {
-			return;
-		}
-		// 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 ( !jQuery.nodeName( this, "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 ) {
-						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 ) {
-						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 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 ( jQuery.nodeName( elem, "select" ) ) {
-			val = elem.selectedIndex;
-		}
-
-		return val;
-	},
-
-	testChange = function testChange( e ) {
-		var elem = e.target, data, val;
-
-		if ( !rformElems.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";
-			e.liveFired = undefined;
-			jQuery.event.trigger( e, arguments[1], elem );
-		}
-	};
-
-	jQuery.event.special.change = {
-		filters: {
-			focusout: testChange,
-
-			beforedeactivate: testChange,
-
-			click: function( e ) {
-				var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";
-
-				if ( type === "radio" || type === "checkbox" || jQuery.nodeName( elem, "select" ) ) {
-					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 = jQuery.nodeName( elem, "input" ) ? elem.type : "";
-
-				if ( (e.keyCode === 13 && !jQuery.nodeName( elem, "textarea" ) ) ||
-					(e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||
-					type === "select-multiple" ) {
-					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
-			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 rformElems.test( this.nodeName );
-		},
-
-		teardown: function( namespaces ) {
-			jQuery.event.remove( this, ".specialChange" );
-
-			return rformElems.test( this.nodeName );
-		}
-	};
-
-	changeFilters = jQuery.event.special.change.filters;
-
-	// Handle when the input is .focus()'d
-	changeFilters.focus = changeFilters.beforeactivate;
-}
-
-function trigger( type, elem, args ) {
-	// Piggyback on a donor event to simulate a different one.
-	// Fake originalEvent to avoid donor's stopPropagation, but if the
-	// simulated event prevents default then we do the same on the donor.
-	// Don't pass args or remember liveFired; they apply to the donor event.
-	var event = jQuery.extend( {}, args[ 0 ] );
-	event.type = type;
-	event.originalEvent = {};
-	event.liveFired = undefined;
-	jQuery.event.handle.call( elem, event );
-	if ( event.isDefaultPrevented() ) {
-		args[ 0 ].preventDefault();
-	}
-}
-
-// Create "bubbling" focus and blur events
-if ( !jQuery.support.focusinBubbles ) {
-	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
-		// Attach a single capturing handler while someone wants focusin/focusout
-		var attaches = 0;
-
-		jQuery.event.special[ fix ] = {
-			setup: function() {
-				if ( attaches++ === 0 ) {
-					document.addEventListener( orig, handler, true );
-				}
-			},
-			teardown: function() {
-				if ( --attaches === 0 ) {
-					document.removeEventListener( orig, handler, true );
-				}
-			}
-		};
-
-		function handler( donor ) {
-			// Donor event is always a native one; fix it and switch its type.
-			// Let focusin/out handler cancel the donor focus/blur event.
-			var e = jQuery.event.fix( donor );
-			e.type = fix;
-			e.originalEvent = {};
-			jQuery.event.trigger( e, null, e.target );
-			if ( e.isDefaultPrevented() ) {
-				donor.preventDefault();
-			}
-		}
-	});
-}
-
-jQuery.each(["bind", "one"], function( i, name ) {
-	jQuery.fn[ name ] = function( type, data, fn ) {
-		var handler;
-
-		// Handle object literals
-		if ( typeof type === "object" ) {
-			for ( var key in type ) {
-				this[ name ](key, data, type[key], fn);
-			}
-			return this;
-		}
-
-		if ( arguments.length === 2 || data === false ) {
-			fn = data;
-			data = undefined;
-		}
-
-		if ( name === "one" ) {
-			handler = function( event ) {
-				jQuery( this ).unbind( event, handler );
-				return fn.apply( this, arguments );
-			};
-			handler.guid = fn.guid || jQuery.guid++;
-		} else {
-			handler = 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] ) {
-			return jQuery.event.trigger( type, data, this[0], true );
-		}
-	},
-
-	toggle: function( fn ) {
-		// Save reference to arguments for access in closure
-		var args = arguments,
-			guid = fn.guid || jQuery.guid++,
-			i = 0,
-			toggler = 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;
-			};
-
-		// link all the functions, so any of them can unbind this click handler
-		toggler.guid = guid;
-		while ( i < args.length ) {
-			args[ i++ ].guid = guid;
-		}
-
-		return this.click( toggler );
-	},
-
-	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 ( typeof types === "object" && !types.preventDefault ) {
-			for ( var key in types ) {
-				context[ name ]( key, data, types[key], selector );
-			}
-
-			return this;
-		}
-
-		if ( name === "die" && !types &&
-					origSelector && origSelector.charAt(0) === "." ) {
-
-			context.unbind( origSelector );
-
-			return this;
-		}
-
-		if ( data === false || jQuery.isFunction( data ) ) {
-			fn = data || returnFalse;
-			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 ( liveMap[ type ] ) {
-				types.push( liveMap[ type ] + namespaces );
-				type = type + namespaces;
-
-			} else {
-				type = (liveMap[ type ] || type) + namespaces;
-			}
-
-			if ( name === "live" ) {
-				// bind live handler
-				for ( var j = 0, l = context.length; j < l; j++ ) {
-					jQuery.event.add( context[j], "live." + liveConvert( type, selector ),
-						{ data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
-				}
-
-			} else {
-				// unbind live handler
-				context.unbind( "live." + liveConvert( type, selector ), fn );
-			}
-		}
-
-		return this;
-	};
-});
-
-function liveHandler( event ) {
-	var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret,
-		elems = [],
-		selectors = [],
-		events = jQuery._data( this, "events" );
-
-	// Make sure we avoid non-left-click bubbling in Firefox (#3861) and disabled elements in IE (#6911)
-	if ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === "click" ) {
-		return;
-	}
-
-	if ( event.namespace ) {
-		namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)");
-	}
-
-	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++ ) {
-		close = match[i];
-
-		for ( j = 0; j < live.length; j++ ) {
-			handleObj = live[j];
-
-			if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) && !close.elem.disabled ) {
-				elem = close.elem;
-				related = null;
-
-				// Those two events require additional checking
-				if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
-					event.type = handleObj.preType;
-					related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
-
-					// Make sure not to accidentally match a child element with the same selector
-					if ( related && jQuery.contains( elem, related ) ) {
-						related = elem;
-					}
-				}
-
-				if ( !related || related !== elem ) {
-					elems.push({ elem: elem, handleObj: handleObj, level: close.level });
-				}
-			}
-		}
-	}
-
-	for ( i = 0, l = elems.length; i < l; i++ ) {
-		match = elems[i];
-
-		if ( maxLevel && match.level > maxLevel ) {
-			break;
-		}
-
-		event.currentTarget = match.elem;
-		event.data = match.handleObj.data;
-		event.handleObj = match.handleObj;
-
-		ret = match.handleObj.origHandler.apply( match.elem, arguments );
-
-		if ( ret === false || event.isPropagationStopped() ) {
-			maxLevel = match.level;
-
-			if ( ret === false ) {
-				stop = false;
-			}
-			if ( event.isImmediatePropagationStopped() ) {
-				break;
-			}
-		}
-	}
-
-	return stop;
-}
-
-function liveConvert( type, selector ) {
-	return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspaces, "&");
-}
-
-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( data, fn ) {
-		if ( fn == null ) {
-			fn = data;
-			data = null;
-		}
-
-		return arguments.length > 0 ?
-			this.bind( name, data, fn ) :
-			this.trigger( name );
-	};
-
-	if ( jQuery.attrFn ) {
-		jQuery.attrFn[ name ] = true;
-	}
-});
-
-
-
-/*!
- * Sizzle CSS Selector Engine
- *  Copyright 2011, 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,
-	rBackslash = /\\/g,
-	rNonWord = /\W/;
-
-// 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 || [];
-	context = context || document;
-
-	var origContext = context;
-
-	if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
-		return [];
-	}
-	
-	if ( !selector || typeof selector !== "string" ) {
-		return results;
-	}
-
-	var m, set, checkSet, extra, ret, cur, pop, i,
-		prune = true,
-		contextXML = Sizzle.isXML( context ),
-		parts = [],
-		soFar = selector;
-	
-	// Reset the position of the chunker regexp (start from head)
-	do {
-		chunker.exec( "" );
-		m = chunker.exec( soFar );
-
-		if ( m ) {
-			soFar = m[3];
-		
-			parts.push( m[1] );
-		
-			if ( m[2] ) {
-				extra = m[3];
-				break;
-			}
-		}
-	} while ( m );
-
-	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]) ) {
-
-			ret = Sizzle.find( parts.shift(), context, contextXML );
-			context = ret.expr ?
-				Sizzle.filter( ret.expr, ret.set )[0] :
-				ret.set[0];
-		}
-
-		if ( context ) {
-			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 ) {
-				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 ( i = 0; checkSet[i] != null; i++ ) {
-				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
-					results.push( set[i] );
-				}
-			}
-
-		} else {
-			for ( 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.matchesSelector = function( node, expr ) {
-	return Sizzle( expr, null, null, [node] ).length > 0;
-};
-
-Sizzle.find = function( expr, context, isXML ) {
-	var set;
-
-	if ( !expr ) {
-		return [];
-	}
-
-	for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
-		var match,
-			type = Expr.order[i];
-		
-		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( rBackslash, "" );
-				set = Expr.find[ type ]( match, context, isXML );
-
-				if ( set != null ) {
-					expr = expr.replace( Expr.match[ type ], "" );
-					break;
-				}
-			}
-		}
-	}
-
-	if ( !set ) {
-		set = typeof context.getElementsByTagName !== "undefined" ?
-			context.getElementsByTagName( "*" ) :
-			[];
-	}
-
-	return { set: set, expr: expr };
-};
-
-Sizzle.filter = function( expr, set, inplace, not ) {
-	var match, anyFound,
-		old = expr,
-		result = [],
-		curLoop = set,
-		isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
-
-	while ( expr && set.length ) {
-		for ( var type in Expr.filter ) {
-			if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
-				var found, item,
-					filter = Expr.filter[ type ],
-					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|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
-		TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
-		CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
-		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" );
-		},
-		type: function( elem ) {
-			return elem.getAttribute( "type" );
-		}
-	},
-
-	relative: {
-		"+": function(checkSet, part){
-			var isPartStr = typeof part === "string",
-				isTag = isPartStr && !rNonWord.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 elem,
-				isPartStr = typeof part === "string",
-				i = 0,
-				l = checkSet.length;
-
-			if ( isPartStr && !rNonWord.test( part ) ) {
-				part = part.toLowerCase();
-
-				for ( ; i < l; i++ ) {
-					elem = checkSet[i];
-
-					if ( elem ) {
-						var parent = elem.parentNode;
-						checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
-					}
-				}
-
-			} else {
-				for ( ; i < l; i++ ) {
-					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 nodeCheck,
-				doneName = done++,
-				checkFn = dirCheck;
-
-			if ( typeof part === "string" && !rNonWord.test( part ) ) {
-				part = part.toLowerCase();
-				nodeCheck = part;
-				checkFn = dirNodeCheck;
-			}
-
-			checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
-		},
-
-		"~": function( checkSet, part, isXML ) {
-			var nodeCheck,
-				doneName = done++,
-				checkFn = dirCheck;
-
-			if ( typeof part === "string" && !rNonWord.test( part ) ) {
-				part = part.toLowerCase();
-				nodeCheck = part;
-				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]);
-				// Check parentNode to catch when Blackberry 4.6 returns
-				// nodes that are no longer in the document #6963
-				return m && m.parentNode ? [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 ) {
-			if ( typeof context.getElementsByTagName !== "undefined" ) {
-				return context.getElementsByTagName( match[1] );
-			}
-		}
-	},
-	preFilter: {
-		CLASS: function( match, curLoop, inplace, result, not, isXML ) {
-			match = " " + match[1].replace( rBackslash, "" ) + " ";
-
-			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\r]/g, " ").indexOf(match) >= 0) ) {
-						if ( !inplace ) {
-							result.push( elem );
-						}
-
-					} else if ( inplace ) {
-						curLoop[i] = false;
-					}
-				}
-			}
-
-			return false;
-		},
-
-		ID: function( match ) {
-			return match[1].replace( rBackslash, "" );
-		},
-
-		TAG: function( match, curLoop ) {
-			return match[1].replace( rBackslash, "" ).toLowerCase();
-		},
-
-		CHILD: function( match ) {
-			if ( match[1] === "nth" ) {
-				if ( !match[2] ) {
-					Sizzle.error( match[0] );
-				}
-
-				match[2] = match[2].replace(/^\+|\s*/g, '');
-
-				// 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;
-			}
-			else if ( match[2] ) {
-				Sizzle.error( match[0] );
-			}
-
-			// TODO: Move to normal caching system
-			match[0] = done++;
-
-			return match;
-		},
-
-		ATTR: function( match, curLoop, inplace, result, not, isXML ) {
-			var name = match[1] = match[1].replace( rBackslash, "" );
-			
-			if ( !isXML && Expr.attrMap[name] ) {
-				match[1] = Expr.attrMap[name];
-			}
-
-			// Handle if an un-quoted value was used
-			match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
-
-			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
-			if ( elem.parentNode ) {
-				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 ) {
-			var attr = elem.getAttribute( "type" ), type = elem.type;
-			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) 
-			// use getAttribute instead to test this case
-			return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
-		},
-
-		radio: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
-		},
-
-		checkbox: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
-		},
-
-		file: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
-		},
-
-		password: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
-		},
-
-		submit: function( elem ) {
-			var name = elem.nodeName.toLowerCase();
-			return (name === "input" || name === "button") && "submit" === elem.type;
-		},
-
-		image: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
-		},
-
-		reset: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "reset" === elem.type;
-		},
-
-		button: function( elem ) {
-			var name = elem.nodeName.toLowerCase();
-			return name === "input" && "button" === elem.type || name === "button";
-		},
-
-		input: function( elem ) {
-			return (/input|select|textarea|button/i).test( elem.nodeName );
-		},
-
-		focus: function( elem ) {
-			return elem === elem.ownerDocument.activeElement;
-		}
-	},
-	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 || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0;
-
-			} else if ( name === "not" ) {
-				var not = match[3];
-
-				for ( var j = 0, l = not.length; j < l; j++ ) {
-					if ( not[j] === elem ) {
-						return false;
-					}
-				}
-
-				return true;
-
-			} else {
-				Sizzle.error( 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,
-	fescape = function(all, num){
-		return "\\" + (num - 0 + 1);
-	};
-
-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, fescape) );
-}
-
-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 i = 0,
-			ret = results || [];
-
-		if ( toString.call(array) === "[object Array]" ) {
-			Array.prototype.push.apply( ret, array );
-
-		} else {
-			if ( typeof array.length === "number" ) {
-				for ( var l = array.length; i < l; i++ ) {
-					ret.push( array[i] );
-				}
-
-			} else {
-				for ( ; array[i]; i++ ) {
-					ret.push( array[i] );
-				}
-			}
-		}
-
-		return ret;
-	};
-}
-
-var sortOrder, siblingCheck;
-
-if ( document.documentElement.compareDocumentPosition ) {
-	sortOrder = function( a, b ) {
-		if ( a === b ) {
-			hasDuplicate = true;
-			return 0;
-		}
-
-		if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
-			return a.compareDocumentPosition ? -1 : 1;
-		}
-
-		return a.compareDocumentPosition(b) & 4 ? -1 : 1;
-	};
-
-} else {
-	sortOrder = function( a, b ) {
-		var al, bl,
-			ap = [],
-			bp = [],
-			aup = a.parentNode,
-			bup = b.parentNode,
-			cur = aup;
-
-		// The nodes are identical, we can exit early
-		if ( a === b ) {
-			hasDuplicate = true;
-			return 0;
-
-		// If the nodes are siblings (or identical) we can do a quick check
-		} else if ( aup === bup ) {
-			return siblingCheck( a, b );
-
-		// If no parents were found then the nodes are disconnected
-		} else if ( !aup ) {
-			return -1;
-
-		} else if ( !bup ) {
-			return 1;
-		}
-
-		// Otherwise they're somewhere else in the tree so we need
-		// to build up a full list of the parentNodes for comparison
-		while ( cur ) {
-			ap.unshift( cur );
-			cur = cur.parentNode;
-		}
-
-		cur = bup;
-
-		while ( cur ) {
-			bp.unshift( cur );
-			cur = cur.parentNode;
-		}
-
-		al = ap.length;
-		bl = bp.length;
-
-		// Start walking down the tree looking for a discrepancy
-		for ( var i = 0; i < al && i < bl; i++ ) {
-			if ( ap[i] !== bp[i] ) {
-				return siblingCheck( ap[i], bp[i] );
-			}
-		}
-
-		// We ended someplace up the tree so do a sibling check
-		return i === al ?
-			siblingCheck( a, bp[i], -1 ) :
-			siblingCheck( ap[i], b, 1 );
-	};
-
-	siblingCheck = function( a, b, ret ) {
-		if ( a === b ) {
-			return ret;
-		}
-
-		var cur = a.nextSibling;
-
-		while ( cur ) {
-			if ( cur === b ) {
-				return -1;
-			}
-
-			cur = cur.nextSibling;
-		}
-
-		return 1;
-	};
-}
-
-// Utility function for retreiving the text value of an array of DOM nodes
-Sizzle.getText = function( 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 += Sizzle.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(),
-		root = document.documentElement;
-
-	form.innerHTML = "<a name='" + id + "'/>";
-
-	// Inject it into the root element, check its status, and remove it quickly
-	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 );
-
-	// release memory in IE
-	root = form = null;
-})();
-
-(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 );
-		};
-	}
-
-	// release memory in IE
-	div = null;
-})();
-
-if ( document.querySelectorAll ) {
-	(function(){
-		var oldSizzle = Sizzle,
-			div = document.createElement("div"),
-			id = "__sizzle__";
-
-		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 && !Sizzle.isXML(context) ) {
-				// See if we find a selector to speed up
-				var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
-				
-				if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
-					// Speed-up: Sizzle("TAG")
-					if ( match[1] ) {
-						return makeArray( context.getElementsByTagName( query ), extra );
-					
-					// Speed-up: Sizzle(".CLASS")
-					} else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
-						return makeArray( context.getElementsByClassName( match[2] ), extra );
-					}
-				}
-				
-				if ( context.nodeType === 9 ) {
-					// Speed-up: Sizzle("body")
-					// The body element only exists once, optimize finding it
-					if ( query === "body" && context.body ) {
-						return makeArray( [ context.body ], extra );
-						
-					// Speed-up: Sizzle("#ID")
-					} else if ( match && match[3] ) {
-						var elem = context.getElementById( match[3] );
-
-						// Check parentNode to catch when Blackberry 4.6 returns
-						// nodes that are no longer in the document #6963
-						if ( elem && elem.parentNode ) {
-							// Handle the case where IE and Opera return items
-							// by name instead of ID
-							if ( elem.id === match[3] ) {
-								return makeArray( [ elem ], extra );
-							}
-							
-						} else {
-							return makeArray( [], extra );
-						}
-					}
-					
-					try {
-						return makeArray( context.querySelectorAll(query), extra );
-					} catch(qsaError) {}
-
-				// qSA works strangely on Element-rooted queries
-				// We can work around this by specifying an extra ID on the root
-				// and working up from there (Thanks to Andrew Dupont for the technique)
-				// IE 8 doesn't work on object elements
-				} else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
-					var oldContext = context,
-						old = context.getAttribute( "id" ),
-						nid = old || id,
-						hasParent = context.parentNode,
-						relativeHierarchySelector = /^\s*[+~]/.test( query );
-
-					if ( !old ) {
-						context.setAttribute( "id", nid );
-					} else {
-						nid = nid.replace( /'/g, "\\$&" );
-					}
-					if ( relativeHierarchySelector && hasParent ) {
-						context = context.parentNode;
-					}
-
-					try {
-						if ( !relativeHierarchySelector || hasParent ) {
-							return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
-						}
-
-					} catch(pseudoError) {
-					} finally {
-						if ( !old ) {
-							oldContext.removeAttribute( "id" );
-						}
-					}
-				}
-			}
-		
-			return oldSizzle(query, context, extra, seed);
-		};
-
-		for ( var prop in oldSizzle ) {
-			Sizzle[ prop ] = oldSizzle[ prop ];
-		}
-
-		// release memory in IE
-		div = null;
-	})();
-}
-
-(function(){
-	var html = document.documentElement,
-		matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
-
-	if ( matches ) {
-		// Check to see if it's possible to do matchesSelector
-		// on a disconnected node (IE 9 fails this)
-		var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
-			pseudoWorks = false;
-
-		try {
-			// This should fail with an exception
-			// Gecko does not error, returns false instead
-			matches.call( document.documentElement, "[test!='']:sizzle" );
-	
-		} catch( pseudoError ) {
-			pseudoWorks = true;
-		}
-
-		Sizzle.matchesSelector = function( node, expr ) {
-			// Make sure that attribute selectors are quoted
-			expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
-
-			if ( !Sizzle.isXML( node ) ) {
-				try { 
-					if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
-						var ret = matches.call( node, expr );
-
-						// IE 9's matchesSelector returns false on disconnected nodes
-						if ( ret || !disconnectedMatch ||
-								// As well, disconnected nodes are said to be in a document
-								// fragment in IE 9, so check for that
-								node.document && node.document.nodeType !== 11 ) {
-							return ret;
-						}
-					}
-				} catch(e) {}
-			}
-
-			return Sizzle(expr, null, null, [node]).length > 0;
-		};
-	}
-})();
-
-(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]);
-		}
-	};
-
-	// release memory in IE
-	div = null;
-})();
-
-function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
-	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
-		var elem = checkSet[i];
-
-		if ( elem ) {
-			var match = false;
-
-			elem = elem[dir];
-
-			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 ) {
-			var match = false;
-			
-			elem = elem[dir];
-
-			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;
-		}
-	}
-}
-
-if ( document.documentElement.contains ) {
-	Sizzle.contains = function( a, b ) {
-		return a !== b && (a.contains ? a.contains(b) : true);
-	};
-
-} else if ( document.documentElement.compareDocumentPosition ) {
-	Sizzle.contains = function( a, b ) {
-		return !!(a.compareDocumentPosition(b) & 16);
-	};
-
-} else {
-	Sizzle.contains = function() {
-		return false;
-	};
-}
-
-Sizzle.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 match,
-		tmpSet = [],
-		later = "",
-		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 = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-
-
-})();
-
-
-var runtil = /Until$/,
-	rparentsprev = /^(?:parents|prevUntil|prevAll)/,
-	// Note: This RegExp should be improved, or likely pulled from Sizzle
-	rmultiselector = /,/,
-	isSimple = /^.[^:#\[\.,]*$/,
-	slice = Array.prototype.slice,
-	POS = jQuery.expr.match.POS,
-	// methods guaranteed to produce a unique set when starting from a unique set
-	guaranteedUnique = {
-		children: true,
-		contents: true,
-		next: true,
-		prev: true
-	};
-
-jQuery.fn.extend({
-	find: function( selector ) {
-		var self = this,
-			i, l;
-
-		if ( typeof selector !== "string" ) {
-			return jQuery( selector ).filter(function() {
-				for ( i = 0, l = self.length; i < l; i++ ) {
-					if ( jQuery.contains( self[ i ], this ) ) {
-						return true;
-					}
-				}
-			});
-		}
-
-		var ret = this.pushStack( "", "find", selector ),
-			length, n, r;
-
-		for ( 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 ( n = length; n < ret.length; n++ ) {
-					for ( 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 && ( typeof selector === "string" ?
-			jQuery.filter( selector, this ).length > 0 :
-			this.filter( selector ).length > 0 );
-	},
-
-	closest: function( selectors, context ) {
-		var ret = [], i, l, cur = this[0];
-		
-		// Array
-		if ( jQuery.isArray( selectors ) ) {
-			var match, selector,
-				matches = {},
-				level = 1;
-
-			if ( cur && selectors.length ) {
-				for ( i = 0, l = selectors.length; i < l; i++ ) {
-					selector = selectors[i];
-
-					if ( !matches[ selector ] ) {
-						matches[ selector ] = 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, level: level });
-						}
-					}
-
-					cur = cur.parentNode;
-					level++;
-				}
-			}
-
-			return ret;
-		}
-
-		// String
-		var pos = POS.test( selectors ) || typeof selectors !== "string" ?
-				jQuery( selectors, context || this.context ) :
-				0;
-
-		for ( i = 0, l = this.length; i < l; i++ ) {
-			cur = this[i];
-
-			while ( cur ) {
-				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
-					ret.push( cur );
-					break;
-
-				} else {
-					cur = cur.parentNode;
-					if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
-						break;
-					}
-				}
-			}
-		}
-
-		ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
-
-		return this.pushStack( ret, "closest", selectors );
-	},
-
-	// 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 ) :
-				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : 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 ),
-			// The variable 'args' was introduced in
-			// https://github.com/jquery/jquery/commit/52a0238
-			// to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed.
-			// http://code.google.com/p/v8/issues/detail?id=1050
-			args = slice.call(arguments);
-
-		if ( !runtil.test( name ) ) {
-			selector = until;
-		}
-
-		if ( selector && typeof selector === "string" ) {
-			ret = jQuery.filter( selector, ret );
-		}
-
-		ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
-
-		if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
-			ret = ret.reverse();
-		}
-
-		return this.pushStack( ret, name, args.join(",") );
-	};
-});
-
-jQuery.extend({
-	filter: function( expr, elems, not ) {
-		if ( not ) {
-			expr = ":not(" + expr + ")";
-		}
-
-		return elems.length === 1 ?
-			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
-			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;
-	}
-});
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, keep ) {
-
-	// Can't pass null or undefined to indexOf in Firefox 4
-	// Set to 0 to skip string check
-	qualifier = qualifier || 0;
-
-	if ( jQuery.isFunction( qualifier ) ) {
-		return jQuery.grep(elements, function( elem, i ) {
-			var retVal = !!qualifier.call( elem, i, elem );
-			return retVal === 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;
-	});
-}
-
-
-
-
-var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
-	rleadingWhitespace = /^\s+/,
-	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
-	rtagName = /<([\w:]+)/,
-	rtbody = /<tbody/i,
-	rhtml = /<|&#?\w+;/,
-	rnocache = /<(?:script|object|embed|option|style)/i,
-	// checked="checked" or checked
-	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
-	rscriptType = /\/(java|ecma)script/i,
-	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( dataAndEvents, deepDataAndEvents ) {
-		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
-		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
-		return this.map( function () {
-			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
-		});
-	},
-
-	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, "<$1></$2>");
-
-			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 );
-
-				self.html( value.call(this, i, self.html()) );
-			});
-
-		} 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.length ?
-				this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
-				this;
-		}
-	},
-
-	detach: function( selector ) {
-		return this.remove( selector, true );
-	},
-
-	domManip: function( args, table, callback ) {
-		var results, first, fragment, parent,
-			value = args[0],
-			scripts = [];
-
-		// 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 = jQuery.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, lastIndex = l - 1; i < l; i++ ) {
-					callback.call(
-						table ?
-							root(this[i], first) :
-							this[i],
-						// Make sure that we do not leak memory by inadvertently discarding
-						// the original fragment (which might have attached data) instead of
-						// using it; in addition, use the original fragment object for the last
-						// item instead of first because it can end up being emptied incorrectly
-						// in certain situations (Bug #8070).
-						// Fragments from the fragment cache must always be cloned and never used
-						// in place.
-						results.cacheable || (l > 1 && i < lastIndex) ?
-							jQuery.clone( fragment, true, 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( src, dest ) {
-
-	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
-		return;
-	}
-
-	var internalKey = jQuery.expando,
-		oldData = jQuery.data( src ),
-		curData = jQuery.data( dest, oldData );
-
-	// Switch to use the internal data object, if it exists, for the next
-	// stage of data copying
-	if ( (oldData = oldData[ internalKey ]) ) {
-		var events = oldData.events;
-				curData = curData[ internalKey ] = jQuery.extend({}, oldData);
-
-		if ( events ) {
-			delete curData.handle;
-			curData.events = {};
-
-			for ( var type in events ) {
-				for ( var i = 0, l = events[ type ].length; i < l; i++ ) {
-					jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );
-				}
-			}
-		}
-	}
-}
-
-function cloneFixAttributes( src, dest ) {
-	var nodeName;
-
-	// We do not need to do anything for non-Elements
-	if ( dest.nodeType !== 1 ) {
-		return;
-	}
-
-	// clearAttributes removes the attributes, which we don't want,
-	// but also removes the attachEvent events, which we *do* want
-	if ( dest.clearAttributes ) {
-		dest.clearAttributes();
-	}
-
-	// mergeAttributes, in contrast, only merges back on the
-	// original attributes, not the events
-	if ( dest.mergeAttributes ) {
-		dest.mergeAttributes( src );
-	}
-
-	nodeName = dest.nodeName.toLowerCase();
-
-	// IE6-8 fail to clone children inside object elements that use
-	// the proprietary classid attribute value (rather than the type
-	// attribute) to identify the type of content to display
-	if ( nodeName === "object" ) {
-		dest.outerHTML = src.outerHTML;
-
-	} else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
-		// IE6-8 fails to persist the checked state of a cloned checkbox
-		// or radio button. Worse, IE6-7 fail to give the cloned element
-		// a checked appearance if the defaultChecked value isn't also set
-		if ( src.checked ) {
-			dest.defaultChecked = dest.checked = src.checked;
-		}
-
-		// IE6-7 get confused and end up setting the value of a cloned
-		// checkbox/radio button to an empty string instead of "on"
-		if ( dest.value !== src.value ) {
-			dest.value = src.value;
-		}
-
-	// IE6-8 fails to return the selected option to the default selected
-	// state when cloning options
-	} else if ( nodeName === "option" ) {
-		dest.selected = src.defaultSelected;
-
-	// IE6-8 fails to set the defaultValue to the correct value when
-	// cloning other types of input fields
-	} else if ( nodeName === "input" || nodeName === "textarea" ) {
-		dest.defaultValue = src.defaultValue;
-	}
-
-	// Event data gets referenced instead of copied if the expando
-	// gets copied too
-	dest.removeAttribute( jQuery.expando );
-}
-
-jQuery.buildFragment = function( args, nodes, scripts ) {
-	var fragment, cacheable, cacheresults,
-		doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document);
-
-	// Only cache "small" (1/2 KB) HTML 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 &&
-		args[0].charAt(0) === "<" && !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
-
-		cacheable = true;
-
-		cacheresults = jQuery.fragments[ args[0] ];
-		if ( cacheresults && 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( insert[i] )[ original ]( elems );
-				ret = ret.concat( elems );
-			}
-
-			return this.pushStack( ret, name, insert.selector );
-		}
-	};
-});
-
-function getAll( elem ) {
-	if ( "getElementsByTagName" in elem ) {
-		return elem.getElementsByTagName( "*" );
-	
-	} else if ( "querySelectorAll" in elem ) {
-		return elem.querySelectorAll( "*" );
-
-	} else {
-		return [];
-	}
-}
-
-// Used in clean, fixes the defaultChecked property
-function fixDefaultChecked( elem ) {
-	if ( elem.type === "checkbox" || elem.type === "radio" ) {
-		elem.defaultChecked = elem.checked;
-	}
-}
-// Finds all inputs and passes them to fixDefaultChecked
-function findInputs( elem ) {
-	if ( jQuery.nodeName( elem, "input" ) ) {
-		fixDefaultChecked( elem );
-	} else if ( elem.getElementsByTagName ) {
-		jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
-	}
-}
-
-jQuery.extend({
-	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
-		var clone = elem.cloneNode(true),
-				srcElements,
-				destElements,
-				i;
-
-		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
-				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
-			// IE copies events bound via attachEvent when using cloneNode.
-			// Calling detachEvent on the clone will also remove the events
-			// from the original. In order to get around this, we use some
-			// proprietary methods to clear the events. Thanks to MooTools
-			// guys for this hotness.
-
-			cloneFixAttributes( elem, clone );
-
-			// Using Sizzle here is crazy slow, so we use getElementsByTagName
-			// instead
-			srcElements = getAll( elem );
-			destElements = getAll( clone );
-
-			// Weird iteration because IE will replace the length property
-			// with an element if you are cloning the body and one of the
-			// elements on the page has a name or id of "length"
-			for ( i = 0; srcElements[i]; ++i ) {
-				cloneFixAttributes( srcElements[i], destElements[i] );
-			}
-		}
-
-		// Copy the events from the original to the clone
-		if ( dataAndEvents ) {
-			cloneCopyEvent( elem, clone );
-
-			if ( deepDataAndEvents ) {
-				srcElements = getAll( elem );
-				destElements = getAll( clone );
-
-				for ( i = 0; srcElements[i]; ++i ) {
-					cloneCopyEvent( srcElements[i], destElements[i] );
-				}
-			}
-		}
-
-		// Return the cloned set
-		return clone;
-	},
-
-	clean: function( elems, context, fragment, scripts ) {
-		var checkScriptType;
-
-		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" ) {
-				if ( !rhtml.test( elem ) ) {
-					elem = context.createTextNode( elem );
-				} else {
-					// Fix "XHTML"-style tags in all browsers
-					elem = elem.replace(rxhtmlTag, "<$1></$2>");
-
-					// 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;
-				}
-			}
-
-			// Resets defaultChecked for any radios and checkboxes
-			// about to be appended to the DOM in IE 6/7 (#8060)
-			var len;
-			if ( !jQuery.support.appendChecked ) {
-				if ( elem[0] && typeof (len = elem.length) === "number" ) {
-					for ( i = 0; i < len; i++ ) {
-						findInputs( elem[i] );
-					}
-				} else {
-					findInputs( elem );
-				}
-			}
-
-			if ( elem.nodeType ) {
-				ret.push( elem );
-			} else {
-				ret = jQuery.merge( ret, elem );
-			}
-		}
-
-		if ( fragment ) {
-			checkScriptType = function( elem ) {
-				return !elem.type || rscriptType.test( elem.type );
-			};
-			for ( 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 ) {
-						var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType );
-
-						ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
-					}
-					fragment.appendChild( ret[i] );
-				}
-			}
-		}
-
-		return ret;
-	},
-
-	cleanData: function( elems ) {
-		var data, id, cache = jQuery.cache, internalKey = jQuery.expando, special = jQuery.event.special,
-			deleteExpando = jQuery.support.deleteExpando;
-
-		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
-			if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
-				continue;
-			}
-
-			id = elem[ jQuery.expando ];
-
-			if ( id ) {
-				data = cache[ id ] && cache[ id ][ internalKey ];
-
-				if ( data && data.events ) {
-					for ( var type in data.events ) {
-						if ( special[ type ] ) {
-							jQuery.event.remove( elem, type );
-
-						// This is a shortcut to avoid jQuery.event.remove's overhead
-						} else {
-							jQuery.removeEvent( elem, type, data.handle );
-						}
-					}
-
-					// Null the DOM reference to avoid IE6/7/8 leak (#7054)
-					if ( data.handle ) {
-						data.handle.elem = null;
-					}
-				}
-
-				if ( deleteExpando ) {
-					delete elem[ jQuery.expando ];
-
-				} else if ( elem.removeAttribute ) {
-					elem.removeAttribute( jQuery.expando );
-				}
-
-				delete cache[ id ];
-			}
-		}
-	}
-});
-
-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 );
-	}
-}
-
-
-
-
-var ralpha = /alpha\([^)]*\)/i,
-	ropacity = /opacity=([^)]*)/,
-	rdashAlpha = /-([a-z])/ig,
-	// fixed for IE9, see #8346
-	rupper = /([A-Z]|^ms)/g,
-	rnumpx = /^-?\d+(?:px)?$/i,
-	rnum = /^-?\d/,
-	rrelNum = /^[+\-]=/,
-	rrelNumFilter = /[^+\-\.\de]+/g,
-
-	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
-	cssWidth = [ "Left", "Right" ],
-	cssHeight = [ "Top", "Bottom" ],
-	curCSS,
-
-	getComputedStyle,
-	currentStyle,
-
-	fcamelCase = function( all, letter ) {
-		return letter.toUpperCase();
-	};
-
-jQuery.fn.css = function( name, value ) {
-	// Setting 'undefined' is a no-op
-	if ( arguments.length === 2 && value === undefined ) {
-		return this;
-	}
-
-	return jQuery.access( this, name, value, true, function( elem, name, value ) {
-		return value !== undefined ?
-			jQuery.style( elem, name, value ) :
-			jQuery.css( elem, name );
-	});
-};
-
-jQuery.extend({
-	// Add in style property hooks for overriding the default
-	// behavior of getting and setting a style property
-	cssHooks: {
-		opacity: {
-			get: function( elem, computed ) {
-				if ( computed ) {
-					// We should always get a number back from opacity
-					var ret = curCSS( elem, "opacity", "opacity" );
-					return ret === "" ? "1" : ret;
-
-				} else {
-					return elem.style.opacity;
-				}
-			}
-		}
-	},
-
-	// Exclude the following css properties to add px
-	cssNumber: {
-		"zIndex": true,
-		"fontWeight": true,
-		"opacity": true,
-		"zoom": true,
-		"lineHeight": true,
-		"widows": true,
-		"orphans": true
-	},
-
-	// Add in properties whose names you wish to fix before
-	// setting or getting the value
-	cssProps: {
-		// normalize float css property
-		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
-	},
-
-	// Get and set the style property on a DOM Node
-	style: function( elem, name, value, extra ) {
-		// Don't set styles on text and comment nodes
-		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
-			return;
-		}
-
-		// Make sure that we're working with the right name
-		var ret, type, origName = jQuery.camelCase( name ),
-			style = elem.style, hooks = jQuery.cssHooks[ origName ];
-
-		name = jQuery.cssProps[ origName ] || origName;
-
-		// Check if we're setting a value
-		if ( value !== undefined ) {
-			type = typeof value;
-
-			// Make sure that NaN and null values aren't set. See: #7116
-			if ( type === "number" && isNaN( value ) || value == null ) {
-				return;
-			}
-
-			// convert relative number strings (+= or -=) to relative numbers. #7345
-			if ( type === "string" && rrelNum.test( value ) ) {
-				value = +value.replace( rrelNumFilter, "" ) + parseFloat( jQuery.css( elem, name ) );
-			}
-
-			// If a number was passed in, add 'px' to the (except for certain CSS properties)
-			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
-				value += "px";
-			}
-
-			// If a hook was provided, use that value, otherwise just set the specified value
-			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
-				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
-				// Fixes bug #5509
-				try {
-					style[ name ] = value;
-				} catch(e) {}
-			}
-
-		} else {
-			// If a hook was provided get the non-computed value from there
-			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
-				return ret;
-			}
-
-			// Otherwise just get the value from the style object
-			return style[ name ];
-		}
-	},
-
-	css: function( elem, name, extra ) {
-		var ret, hooks;
-
-		// Make sure that we're working with the right name
-		name = jQuery.camelCase( name );
-		hooks = jQuery.cssHooks[ name ];
-		name = jQuery.cssProps[ name ] || name;
-
-		// cssFloat needs a special treatment
-		if ( name === "cssFloat" ) {
-			name = "float";
-		}
-
-		// If a hook was provided get the computed value from there
-		if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
-			return ret;
-
-		// Otherwise, if a way to get the computed value exists, use that
-		} else if ( curCSS ) {
-			return curCSS( elem, name );
-		}
-	},
-
-	// 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 ( name in options ) {
-			elem.style[ name ] = old[ name ];
-		}
-	},
-
-	camelCase: function( string ) {
-		return string.replace( rdashAlpha, fcamelCase );
-	}
-});
-
-// DEPRECATED, Use jQuery.css() instead
-jQuery.curCSS = jQuery.css;
-
-jQuery.each(["height", "width"], function( i, name ) {
-	jQuery.cssHooks[ name ] = {
-		get: function( elem, computed, extra ) {
-			var val;
-
-			if ( computed ) {
-				if ( elem.offsetWidth !== 0 ) {
-					val = getWH( elem, name, extra );
-
-				} else {
-					jQuery.swap( elem, cssShow, function() {
-						val = getWH( elem, name, extra );
-					});
-				}
-
-				if ( val <= 0 ) {
-					val = curCSS( elem, name, name );
-
-					if ( val === "0px" && currentStyle ) {
-						val = currentStyle( elem, name, name );
-					}
-
-					if ( val != null ) {
-						// Should return "auto" instead of 0, use 0 for
-						// temporary backwards-compat
-						return val === "" || val === "auto" ? "0px" : val;
-					}
-				}
-
-				if ( val < 0 || val == null ) {
-					val = elem.style[ name ];
-
-					// Should return "auto" instead of 0, use 0 for
-					// temporary backwards-compat
-					return val === "" || val === "auto" ? "0px" : val;
-				}
-
-				return typeof val === "string" ? val : val + "px";
-			}
-		},
-
-		set: function( elem, value ) {
-			if ( rnumpx.test( value ) ) {
-				// ignore negative width and height values #1599
-				value = parseFloat(value);
-
-				if ( value >= 0 ) {
-					return value + "px";
-				}
-
-			} else {
-				return value;
-			}
-		}
-	};
-});
-
-if ( !jQuery.support.opacity ) {
-	jQuery.cssHooks.opacity = {
-		get: function( elem, computed ) {
-			// IE uses filters for opacity
-			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
-				( parseFloat( RegExp.$1 ) / 100 ) + "" :
-				computed ? "1" : "";
-		},
-
-		set: function( elem, value ) {
-			var style = elem.style,
-				currentStyle = elem.currentStyle;
-
-			// 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 = jQuery.isNaN( value ) ?
-				"" :
-				"alpha(opacity=" + value * 100 + ")",
-				filter = currentStyle && currentStyle.filter || style.filter || "";
-
-			style.filter = ralpha.test( filter ) ?
-				filter.replace( ralpha, opacity ) :
-				filter + " " + opacity;
-		}
-	};
-}
-
-jQuery(function() {
-	// This hook cannot be added until DOM ready because the support test
-	// for it is not run until after DOM ready
-	if ( !jQuery.support.reliableMarginRight ) {
-		jQuery.cssHooks.marginRight = {
-			get: function( elem, computed ) {
-				// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
-				// Work around by temporarily setting element display to inline-block
-				var ret;
-				jQuery.swap( elem, { "display": "inline-block" }, function() {
-					if ( computed ) {
-						ret = curCSS( elem, "margin-right", "marginRight" );
-					} else {
-						ret = elem.style.marginRight;
-					}
-				});
-				return ret;
-			}
-		};
-	}
-});
-
-if ( document.defaultView && document.defaultView.getComputedStyle ) {
-	getComputedStyle = function( elem, name ) {
-		var ret, defaultView, computedStyle;
-
-		name = name.replace( rupper, "-$1" ).toLowerCase();
-
-		if ( !(defaultView = elem.ownerDocument.defaultView) ) {
-			return undefined;
-		}
-
-		if ( (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
-			ret = computedStyle.getPropertyValue( name );
-			if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
-				ret = jQuery.style( elem, name );
-			}
-		}
-
-		return ret;
-	};
-}
-
-if ( document.documentElement.currentStyle ) {
-	currentStyle = function( elem, name ) {
-		var left,
-			ret = elem.currentStyle && elem.currentStyle[ name ],
-			rsLeft = elem.runtimeStyle && elem.runtimeStyle[ name ],
-			style = elem.style;
-
-		// 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
-			left = style.left;
-
-			// Put in the new values to get a computed value out
-			if ( rsLeft ) {
-				elem.runtimeStyle.left = elem.currentStyle.left;
-			}
-			style.left = name === "fontSize" ? "1em" : (ret || 0);
-			ret = style.pixelLeft + "px";
-
-			// Revert the changed values
-			style.left = left;
-			if ( rsLeft ) {
-				elem.runtimeStyle.left = rsLeft;
-			}
-		}
-
-		return ret === "" ? "auto" : ret;
-	};
-}
-
-curCSS = getComputedStyle || currentStyle;
-
-function getWH( elem, name, extra ) {
-	var which = name === "width" ? cssWidth : cssHeight,
-		val = name === "width" ? elem.offsetWidth : elem.offsetHeight;
-
-	if ( extra === "border" ) {
-		return val;
-	}
-
-	jQuery.each( which, function() {
-		if ( !extra ) {
-			val -= parseFloat(jQuery.css( elem, "padding" + this )) || 0;
-		}
-
-		if ( extra === "margin" ) {
-			val += parseFloat(jQuery.css( elem, "margin" + this )) || 0;
-
-		} else {
-			val -= parseFloat(jQuery.css( elem, "border" + this + "Width" )) || 0;
-		}
-	});
-
-	return val;
-}
-
-if ( jQuery.expr && jQuery.expr.filters ) {
-	jQuery.expr.filters.hidden = function( elem ) {
-		var width = elem.offsetWidth,
-			height = elem.offsetHeight;
-
-		return (width === 0 && height === 0) || (!jQuery.support.reliableHiddenOffsets && (elem.style.display || jQuery.css( elem, "display" )) === "none");
-	};
-
-	jQuery.expr.filters.visible = function( elem ) {
-		return !jQuery.expr.filters.hidden( elem );
-	};
-}
-
-
-
-
-var r20 = /%20/g,
-	rbracket = /\[\]$/,
-	rCRLF = /\r?\n/g,
-	rhash = /#.*$/,
-	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
-	rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
-	// #7653, #8125, #8152: local protocol detection
-	rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|widget):$/,
-	rnoContent = /^(?:GET|HEAD)$/,
-	rprotocol = /^\/\//,
-	rquery = /\?/,
-	rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
-	rselectTextarea = /^(?:select|textarea)/i,
-	rspacesAjax = /\s+/,
-	rts = /([?&])_=[^&]*/,
-	rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
-
-	// Keep a copy of the old load method
-	_load = jQuery.fn.load,
-
-	/* Prefilters
-	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
-	 * 2) These are called:
-	 *    - BEFORE asking for a transport
-	 *    - AFTER param serialization (s.data is a string if s.processData is true)
-	 * 3) key is the dataType
-	 * 4) the catchall symbol "*" can be used
-	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
-	 */
-	prefilters = {},
-
-	/* Transports bindings
-	 * 1) key is the dataType
-	 * 2) the catchall symbol "*" can be used
-	 * 3) selection will start with transport dataType and THEN go to "*" if needed
-	 */
-	transports = {},
-
-	// Document location
-	ajaxLocation,
-
-	// Document location segments
-	ajaxLocParts;
-
-// #8138, IE may throw an exception when accessing
-// a field from window.location if document.domain has been set
-try {
-	ajaxLocation = location.href;
-} catch( e ) {
-	// Use the href attribute of an A element
-	// since IE will modify it given document.location
-	ajaxLocation = document.createElement( "a" );
-	ajaxLocation.href = "";
-	ajaxLocation = ajaxLocation.href;
-}
-
-// Segment location into parts
-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
-	// dataTypeExpression is optional and defaults to "*"
-	return function( dataTypeExpression, func ) {
-
-		if ( typeof dataTypeExpression !== "string" ) {
-			func = dataTypeExpression;
-			dataTypeExpression = "*";
-		}
-
-		if ( jQuery.isFunction( func ) ) {
-			var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
-				i = 0,
-				length = dataTypes.length,
-				dataType,
-				list,
-				placeBefore;
-
-			// For each dataType in the dataTypeExpression
-			for(; i < length; i++ ) {
-				dataType = dataTypes[ i ];
-				// We control if we're asked to add before
-				// any existing element
-				placeBefore = /^\+/.test( dataType );
-				if ( placeBefore ) {
-					dataType = dataType.substr( 1 ) || "*";
-				}
-				list = structure[ dataType ] = structure[ dataType ] || [];
-				// then we add to the structure accordingly
-				list[ placeBefore ? "unshift" : "push" ]( func );
-			}
-		}
-	};
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
-		dataType /* internal */, inspected /* internal */ ) {
-
-	dataType = dataType || options.dataTypes[ 0 ];
-	inspected = inspected || {};
-
-	inspected[ dataType ] = true;
-
-	var list = structure[ dataType ],
-		i = 0,
-		length = list ? list.length : 0,
-		executeOnly = ( structure === prefilters ),
-		selection;
-
-	for(; i < length && ( executeOnly || !selection ); i++ ) {
-		selection = list[ i ]( options, originalOptions, jqXHR );
-		// If we got redirected to another dataType
-		// we try there if executing only and not done already
-		if ( typeof selection === "string" ) {
-			if ( !executeOnly || inspected[ selection ] ) {
-				selection = undefined;
-			} else {
-				options.dataTypes.unshift( selection );
-				selection = inspectPrefiltersOrTransports(
-						structure, options, originalOptions, jqXHR, selection, inspected );
-			}
-		}
-	}
-	// If we're only executing or nothing was selected
-	// we try the catchall dataType if not done already
-	if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
-		selection = inspectPrefiltersOrTransports(
-				structure, options, originalOptions, jqXHR, "*", inspected );
-	}
-	// unnecessary when only executing (prefilters)
-	// but it'll be ignored by the caller in that case
-	return selection;
-}
-
-jQuery.fn.extend({
-	load: function( url, params, callback ) {
-		if ( typeof url !== "string" && _load ) {
-			return _load.apply( this, arguments );
-
-		// 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 = undefined;
-
-			// 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 callback (responseText is used internally)
-			complete: function( jqXHR, status, responseText ) {
-				// Store the response as specified by the jqXHR object
-				responseText = jqXHR.responseText;
-				// If successful, inject the HTML into all the matched elements
-				if ( jqXHR.isResolved() ) {
-					// #4825: Get the actual response in case
-					// a dataFilter is present in ajaxSettings
-					jqXHR.done(function( r ) {
-						responseText = r;
-					});
-					// 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(responseText.replace(rscript, ""))
-
-							// Locate the specified elements
-							.find(selector) :
-
-						// If not, just inject the full result
-						responseText );
-				}
-
-				if ( callback ) {
-					self.each( callback, [ responseText, status, jqXHR ] );
-				}
-			}
-		});
-
-		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.replace( rCRLF, "\r\n" ) };
-					}) :
-					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-		}).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.each( [ "get", "post" ], function( i, method ) {
-	jQuery[ method ] = function( url, data, callback, type ) {
-		// shift arguments if data argument was omitted
-		if ( jQuery.isFunction( data ) ) {
-			type = type || callback;
-			callback = data;
-			data = undefined;
-		}
-
-		return jQuery.ajax({
-			type: method,
-			url: url,
-			data: data,
-			success: callback,
-			dataType: type
-		});
-	};
-});
-
-jQuery.extend({
-
-	getScript: function( url, callback ) {
-		return jQuery.get( url, undefined, callback, "script" );
-	},
-
-	getJSON: function( url, data, callback ) {
-		return jQuery.get( url, data, callback, "json" );
-	},
-
-	// Creates a full fledged settings object into target
-	// with both ajaxSettings and settings fields.
-	// If target is omitted, writes into ajaxSettings.
-	ajaxSetup: function ( target, settings ) {
-		if ( !settings ) {
-			// Only one parameter, we extend ajaxSettings
-			settings = target;
-			target = jQuery.extend( true, jQuery.ajaxSettings, settings );
-		} else {
-			// target was provided, we extend into it
-			jQuery.extend( true, target, jQuery.ajaxSettings, settings );
-		}
-		// Flatten fields we don't want deep extended
-		for( var field in { context: 1, url: 1 } ) {
-			if ( field in settings ) {
-				target[ field ] = settings[ field ];
-			} else if( field in jQuery.ajaxSettings ) {
-				target[ field ] = jQuery.ajaxSettings[ field ];
-			}
-		}
-		return target;
-	},
-
-	ajaxSettings: {
-		url: ajaxLocation,
-		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
-		global: true,
-		type: "GET",
-		contentType: "application/x-www-form-urlencoded",
-		processData: true,
-		async: true,
-		/*
-		timeout: 0,
-		data: null,
-		dataType: null,
-		username: null,
-		password: null,
-		cache: null,
-		traditional: false,
-		headers: {},
-		*/
-
-		accepts: {
-			xml: "application/xml, text/xml",
-			html: "text/html",
-			text: "text/plain",
-			json: "application/json, text/javascript",
-			"*": "*/*"
-		},
-
-		contents: {
-			xml: /xml/,
-			html: /html/,
-			json: /json/
-		},
-
-		responseFields: {
-			xml: "responseXML",
-			text: "responseText"
-		},
-
-		// List of data converters
-		// 1) key format is "source_type destination_type" (a single space in-between)
-		// 2) the catchall symbol "*" can be used for source_type
-		converters: {
-
-			// Convert anything to text
-			"* text": window.String,
-
-			// Text to html (true = no transformation)
-			"text html": true,
-
-			// Evaluate text as a json expression
-			"text json": jQuery.parseJSON,
-
-			// Parse text as xml
-			"text xml": jQuery.parseXML
-		}
-	},
-
-	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
-	ajaxTransport: addToPrefiltersOrTransports( transports ),
-
-	// Main method
-	ajax: function( url, options ) {
-
-		// If url is an object, simulate pre-1.5 signature
-		if ( typeof url === "object" ) {
-			options = url;
-			url = undefined;
-		}
-
-		// Force options to be an object
-		options = options || {};
-
-		var // Create the final options object
-			s = jQuery.ajaxSetup( {}, options ),
-			// Callbacks context
-			callbackContext = s.context || s,
-			// Context for global events
-			// It's the callbackContext if one was provided in the options
-			// and if it's a DOM node or a jQuery collection
-			globalEventContext = callbackContext !== s &&
-				( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
-						jQuery( callbackContext ) : jQuery.event,
-			// Deferreds
-			deferred = jQuery.Deferred(),
-			completeDeferred = jQuery._Deferred(),
-			// Status-dependent callbacks
-			statusCode = s.statusCode || {},
-			// ifModified key
-			ifModifiedKey,
-			// Headers (they are sent all at once)
-			requestHeaders = {},
-			requestHeadersNames = {},
-			// Response headers
-			responseHeadersString,
-			responseHeaders,
-			// transport
-			transport,
-			// timeout handle
-			timeoutTimer,
-			// Cross-domain detection vars
-			parts,
-			// The jqXHR state
-			state = 0,
-			// To know if global events are to be dispatched
-			fireGlobals,
-			// Loop variable
-			i,
-			// Fake xhr
-			jqXHR = {
-
-				readyState: 0,
-
-				// Caches the header
-				setRequestHeader: function( name, value ) {
-					if ( !state ) {
-						var lname = name.toLowerCase();
-						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
-						requestHeaders[ name ] = value;
-					}
-					return this;
-				},
-
-				// Raw string
-				getAllResponseHeaders: function() {
-					return state === 2 ? responseHeadersString : null;
-				},
-
-				// Builds headers hashtable if needed
-				getResponseHeader: function( key ) {
-					var match;
-					if ( state === 2 ) {
-						if ( !responseHeaders ) {
-							responseHeaders = {};
-							while( ( match = rheaders.exec( responseHeadersString ) ) ) {
-								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
-							}
-						}
-						match = responseHeaders[ key.toLowerCase() ];
-					}
-					return match === undefined ? null : match;
-				},
-
-				// Overrides response content-type header
-				overrideMimeType: function( type ) {
-					if ( !state ) {
-						s.mimeType = type;
-					}
-					return this;
-				},
-
-				// Cancel the request
-				abort: function( statusText ) {
-					statusText = statusText || "abort";
-					if ( transport ) {
-						transport.abort( statusText );
-					}
-					done( 0, statusText );
-					return this;
-				}
-			};
-
-		// Callback for when everything is done
-		// It is defined here because jslint complains if it is declared
-		// at the end of the function (which would be more logical and readable)
-		function done( status, statusText, responses, headers ) {
-
-			// Called once
-			if ( state === 2 ) {
-				return;
-			}
-
-			// State is "done" now
-			state = 2;
-
-			// Clear timeout if it exists
-			if ( timeoutTimer ) {
-				clearTimeout( timeoutTimer );
-			}
-
-			// Dereference transport for early garbage collection
-			// (no matter how long the jqXHR object will be used)
-			transport = undefined;
-
-			// Cache response headers
-			responseHeadersString = headers || "";
-
-			// Set readyState
-			jqXHR.readyState = status ? 4 : 0;
-
-			var isSuccess,
-				success,
-				error,
-				response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
-				lastModified,
-				etag;
-
-			// If successful, handle type chaining
-			if ( status >= 200 && status < 300 || status === 304 ) {
-
-				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-				if ( s.ifModified ) {
-
-					if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
-						jQuery.lastModified[ ifModifiedKey ] = lastModified;
-					}
-					if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
-						jQuery.etag[ ifModifiedKey ] = etag;
-					}
-				}
-
-				// If not modified
-				if ( status === 304 ) {
-
-					statusText = "notmodified";
-					isSuccess = true;
-
-				// If we have data
-				} else {
-
-					try {
-						success = ajaxConvert( s, response );
-						statusText = "success";
-						isSuccess = true;
-					} catch(e) {
-						// We have a parsererror
-						statusText = "parsererror";
-						error = e;
-					}
-				}
-			} else {
-				// We extract error from statusText
-				// then normalize statusText and status for non-aborts
-				error = statusText;
-				if( !statusText || status ) {
-					statusText = "error";
-					if ( status < 0 ) {
-						status = 0;
-					}
-				}
-			}
-
-			// Set data for the fake xhr object
-			jqXHR.status = status;
-			jqXHR.statusText = statusText;
-
-			// Success/Error
-			if ( isSuccess ) {
-				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
-			} else {
-				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
-			}
-
-			// Status-dependent callbacks
-			jqXHR.statusCode( statusCode );
-			statusCode = undefined;
-
-			if ( fireGlobals ) {
-				globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
-						[ jqXHR, s, isSuccess ? success : error ] );
-			}
-
-			// Complete
-			completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] );
-
-			if ( fireGlobals ) {
-				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s] );
-				// Handle the global AJAX counter
-				if ( !( --jQuery.active ) ) {
-					jQuery.event.trigger( "ajaxStop" );
-				}
-			}
-		}
-
-		// Attach deferreds
-		deferred.promise( jqXHR );
-		jqXHR.success = jqXHR.done;
-		jqXHR.error = jqXHR.fail;
-		jqXHR.complete = completeDeferred.done;
-
-		// Status-dependent callbacks
-		jqXHR.statusCode = function( map ) {
-			if ( map ) {
-				var tmp;
-				if ( state < 2 ) {
-					for( tmp in map ) {
-						statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
-					}
-				} else {
-					tmp = map[ jqXHR.status ];
-					jqXHR.then( tmp, tmp );
-				}
-			}
-			return this;
-		};
-
-		// Remove hash character (#7531: and string promotion)
-		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
-		// We also use the url parameter if available
-		s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
-
-		// Extract dataTypes list
-		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
-
-		// Determine if a cross-domain request is in order
-		if ( s.crossDomain == null ) {
-			parts = rurl.exec( s.url.toLowerCase() );
-			s.crossDomain = !!( parts &&
-				( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
-					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
-						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
-			);
-		}
-
-		// Convert data if not already a string
-		if ( s.data && s.processData && typeof s.data !== "string" ) {
-			s.data = jQuery.param( s.data, s.traditional );
-		}
-
-		// Apply prefilters
-		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
-		// If request was aborted inside a prefiler, stop there
-		if ( state === 2 ) {
-			return false;
-		}
-
-		// We can fire global events as of now if asked to
-		fireGlobals = s.global;
-
-		// Uppercase the type
-		s.type = s.type.toUpperCase();
-
-		// Determine if request has content
-		s.hasContent = !rnoContent.test( s.type );
-
-		// Watch for a new set of requests
-		if ( fireGlobals && jQuery.active++ === 0 ) {
-			jQuery.event.trigger( "ajaxStart" );
-		}
-
-		// More options handling for requests with no content
-		if ( !s.hasContent ) {
-
-			// If data is available, append data to url
-			if ( s.data ) {
-				s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
-			}
-
-			// Get ifModifiedKey before adding the anti-cache parameter
-			ifModifiedKey = s.url;
-
-			// Add anti-cache in url if needed
-			if ( s.cache === false ) {
-
-				var ts = jQuery.now(),
-					// try replacing _= if it is there
-					ret = s.url.replace( rts, "$1_=" + ts );
-
-				// if nothing was replaced, add timestamp to the end
-				s.url = ret + ( (ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
-			}
-		}
-
-		// Set the correct header, if data is being sent
-		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
-			jqXHR.setRequestHeader( "Content-Type", s.contentType );
-		}
-
-		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-		if ( s.ifModified ) {
-			ifModifiedKey = ifModifiedKey || s.url;
-			if ( jQuery.lastModified[ ifModifiedKey ] ) {
-				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
-			}
-			if ( jQuery.etag[ ifModifiedKey ] ) {
-				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
-			}
-		}
-
-		// Set the Accepts header for the server, depending on the dataType
-		jqXHR.setRequestHeader(
-			"Accept",
-			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
-				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", */*; q=0.01" : "" ) :
-				s.accepts[ "*" ]
-		);
-
-		// Check for headers option
-		for ( i in s.headers ) {
-			jqXHR.setRequestHeader( i, s.headers[ i ] );
-		}
-
-		// Allow custom headers/mimetypes and early abort
-		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
-				// Abort if not done already
-				jqXHR.abort();
-				return false;
-
-		}
-
-		// Install callbacks on deferreds
-		for ( i in { success: 1, error: 1, complete: 1 } ) {
-			jqXHR[ i ]( s[ i ] );
-		}
-
-		// Get transport
-		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
-		// If no transport, we auto-abort
-		if ( !transport ) {
-			done( -1, "No Transport" );
-		} else {
-			jqXHR.readyState = 1;
-			// Send global event
-			if ( fireGlobals ) {
-				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
-			}
-			// Timeout
-			if ( s.async && s.timeout > 0 ) {
-				timeoutTimer = setTimeout( function(){
-					jqXHR.abort( "timeout" );
-				}, s.timeout );
-			}
-
-			try {
-				state = 1;
-				transport.send( requestHeaders, done );
-			} catch (e) {
-				// Propagate exception as error if not done
-				if ( status < 2 ) {
-					done( -1, e );
-				// Simply rethrow otherwise
-				} else {
-					jQuery.error( e );
-				}
-			}
-		}
-
-		return jqXHR;
-	},
-
-	// Serialize an array of form elements or a set of
-	// key/values into a query string
-	param: function( a, traditional ) {
-		var s = [],
-			add = function( 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 );
-			};
-
-		// 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 && !jQuery.isPlainObject( a ) ) ) {
-			// 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 ], traditional, add );
-			}
-		}
-
-		// Return the resulting serialization
-		return s.join( "&" ).replace( r20, "+" );
-	}
-});
-
-function buildParams( prefix, obj, traditional, add ) {
-	if ( jQuery.isArray( obj ) ) {
-		// Serialize array item.
-		jQuery.each( obj, function( i, v ) {
-			if ( traditional || rbracket.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, traditional, add );
-			}
-		});
-
-	} else if ( !traditional && obj != null && typeof obj === "object" ) {
-		// Serialize object item.
-		for ( var name in obj ) {
-			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
-		}
-
-	} else {
-		// Serialize scalar item.
-		add( prefix, obj );
-	}
-}
-
-// This is still on the jQuery object... for now
-// Want to move this to jQuery.ajax some day
-jQuery.extend({
-
-	// Counter for holding the number of active queries
-	active: 0,
-
-	// Last-Modified header cache for next request
-	lastModified: {},
-	etag: {}
-
-});
-
-/* Handles responses to an ajax request:
- * - sets all responseXXX fields accordingly
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
-
-	var contents = s.contents,
-		dataTypes = s.dataTypes,
-		responseFields = s.responseFields,
-		ct,
-		type,
-		finalDataType,
-		firstDataType;
-
-	// Fill responseXXX fields
-	for( type in responseFields ) {
-		if ( type in responses ) {
-			jqXHR[ responseFields[type] ] = responses[ type ];
-		}
-	}
-
-	// Remove auto dataType and get content-type in the process
-	while( dataTypes[ 0 ] === "*" ) {
-		dataTypes.shift();
-		if ( ct === undefined ) {
-			ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
-		}
-	}
-
-	// Check if we're dealing with a known content-type
-	if ( ct ) {
-		for ( type in contents ) {
-			if ( contents[ type ] && contents[ type ].test( ct ) ) {
-				dataTypes.unshift( type );
-				break;
-			}
-		}
-	}
-
-	// Check to see if we have a response for the expected dataType
-	if ( dataTypes[ 0 ] in responses ) {
-		finalDataType = dataTypes[ 0 ];
-	} else {
-		// Try convertible dataTypes
-		for ( type in responses ) {
-			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
-				finalDataType = type;
-				break;
-			}
-			if ( !firstDataType ) {
-				firstDataType = type;
-			}
-		}
-		// Or just use first one
-		finalDataType = finalDataType || firstDataType;
-	}
-
-	// If we found a dataType
-	// We add the dataType to the list if needed
-	// and return the corresponding response
-	if ( finalDataType ) {
-		if ( finalDataType !== dataTypes[ 0 ] ) {
-			dataTypes.unshift( finalDataType );
-		}
-		return responses[ finalDataType ];
-	}
-}
-
-// Chain conversions given the request and the original response
-function ajaxConvert( s, response ) {
-
-	// Apply the dataFilter if provided
-	if ( s.dataFilter ) {
-		response = s.dataFilter( response, s.dataType );
-	}
-
-	var dataTypes = s.dataTypes,
-		converters = {},
-		i,
-		key,
-		length = dataTypes.length,
-		tmp,
-		// Current and previous dataTypes
-		current = dataTypes[ 0 ],
-		prev,
-		// Conversion expression
-		conversion,
-		// Conversion function
-		conv,
-		// Conversion functions (transitive conversion)
-		conv1,
-		conv2;
-
-	// For each dataType in the chain
-	for( i = 1; i < length; i++ ) {
-
-		// Create converters map
-		// with lowercased keys
-		if ( i === 1 ) {
-			for( key in s.converters ) {
-				if( typeof key === "string" ) {
-					converters[ key.toLowerCase() ] = s.converters[ key ];
-				}
-			}
-		}
-
-		// Get the dataTypes
-		prev = current;
-		current = dataTypes[ i ];
-
-		// If current is auto dataType, update it to prev
-		if( current === "*" ) {
-			current = prev;
-		// If no auto and dataTypes are actually different
-		} else if ( prev !== "*" && prev !== current ) {
-
-			// Get the converter
-			conversion = prev + " " + current;
-			conv = converters[ conversion ] || converters[ "* " + current ];
-
-			// If there is no direct converter, search transitively
-			if ( !conv ) {
-				conv2 = undefined;
-				for( conv1 in converters ) {
-					tmp = conv1.split( " " );
-					if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
-						conv2 = converters[ tmp[1] + " " + current ];
-						if ( conv2 ) {
-							conv1 = converters[ conv1 ];
-							if ( conv1 === true ) {
-								conv = conv2;
-							} else if ( conv2 === true ) {
-								conv = conv1;
-							}
-							break;
-						}
-					}
-				}
-			}
-			// If we found no converter, dispatch an error
-			if ( !( conv || conv2 ) ) {
-				jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
-			}
-			// If found converter is not an equivalence
-			if ( conv !== true ) {
-				// Convert with 1 or 2 converters accordingly
-				response = conv ? conv( response ) : conv2( conv1(response) );
-			}
-		}
-	}
-	return response;
-}
-
-
-
-
-var jsc = jQuery.now(),
-	jsre = /(\=)\?(&|$)|\?\?/i;
-
-// Default jsonp settings
-jQuery.ajaxSetup({
-	jsonp: "callback",
-	jsonpCallback: function() {
-		return jQuery.expando + "_" + ( jsc++ );
-	}
-});
-
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
-	var inspectData = s.contentType === "application/x-www-form-urlencoded" &&
-		( typeof s.data === "string" );
-
-	if ( s.dataTypes[ 0 ] === "jsonp" ||
-		s.jsonp !== false && ( jsre.test( s.url ) ||
-				inspectData && jsre.test( s.data ) ) ) {
-
-		var responseContainer,
-			jsonpCallback = s.jsonpCallback =
-				jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
-			previous = window[ jsonpCallback ],
-			url = s.url,
-			data = s.data,
-			replace = "$1" + jsonpCallback + "$2";
-
-		if ( s.jsonp !== false ) {
-			url = url.replace( jsre, replace );
-			if ( s.url === url ) {
-				if ( inspectData ) {
-					data = data.replace( jsre, replace );
-				}
-				if ( s.data === data ) {
-					// Add callback manually
-					url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
-				}
-			}
-		}
-
-		s.url = url;
-		s.data = data;
-
-		// Install callback
-		window[ jsonpCallback ] = function( response ) {
-			responseContainer = [ response ];
-		};
-
-		// Clean-up function
-		jqXHR.always(function() {
-			// Set callback back to previous value
-			window[ jsonpCallback ] = previous;
-			// Call if it was a function and we have a response
-			if ( responseContainer && jQuery.isFunction( previous ) ) {
-				window[ jsonpCallback ]( responseContainer[ 0 ] );
-			}
-		});
-
-		// Use data converter to retrieve json after script execution
-		s.converters["script json"] = function() {
-			if ( !responseContainer ) {
-				jQuery.error( jsonpCallback + " was not called" );
-			}
-			return responseContainer[ 0 ];
-		};
-
-		// force json dataType
-		s.dataTypes[ 0 ] = "json";
-
-		// Delegate to script
-		return "script";
-	}
-});
-
-
-
-
-// Install script dataType
-jQuery.ajaxSetup({
-	accepts: {
-		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
-	},
-	contents: {
-		script: /javascript|ecmascript/
-	},
-	converters: {
-		"text script": function( text ) {
-			jQuery.globalEval( text );
-			return text;
-		}
-	}
-});
-
-// Handle cache's special case and global
-jQuery.ajaxPrefilter( "script", function( s ) {
-	if ( s.cache === undefined ) {
-		s.cache = false;
-	}
-	if ( s.crossDomain ) {
-		s.type = "GET";
-		s.global = false;
-	}
-});
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function(s) {
-
-	// This transport only deals with cross domain requests
-	if ( s.crossDomain ) {
-
-		var script,
-			head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
-
-		return {
-
-			send: function( _, callback ) {
-
-				script = document.createElement( "script" );
-
-				script.async = "async";
-
-				if ( s.scriptCharset ) {
-					script.charset = s.scriptCharset;
-				}
-
-				script.src = s.url;
-
-				// Attach handlers for all browsers
-				script.onload = script.onreadystatechange = function( _, isAbort ) {
-
-					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
-
-						// Handle memory leak in IE
-						script.onload = script.onreadystatechange = null;
-
-						// Remove the script
-						if ( head && script.parentNode ) {
-							head.removeChild( script );
-						}
-
-						// Dereference the script
-						script = undefined;
-
-						// Callback if not abort
-						if ( !isAbort ) {
-							callback( 200, "success" );
-						}
-					}
-				};
-				// 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 );
-			},
-
-			abort: function() {
-				if ( script ) {
-					script.onload( 0, 1 );
-				}
-			}
-		};
-	}
-});
-
-
-
-
-var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
-	xhrOnUnloadAbort = window.ActiveXObject ? function() {
-		// Abort all pending requests
-		for ( var key in xhrCallbacks ) {
-			xhrCallbacks[ key ]( 0, 1 );
-		}
-	} : false,
-	xhrId = 0,
-	xhrCallbacks;
-
-// Functions to create xhrs
-function createStandardXHR() {
-	try {
-		return new window.XMLHttpRequest();
-	} catch( e ) {}
-}
-
-function createActiveXHR() {
-	try {
-		return new window.ActiveXObject( "Microsoft.XMLHTTP" );
-	} catch( e ) {}
-}
-
-// Create the request object
-// (This is still attached to ajaxSettings for backward compatibility)
-jQuery.ajaxSettings.xhr = window.ActiveXObject ?
-	/* Microsoft failed to properly
-	 * implement the XMLHttpRequest in IE7 (can't request local files),
-	 * so we use the ActiveXObject when it is available
-	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
-	 * we need a fallback.
-	 */
-	function() {
-		return !this.isLocal && createStandardXHR() || createActiveXHR();
-	} :
-	// For all other browsers, use the standard XMLHttpRequest object
-	createStandardXHR;
-
-// Determine support properties
-(function( xhr ) {
-	jQuery.extend( jQuery.support, {
-		ajax: !!xhr,
-		cors: !!xhr && ( "withCredentials" in xhr )
-	});
-})( jQuery.ajaxSettings.xhr() );
-
-// Create transport if the browser can provide an xhr
-if ( jQuery.support.ajax ) {
-
-	jQuery.ajaxTransport(function( s ) {
-		// Cross domain only allowed if supported through XMLHttpRequest
-		if ( !s.crossDomain || jQuery.support.cors ) {
-
-			var callback;
-
-			return {
-				send: function( headers, complete ) {
-
-					// Get a new xhr
-					var xhr = s.xhr(),
-						handle,
-						i;
-
-					// Open the socket
-					// Passing null username, generates a login popup on Opera (#2865)
-					if ( s.username ) {
-						xhr.open( s.type, s.url, s.async, s.username, s.password );
-					} else {
-						xhr.open( s.type, s.url, s.async );
-					}
-
-					// Apply custom fields if provided
-					if ( s.xhrFields ) {
-						for ( i in s.xhrFields ) {
-							xhr[ i ] = s.xhrFields[ i ];
-						}
-					}
-
-					// Override mime type if needed
-					if ( s.mimeType && xhr.overrideMimeType ) {
-						xhr.overrideMimeType( s.mimeType );
-					}
-
-					// X-Requested-With header
-					// For cross-domain requests, seeing as conditions for a preflight are
-					// akin to a jigsaw puzzle, we simply never set it to be sure.
-					// (it can always be set on a per-request basis or even using ajaxSetup)
-					// For same-domain requests, won't change header if already provided.
-					if ( !s.crossDomain && !headers["X-Requested-With"] ) {
-						headers[ "X-Requested-With" ] = "XMLHttpRequest";
-					}
-
-					// Need an extra try/catch for cross domain requests in Firefox 3
-					try {
-						for ( i in headers ) {
-							xhr.setRequestHeader( i, headers[ i ] );
-						}
-					} catch( _ ) {}
-
-					// Do send the request
-					// This may raise an exception which is actually
-					// handled in jQuery.ajax (so no try/catch here)
-					xhr.send( ( s.hasContent && s.data ) || null );
-
-					// Listener
-					callback = function( _, isAbort ) {
-
-						var status,
-							statusText,
-							responseHeaders,
-							responses,
-							xml;
-
-						// Firefox throws exceptions when accessing properties
-						// of an xhr when a network error occured
-						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
-						try {
-
-							// Was never called and is aborted or complete
-							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
-
-								// Only called once
-								callback = undefined;
-
-								// Do not keep as active anymore
-								if ( handle ) {
-									xhr.onreadystatechange = jQuery.noop;
-									if ( xhrOnUnloadAbort ) {
-										delete xhrCallbacks[ handle ];
-									}
-								}
-
-								// If it's an abort
-								if ( isAbort ) {
-									// Abort it manually if needed
-									if ( xhr.readyState !== 4 ) {
-										xhr.abort();
-									}
-								} else {
-									status = xhr.status;
-									responseHeaders = xhr.getAllResponseHeaders();
-									responses = {};
-									xml = xhr.responseXML;
-
-									// Construct response list
-									if ( xml && xml.documentElement /* #4958 */ ) {
-										responses.xml = xml;
-									}
-									responses.text = xhr.responseText;
-
-									// Firefox throws an exception when accessing
-									// statusText for faulty cross-domain requests
-									try {
-										statusText = xhr.statusText;
-									} catch( e ) {
-										// We normalize with Webkit giving an empty statusText
-										statusText = "";
-									}
-
-									// Filter status for non standard behaviors
-
-									// If the request is local and we have data: assume a success
-									// (success with no data won't get notified, that's the best we
-									// can do given current implementations)
-									if ( !status && s.isLocal && !s.crossDomain ) {
-										status = responses.text ? 200 : 404;
-									// IE - #1450: sometimes returns 1223 when it should be 204
-									} else if ( status === 1223 ) {
-										status = 204;
-									}
-								}
-							}
-						} catch( firefoxAccessException ) {
-							if ( !isAbort ) {
-								complete( -1, firefoxAccessException );
-							}
-						}
-
-						// Call complete if needed
-						if ( responses ) {
-							complete( status, statusText, responses, responseHeaders );
-						}
-					};
-
-					// if we're in sync mode or it's in cache
-					// and has been retrieved directly (IE6 & IE7)
-					// we need to manually fire the callback
-					if ( !s.async || xhr.readyState === 4 ) {
-						callback();
-					} else {
-						handle = ++xhrId;
-						if ( xhrOnUnloadAbort ) {
-							// Create the active xhrs callbacks list if needed
-							// and attach the unload handler
-							if ( !xhrCallbacks ) {
-								xhrCallbacks = {};
-								jQuery( window ).unload( xhrOnUnloadAbort );
-							}
-							// Add to list of active xhrs callbacks
-							xhrCallbacks[ handle ] = callback;
-						}
-						xhr.onreadystatechange = callback;
-					}
-				},
-
-				abort: function() {
-					if ( callback ) {
-						callback(0,1);
-					}
-				}
-			};
-		}
-	});
-}
-
-
-
-
-var elemdisplay = {},
-	iframe, iframeDoc,
-	rfxtypes = /^(?:toggle|show|hide)$/,
-	rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
-	timerId,
-	fxAttrs = [
-		// height animations
-		[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
-		// width animations
-		[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
-		// opacity animations
-		[ "opacity" ]
-	],
-	fxNow,
-	requestAnimationFrame = window.webkitRequestAnimationFrame ||
-	    window.mozRequestAnimationFrame ||
-	    window.oRequestAnimationFrame;
-
-jQuery.fn.extend({
-	show: function( speed, easing, callback ) {
-		var elem, display;
-
-		if ( speed || speed === 0 ) {
-			return this.animate( genFx("show", 3), speed, easing, callback);
-
-		} else {
-			for ( var i = 0, j = this.length; i < j; i++ ) {
-				elem = this[i];
-
-				if ( elem.style ) {
-					display = elem.style.display;
-
-					// Reset the inline display of this element to learn if it is
-					// being hidden by cascaded rules or not
-					if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
-						display = elem.style.display = "";
-					}
-
-					// Set elements which have been overridden with display: none
-					// in a stylesheet to whatever the default browser style is
-					// for such an element
-					if ( display === "" && jQuery.css( elem, "display" ) === "none" ) {
-						jQuery._data(elem, "olddisplay", defaultDisplay(elem.nodeName));
-					}
-				}
-			}
-
-			// Set the display of most of the elements in a second loop
-			// to avoid the constant reflow
-			for ( i = 0; i < j; i++ ) {
-				elem = this[i];
-
-				if ( elem.style ) {
-					display = elem.style.display;
-
-					if ( display === "" || display === "none" ) {
-						elem.style.display = jQuery._data(elem, "olddisplay") || "";
-					}
-				}
-			}
-
-			return this;
-		}
-	},
-
-	hide: function( speed, easing, callback ) {
-		if ( speed || speed === 0 ) {
-			return this.animate( genFx("hide", 3), speed, easing, callback);
-
-		} else {
-			for ( var i = 0, j = this.length; i < j; i++ ) {
-				if ( this[i].style ) {
-					var display = jQuery.css( this[i], "display" );
-
-					if ( display !== "none" && !jQuery._data( this[i], "olddisplay" ) ) {
-						jQuery._data( this[i], "olddisplay", display );
-					}
-				}
-			}
-
-			// Set the display of the elements in a second loop
-			// to avoid the constant reflow
-			for ( i = 0; i < j; i++ ) {
-				if ( this[i].style ) {
-					this[i].style.display = "none";
-				}
-			}
-
-			return this;
-		}
-	},
-
-	// Save the old toggle function
-	_toggle: jQuery.fn.toggle,
-
-	toggle: function( fn, fn2, callback ) {
-		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, callback);
-		}
-
-		return this;
-	},
-
-	fadeTo: function( speed, to, easing, callback ) {
-		return this.filter(":hidden").css("opacity", 0).show().end()
-					.animate({opacity: to}, speed, easing, callback);
-	},
-
-	animate: function( prop, speed, easing, callback ) {
-		var optall = jQuery.speed(speed, easing, callback);
-
-		if ( jQuery.isEmptyObject( prop ) ) {
-			return this.each( optall.complete, [ false ] );
-		}
-
-		return this[ optall.queue === false ? "each" : "queue" ](function() {
-			// XXX 'this' does not always have a nodeName when running the
-			// test suite
-
-			if ( optall.queue === false ) {
-				jQuery._mark( this );
-			}
-
-			var opt = jQuery.extend({}, optall),
-				isElement = this.nodeType === 1,
-				hidden = isElement && jQuery(this).is(":hidden"),
-				name, val, p,
-				display, e,
-				parts, start, end, unit;
-
-			// will store per property easing and be used to determine when an animation is complete
-			opt.animatedProperties = {};
-
-			for ( p in prop ) {
-
-				// property name normalization
-				name = jQuery.camelCase( p );
-				if ( p !== name ) {
-					prop[ name ] = prop[ p ];
-					delete prop[ p ];
-				}
-
-				val = prop[name];
-
-				if ( val === "hide" && hidden || val === "show" && !hidden ) {
-					return opt.complete.call(this);
-				}
-
-				if ( isElement && ( name === "height" || name === "width" ) ) {
-					// Make sure that nothing sneaks out
-					// Record all 3 overflow attributes because IE does not
-					// change the overflow attribute when overflowX and
-					// overflowY are set to the same value
-					opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
-
-					// Set display property to inline-block for height/width
-					// animations on inline elements that are having width/height
-					// animated
-					if ( jQuery.css( this, "display" ) === "inline" &&
-							jQuery.css( this, "float" ) === "none" ) {
-						if ( !jQuery.support.inlineBlockNeedsLayout ) {
-							this.style.display = "inline-block";
-
-						} else {
-							display = defaultDisplay(this.nodeName);
-
-							// inline-level elements accept inline-block;
-							// block-level elements need to be inline with layout
-							if ( display === "inline" ) {
-								this.style.display = "inline-block";
-
-							} else {
-								this.style.display = "inline";
-								this.style.zoom = 1;
-							}
-						}
-					}
-				}
-
-				// easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
-				opt.animatedProperties[name] = jQuery.isArray( val ) ?
-					val[1]:
-					opt.specialEasing && opt.specialEasing[name] || opt.easing || 'swing';
-			}
-
-			if ( opt.overflow != null ) {
-				this.style.overflow = "hidden";
-			}
-
-			for ( p in prop ) {
-				e = new jQuery.fx( this, opt, p );
-
-				val = prop[p];
-
-				if ( rfxtypes.test(val) ) {
-					e[ val === "toggle" ? hidden ? "show" : "hide" : val ]();
-
-				} else {
-					parts = rfxnum.exec(val);
-					start = e.cur();
-
-					if ( parts ) {
-						end = parseFloat( parts[2] );
-						unit = parts[3] || ( jQuery.cssNumber[ name ] ? "" : "px" );
-
-						// We need to compute starting value
-						if ( unit !== "px" ) {
-							jQuery.style( this, p, (end || 1) + unit);
-							start = ((end || 1) / e.cur()) * start;
-							jQuery.style( this, p, 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 ) {
-		if ( clearQueue ) {
-			this.queue([]);
-		}
-
-		this.each(function() {
-			var timers = jQuery.timers,
-				i = timers.length;
-			// clear marker counters if we know they won't be
-			if ( !gotoEnd ) {
-				jQuery._unmark( true, this );
-			}
-			// go in reverse order so anything added to the queue during the loop is ignored
-			while ( 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;
-	}
-
-});
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
-	setTimeout( clearFxNow, 0 );
-	return ( fxNow = jQuery.now() );
-}
-
-function clearFxNow() {
-	fxNow = undefined;
-}
-
-// Generate parameters to create a standard animation
-function genFx( type, num ) {
-	var obj = {};
-
-	jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {
-		obj[ this ] = type;
-	});
-
-	return obj;
-}
-
-// 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" },
-	fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
-	jQuery.fn[ name ] = function( speed, easing, callback ) {
-		return this.animate( props, speed, easing, callback );
-	};
-});
-
-jQuery.extend({
-	speed: function( speed, easing, fn ) {
-		var opt = speed && typeof speed === "object" ? jQuery.extend({}, 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 :
-			opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default;
-
-		// Queueing
-		opt.old = opt.complete;
-		opt.complete = function( noUnmark ) {
-			if ( opt.queue !== false ) {
-				jQuery.dequeue( this );
-			} else if ( noUnmark !== false ) {
-				jQuery._unmark( this );
-			}
-
-			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;
-
-		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 );
-	},
-
-	// Get the current size
-	cur: function() {
-		if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {
-			return this.elem[ this.prop ];
-		}
-
-		var parsed,
-			r = jQuery.css( this.elem, this.prop );
-		// Empty strings, null, undefined and "auto" are converted to 0,
-		// complex values such as "rotate(1rad)" are returned as is,
-		// simple values such as "10px" are parsed to Float.
-		return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
-	},
-
-	// Start an animation from one number to another
-	custom: function( from, to, unit ) {
-		var self = this,
-			fx = jQuery.fx,
-			raf;
-
-		this.startTime = fxNow || createFxNow();
-		this.start = from;
-		this.end = to;
-		this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
-		this.now = this.start;
-		this.pos = this.state = 0;
-
-		function t( gotoEnd ) {
-			return self.step(gotoEnd);
-		}
-
-		t.elem = this.elem;
-
-		if ( t() && jQuery.timers.push(t) && !timerId ) {
-			// Use requestAnimationFrame instead of setInterval if available
-			if ( requestAnimationFrame ) {
-				timerId = 1;
-				raf = function() {
-					// When timerId gets set to null at any point, this stops
-					if ( timerId ) {
-						requestAnimationFrame( raf );
-						fx.tick();
-					}
-				};
-				requestAnimationFrame( raf );
-			} else {
-				timerId = setInterval( fx.tick, fx.interval );
-			}
-		}
-	},
-
-	// 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 = fxNow || createFxNow(),
-			done = true,
-			elem = this.elem,
-			options = this.options,
-			i, n;
-
-		if ( gotoEnd || t >= options.duration + this.startTime ) {
-			this.now = this.end;
-			this.pos = this.state = 1;
-			this.update();
-
-			options.animatedProperties[ this.prop ] = true;
-
-			for ( i in options.animatedProperties ) {
-				if ( options.animatedProperties[i] !== true ) {
-					done = false;
-				}
-			}
-
-			if ( done ) {
-				// Reset the overflow
-				if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
-
-					jQuery.each( [ "", "X", "Y" ], function (index, value) {
-						elem.style[ "overflow" + value ] = options.overflow[index];
-					});
-				}
-
-				// Hide the element if the "hide" operation was done
-				if ( options.hide ) {
-					jQuery(elem).hide();
-				}
-
-				// Reset the properties, if the item has been hidden or shown
-				if ( options.hide || options.show ) {
-					for ( var p in options.animatedProperties ) {
-						jQuery.style( elem, p, options.orig[p] );
-					}
-				}
-
-				// Execute the complete function
-				options.complete.call( elem );
-			}
-
-			return false;
-
-		} else {
-			// classical easing cannot be used with an Infinity duration
-			if ( options.duration == Infinity ) {
-				this.now = t;
-			} else {
-				n = t - this.startTime;
-
-				this.state = n / options.duration;
-				// Perform the easing function, defaults to swing
-				this.pos = jQuery.easing[options.animatedProperties[this.prop]](this.state, n, 0, 1, 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,
-			i = timers.length;
-		while ( i-- ) {
-			if ( !timers[i]() ) {
-				timers.splice(i, 1);
-			}
-		}
-
-		if ( !timers.length ) {
-			jQuery.fx.stop();
-		}
-	},
-
-	interval: 13,
-
-	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;
-	};
-}
-
-// Try to restore the default display value of an element
-function defaultDisplay( nodeName ) {
-
-	if ( !elemdisplay[ nodeName ] ) {
-
-		var elem = jQuery( "<" + nodeName + ">" ).appendTo( "body" ),
-			display = elem.css( "display" );
-
-		elem.remove();
-
-		// If the simple way fails,
-		// get element's real default display by attaching it to a temp iframe
-		if ( display === "none" || display === "" ) {
-			// No iframe to use yet, so create it
-			if ( !iframe ) {
-				iframe = document.createElement( "iframe" );
-				iframe.frameBorder = iframe.width = iframe.height = 0;
-			}
-
-			document.body.appendChild( iframe );
-
-			// Create a cacheable copy of the iframe document on first call.
-			// IE and Opera will allow us to reuse the iframeDoc without re-writing the fake html
-			// document to it, Webkit & Firefox won't allow reusing the iframe document
-			if ( !iframeDoc || !iframe.createElement ) {
-				iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
-				iframeDoc.write( "<!doctype><html><body></body></html>" );
-			}
-
-			elem = iframeDoc.createElement( nodeName );
-
-			iframeDoc.body.appendChild( elem );
-
-			display = jQuery.css( elem, "display" );
-
-			document.body.removeChild( iframe );
-		}
-
-		// Store the correct default display
-		elemdisplay[ nodeName ] = display;
-	}
-
-	return elemdisplay[ nodeName ];
-}
-
-
-
-
-var rtable = /^t(?:able|d|h)$/i,
-	rroot = /^(?:body|html)$/i;
-
-if ( "getBoundingClientRect" in document.documentElement ) {
-	jQuery.fn.offset = function( options ) {
-		var elem = this[0], box;
-
-		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 );
-		}
-
-		try {
-			box = elem.getBoundingClientRect();
-		} catch(e) {}
-
-		var doc = elem.ownerDocument,
-			docElem = doc.documentElement;
-
-		// Make sure we're not dealing with a disconnected DOM node
-		if ( !box || !jQuery.contains( docElem, elem ) ) {
-			return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
-		}
-
-		var body = doc.body,
-			win = getWindow(doc),
-			clientTop  = docElem.clientTop  || body.clientTop  || 0,
-			clientLeft = docElem.clientLeft || body.clientLeft || 0,
-			scrollTop  = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop,
-			scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
-			top  = box.top  + scrollTop  - clientTop,
-			left = box.left + 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 computedStyle,
-			offsetParent = elem.offsetParent,
-			prevOffsetParent = elem,
-			doc = elem.ownerDocument,
-			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 && rtable.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.css(body, "marginTop") ) || 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 );
-		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.css(body, "marginTop") ) || 0;
-			left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
-		}
-
-		return { top: top, left: left };
-	},
-
-	setOffset: function( elem, options, i ) {
-		var position = jQuery.css( elem, "position" );
-
-		// set position first, in-case top/left are set even on static elem
-		if ( position === "static" ) {
-			elem.style.position = "relative";
-		}
-
-		var curElem = jQuery( elem ),
-			curOffset = curElem.offset(),
-			curCSSTop = jQuery.css( elem, "top" ),
-			curCSSLeft = jQuery.css( elem, "left" ),
-			calculatePosition = (position === "absolute" || position === "fixed") && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
-			props = {}, curPosition = {}, curTop, curLeft;
-
-		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
-		if ( calculatePosition ) {
-			curPosition = curElem.position();
-			curTop = curPosition.top;
-			curLeft = curPosition.left;
-		} else {
-			curTop = parseFloat( curCSSTop ) || 0;
-			curLeft = parseFloat( curCSSLeft ) || 0;
-		}
-
-		if ( jQuery.isFunction( options ) ) {
-			options = options.call( elem, i, curOffset );
-		}
-
-		if (options.top != null) {
-			props.top = (options.top - curOffset.top) + curTop;
-		}
-		if (options.left != null) {
-			props.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 = rroot.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.css(elem, "marginTop") ) || 0;
-		offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
-
-		// Add offsetParent borders
-		parentOffset.top  += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
-		parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 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 && (!rroot.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, win;
-
-		if ( val === undefined ) {
-			elem = this[ 0 ];
-
-			if ( !elem ) {
-				return null;
-			}
-
-			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 ];
-		}
-
-		// 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;
-			}
-		});
-	};
-});
-
-function getWindow( elem ) {
-	return jQuery.isWindow( elem ) ?
-		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] ?
-			parseFloat( jQuery.css( this[0], type, "padding" ) ) :
-			null;
-	};
-
-	// outerHeight and outerWidth
-	jQuery.fn["outer" + name] = function( margin ) {
-		return this[0] ?
-			parseFloat( jQuery.css( this[0], type, 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 ]() ) );
-			});
-		}
-
-		if ( jQuery.isWindow( elem ) ) {
-			// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
-			// 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
-			var docElemProp = elem.document.documentElement[ "client" + name ];
-			return elem.document.compatMode === "CSS1Compat" && docElemProp ||
-				elem.document.body[ "client" + name ] || docElemProp;
-
-		// Get document width or height
-		} else if ( elem.nodeType === 9 ) {
-			// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
-			return 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
-		} else if ( size === undefined ) {
-			var orig = jQuery.css( elem, type ),
-				ret = parseFloat( orig );
-
-			return jQuery.isNaN( ret ) ? orig : ret;
-
-		// Set the width or height on the element (default to pixels if value is unitless)
-		} else {
-			return this.css( type, typeof size === "string" ? size : size + "px" );
-		}
-	};
-
-});
-
-
-window.jQuery = window.$ = jQuery;
-})(window);
--- a/web/hdabo/static/hdabo/js/jquery.min.js	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.6
- * http://jquery.com/
- *
- * Copyright 2011, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2011, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Mon May 2 13:50:00 2011 -0400
- */
-(function(a,b){function cw(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function ct(a){if(!ch[a]){var b=f("<"+a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d===""){ci||(ci=c.createElement("iframe"),ci.frameBorder=ci.width=ci.height=0),c.body.appendChild(ci);if(!cj||!ci.createElement)cj=(ci.contentWindow||ci.contentDocument).document,cj.write("<!doctype><html><body></body></html>");b=cj.createElement(a),cj.body.appendChild(b),d=f.css(b,"display"),c.body.removeChild(ci)}ch[a]=d}return ch[a]}function cs(a,b){var c={};f.each(cn.concat.apply([],cn.slice(0,b)),function(){c[this]=a});return c}function cr(){co=b}function cq(){setTimeout(cr,0);return co=f.now()}function cg(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function cf(){try{return new a.XMLHttpRequest}catch(b){}}function b_(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function b$(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bZ(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bD.test(a)?d(a,e):bZ(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bZ(a+"["+e+"]",b[e],c,d);else d(a,b)}function bY(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bS,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bY(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bY(a,c,d,e,"*",g));return l}function bX(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bO),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bB(a,b,c){var d=b==="width"?bv:bw,e=b==="width"?a.offsetWidth:a.offsetHeight;if(c==="border")return e;f.each(d,function(){c||(e-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?e+=parseFloat(f.css(a,"margin"+this))||0:e-=parseFloat(f.css(a,"border"+this+"Width"))||0});return e}function bl(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval(b.text||b.textContent||b.innerHTML||""),b.parentNode&&b.parentNode.removeChild(b)}function bk(a){f.nodeName(a,"input")?bj(a):a.getElementsByTagName&&f.grep(a.getElementsByTagName("input"),bj)}function bj(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bi(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bh(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bg(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bf(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function W(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(R.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(a,b){return(a&&a!=="*"?a+".":"")+b.replace(z,"`").replace(A,"&")}function M(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(x,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function K(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function E(){return!0}function D(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){name="data-"+c.replace(j,"$1-$2").toLowerCase(),d=a.getAttribute(name);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(e){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function H(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(H,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=d.userAgent,x,y,z,A=Object.prototype.toString,B=Object.prototype.hasOwnProperty,C=Array.prototype.push,D=Array.prototype.slice,E=String.prototype.trim,F=Array.prototype.indexOf,G={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?g=[null,a,null]:g=i.exec(a);if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6",length:0,size:function(){return this.length},toArray:function(){return D.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?C.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),y.done(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(D.apply(this,arguments),"slice",D.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:C,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;y.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!y){y=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",z,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",z),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&H()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):G[A.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!B.call(a,"constructor")&&!B.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||B.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:E?function(a){return a==null?"":E.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?C.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(F)return F.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=D.call(arguments,2),g=function(){return a.apply(c,f.concat(D.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(c,d){d&&d instanceof e&&!(d instanceof a)&&(d=a(d));return e.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){G["[object "+b+"]"]=b.toLowerCase()}),x=e.uaMatch(w),x.browser&&(e.browser[x.browser]=!0,e.browser.version=x.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?z=function(){c.removeEventListener("DOMContentLoaded",z,!1),e.ready()}:c.attachEvent&&(z=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",z),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g](h)}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b,d,e,f,g,h,i,j,k,l,m,n,o,p,q;a.setAttribute("className","t"),a.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",b=a.getElementsByTagName("*"),d=a.getElementsByTagName("a")[0];if(!b||!b.length||!d)return{};e=c.createElement("select"),f=e.appendChild(c.createElement("option")),g=a.getElementsByTagName("input")[0],i={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.55$/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:g.value==="on",optSelected:f.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},g.checked=!0,i.noCloneChecked=g.cloneNode(!0).checked,e.disabled=!0,i.optDisabled=!f.disabled;try{delete a.test}catch(r){i.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function click(){i.noCloneEvent=!1,a.detachEvent("onclick",click)}),a.cloneNode(!0).fireEvent("onclick")),g=c.createElement("input"),g.value="t",g.setAttribute("type","radio"),i.radioValue=g.value==="t",g.setAttribute("checked","checked"),a.appendChild(g),j=c.createDocumentFragment(),j.appendChild(a.firstChild),i.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",k=c.createElement("body"),l={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"};for(p in l)k.style[p]=l[p];k.appendChild(a),c.documentElement.appendChild(k),i.appendChecked=g.checked,i.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,i.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",i.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",m=a.getElementsByTagName("td"),q=m[0].offsetHeight===0,m[0].style.display="",m[1].style.display="none",i.reliableHiddenOffsets=q&&m[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(h=c.createElement("div"),h.style.width="0",h.style.marginRight="0",a.appendChild(h),i.reliableMarginRight=(parseInt(c.defaultView.getComputedStyle(h,null).marginRight,10)||0)===0),k.innerHTML="",c.documentElement.removeChild(k);if(a.attachEvent)for(p in{submit:1,change:1,focusin:1})o="on"+p,q=o in a,q||(a.setAttribute(o,"return;"),q=typeof a[o]=="function"),i[p+"Bubbles"]=q;return i}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[c]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[c]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function l(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark";while(g--)if(tmp=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,tmp.done(l);l();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:data-|aria-)/,u=/\:/,v;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.addClass(a.call(this,b,c.attr("class")||""))});if(a&&typeof a=="string"){var b=(a||"").split(o);for(var c=0,d=this.length;c<d;c++){var e=this[c];if(e.nodeType===1)if(!e.className)e.className=a;else{var g=" "+e.className+" ",h=e.className;for(var i=0,j=b.length;i<j;i++)g.indexOf(" "+b[i]+" ")<0&&(h+=" "+b[i]);e.className=f.trim(h)}}}return this},removeClass:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.removeClass(a.call(this,b,c.attr("class")))});if(a&&typeof a=="string"||a===b){var c=(a||"").split(o);for(var d=0,e=this.length;d<e;d++){var g=this[d];if(g.nodeType===1&&g.className)if(a){var h=(" "+g.className+" ").replace(n," ");for(var i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){var d=f(this);d.toggleClass(a.call(this,c,d.attr("class"),b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if((" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;return(e.value||"").replace(p,"")}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||"set"in c&&c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b=a.selectedIndex,c=[],d=a.options,e=a.type==="select-one";if(b<0)return null;for(var g=e?b:0,h=e?b+1:d.length;g<h;g++){var i=d[g];if(i.selected&&(f.support.optDisabled?!i.disabled:i.getAttribute("disabled")===null)&&(!i.parentNode.disabled||!f.nodeName(i.parentNode,"optgroup"))){value=f(i).val();if(e)return value;c.push(value)}}if(e&&!c.length&&d.length)return f(d[b]).val();return c},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex",readonly:"readOnly"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);var h,i,j=g!==1||!f.isXMLDoc(a);c=j&&f.attrFix[c]||c,i=f.attrHooks[c]||(v&&(f.nodeName(a,"form")||u.test(c))?v:b);if(d!==b){if(d===null||d===!1&&!t.test(c)){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;d===!0&&!t.test(c)&&(d=c),a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j)return i.get(a,c);h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.getAttribute("value");a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}},propFix:{},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);c=i&&f.propFix[c]||c,h=f.propHooks[c];return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),f.support.getSetAttribute||(f.attrFix=f.extend(f.attrFix,{"for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder"}),v=f.attrHooks.name=f.attrHooks.value=f.valHooks.button={get:function(a,c){var d;if(c==="value"&&!f.nodeName(a,"button"))return a.getAttribute(c);d=a.getAttributeNode(c);return d&&d.specified?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=Object.prototype.hasOwnProperty,x=/\.(.*)$/,y=/^(?:textarea|input|select)$/i,z=/\./g,A=/ /g,B=/[^\w\s.|`]/g,C=function(a){return a.replace(B,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=D;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=D);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),C).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.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 pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,N(a.origType,a.selector),f.extend({},a,{handler:M,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,N(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?E:D):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=E;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=E;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=E,this.stopPropagation()},isDefaultPrevented:D,isPropagationStopped:D,isImmediatePropagationStopped:D};var F=function(a){var b=a.relatedTarget;try{if(b&&b!==c&&!b.parentNode)return;while(b&&b!==this)b=b.parentNode;b!==this&&(a.type=a.data,f.event.handle.apply(this,arguments))}catch(d){}},G=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?G:F,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?G:F)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=b.type;(c==="submit"||c==="image")&&f(b).closest("form").length&&K("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=b.type;(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&K("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var H,I=function(a){var b=a.type,c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},J=function J(a){var c=a.target,d,e;if(!!y.test(c.nodeName)&&!c.readOnly){d=f._data(c,"_change_data"),e=I(c),(a.type!=="focusout"||c.type!=="radio")&&f._data(c,"_change_data",e);if(d===b||e===d)return;if(d!=null||e)a.type="change",a.liveFired=b,f.event.trigger(a,arguments[1],c)}};f.event.special.change={filters:{focusout:J,beforedeactivate:J,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&J.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&J.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",I(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in H)f.event.add(this,c+".specialChange",H[c]);return y.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return y.test(this.nodeName)}},H=f.event.special.change.filters,H.focus=H.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var L={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||D,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=x.exec(h),k="",j&&(k=j[0],h=h.replace(x,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,L[h]?(a.push(L[h]+k),h=h+k):h=(L[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+N(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+N(h,m),e)}return this}}),f.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){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=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|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){return a.nodeName.toLowerCase()==="input"&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(a===b){g=!0;return 0}if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var O=/Until$/,P=/^(?:parents|prevUntil|prevAll)/,Q=/,/,R=/^.[^:#\[\.,]*$/,S=Array.prototype.slice,T=f.expr.match.POS,U={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(W(this,a,!1),"not",a)},filter:function(a){return this.pushStack(W(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=T.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var X=/ jQuery\d+="(?:\d+|null)"/g,Y=/^\s+/,Z=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,$=/<([\w:]+)/,_=/<tbody/i,ba=/<|&#?\w+;/,bb=/<(?:script|object|embed|option|style)/i,bc=/checked\s*(?:[^=]|=\s*.checked.)/i,bd=/\/(java|ecma)script/i,be={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,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(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,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(X,""):null;if(typeof a=="string"&&!bb.test(a)&&(f.support.leadingWhitespace||!Y.test(a))&&!be[($.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Z,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bc.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bf(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bl)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i=b&&b[0]?b[0].ownerDocument||b[0]:c;a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!bb.test(a[0])&&(f.support.checkClone||!bc.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[];for(var i=0,j;(j=a[i])!=null;i++){typeof j=="number"&&(j+="");if(!j)continue;if(typeof j=="string")if(!ba.test(j))j=b.createTextNode(j);else{j=j.replace(Z,"<$1></$2>");var k=($.exec(j)||["",""])[1].toLowerCase(),l=be[k]||be._default,m=l[0],n=b.createElement("div");n.innerHTML=l[1]+j+l[2];while(m--)n=n.lastChild;if(!f.support.tbody){var o=_.test(j),p=k==="table"&&!o?n.firstChild&&n.firstChild.childNodes:l[1]==="<table>"&&!o?n.childNodes:[];for(var q=p.length-1;q>=0;--q)f.nodeName(p[q],"tbody")&&!p[q].childNodes.length&&p[q].parentNode.removeChild(p[q])}!f.support.leadingWhitespace&&Y.test(j)&&n.insertBefore(b.createTextNode(Y.exec(j)[0]),n.firstChild),j=n.childNodes}var r;if(!f.support.appendChecked)if(j[0]&&typeof (r=j.length)=="number")for(i=0;i<r;i++)bk(j[i]);else bk(j);j.nodeType?h.push(j):h=f.merge(h,j)}if(d){g=function(a){return!a.type||bd.test(a.type)};for(i=0;h[i];i++)if(e&&f.nodeName(h[i],"script")&&(!h[i].type||h[i].type.toLowerCase()==="text/javascript"))e.push(h[i].parentNode?h[i].parentNode.removeChild(h[i]):h[i]);else{if(h[i].nodeType===1){var s=f.grep(h[i].getElementsByTagName("script"),g);h.splice.apply(h,[i+1,0].concat(s))}d.appendChild(h[i])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bm=/alpha\([^)]*\)/i,bn=/opacity=([^)]*)/,bo=/-([a-z])/ig,bp=/([A-Z]|^ms)/g,bq=/^-?\d+(?:px)?$/i,br=/^-?\d/,bs=/^[+\-]=/,bt=/[^+\-\.\de]+/g,bu={position:"absolute",visibility:"hidden",display:"block"},bv=["Left","Right"],bw=["Top","Bottom"],bx,by,bz,bA=function(a,b){return b.toUpperCase()};f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bx(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{zIndex:!0,fontWeight:!0,opacity:!0,zoom:!0,lineHeight:!0,widows:!0,orphans:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d;if(h==="number"&&isNaN(d)||d==null)return;h==="string"&&bs.test(d)&&(d=+d.replace(bt,"")+parseFloat(f.css(a,c))),h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bx)return bx(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]},camelCase:function(a){return a.replace(bo,bA)}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){a.offsetWidth!==0?e=bB(a,b,d):f.swap(a,bu,function(){e=bB(a,b,d)});if(e<=0){e=bx(a,b,b),e==="0px"&&bz&&(e=bz(a,b,b));if(e!=null)return e===""||e==="auto"?"0px":e}if(e<0||e==null){e=a.style[b];return e===""||e==="auto"?"0px":e}return typeof e=="string"?e:e+"px"}},set:function(a,b){if(!bq.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bx(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(by=function(a,c){var d,e,g;c=c.replace(bp,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bz=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bq.test(d)&&br.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bx=by||bz,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bC=/%20/g,bD=/\[\]$/,bE=/\r?\n/g,bF=/#.*$/,bG=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bH=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\/\//,bL=/\?/,bM=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bN=/^(?:select|textarea)/i,bO=/\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV;try{bU=e.href}catch(bW){bU=c.createElement("a"),bU.href="",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bR)return bR.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bM,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bE,"\r\n")}}):{name:b.name,value:c.replace(bE,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bU,isLocal:bI.test(bV[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bX(bS),ajaxTransport:bX(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?b$(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=b_(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bF,"").replace(bK,bV[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]==="http:"?80:443))==(bV[3]||(bV[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bY(bS,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bL.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,"$1_="+x);d.url=y+(y===d.url?(bL.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bY(bT,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bZ(g,a[g],c,e);return d.join("&").replace(bC,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var ca=f.now(),cb=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+ca++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cb.test(b.url)||e&&cb.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cb,l),b.url===j&&(e&&(k=k.replace(cb,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cc=a.ActiveXObject?function(){for(var a in ce)ce[a](0,1)}:!1,cd=0,ce;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cf()||cg()}:cf,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cc&&delete ce[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cd,cc&&(ce||(ce={},f(a).unload(cc)),ce[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ch={},ci,cj,ck=/^(?:toggle|show|hide)$/,cl=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cm,cn=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],co,cp=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cs("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",ct(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cs("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cs("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g];if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=ct(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block")),b.animatedProperties[g]=f.isArray(h)?h[1]:b.specialEasing&&b.specialEasing[g]||b.easing||"swing"}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],ck.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=cl.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[g]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cs("show",1),slideUp:cs("hide",1),slideToggle:cs("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this),f.isFunction(d.old)&&d.old.call(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function h(a){return d.step(a)}var d=this,e=f.fx,g;this.startTime=co||cq(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,h.elem=this.elem,h()&&f.timers.push(h)&&!cm&&(cp?(cm=1,g=function(){cm&&(cp(g),e.tick())},cp(g)):cm=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=co||cq(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a=f.timers,b=a.length;while(b--)a[b]()||a.splice(b,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cm),cm=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){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:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cu=/^t(?:able|d|h)$/i,cv=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cw(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cu.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<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>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cv.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cv.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cw(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cw(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){return this[0]?parseFloat(f.css(this[0],d,"padding")):null},f.fn["outer"+c]=function(a){return this[0]?parseFloat(f.css(this[0],d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);
\ No newline at end of file
--- a/web/hdabo/static/hdabo/js/jquery.nyroModal-ie6.min.js	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-/*
- * nyroModal v2.alpha
- * for IE6
- *
- */
-jQuery(function($,undefined){var $b=$('body'),$w=$(window),$h=$('html'),shown=0,zIndex=100;function isFullScreen(){return screen.height==$w.height()+58;};$b.append('<style type="text/css">'+'.nyroModalCloseButton{font-size: 1px}'+'.nyroModalLink .nyroModalPrev, .nyroModalDom .nyroModalPrev, .nyroModalForm .nyroModalPrev, .nyroModalFormFile .nyroModalPrev {left: -10px}'+'</style>');$.nmObj({_reposition:function(){var elts=this.elts.cont.find('.nmReposition');if(elts.length){var outer=this.getInternal()._getOuter($b),fs=isFullScreen();var space={top:-(fs?outer.h.border/2:0),left:-(fs?outer.w.border/2:0)};elts.each(function(){var me=$(this),offset=me.offset();me.css({top:offset.top-space.top,left:offset.left-space.left});});this.elts.cont.after(elts);}
-this.elts.cont.css('overflow','auto');}});$.nmInternal({_calculateFullSize:function(){var scrollHeight=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),offsetHeight=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight),scrollWidth=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth),offsetWidth=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);this.fullSize={wW:$w.width(),wH:$w.height()};this.fullSize.h=scrollHeight<offsetHeight?$w.height():scrollHeight;this.fullSize.w=scrollWidth<offsetWidth?$w.width():scrollWidth;this.fullSize.viewW=Math.min(this.fullSize.w,this.fullSize.wW);this.fullSize.viewH=Math.min(this.fullSize.h,this.fullSize.wH);}});$.nmAnims({basic:{resize:function(nm,clb){var space=nm.getInternal()._getSpaceReposition(),outer=nm.getInternal()._getOuter(nm.elts.cont);nm.elts.cont.css({width:nm.sizes.w,height:nm.sizes.h,top:space.top+(nm.getInternal().fullSize.viewH-outer.h.total-nm.sizes.h)/2,left:space.left+(nm.getInternal().fullSize.viewW-outer.w.total-nm.sizes.w)/2});clb();}},fade:{resize:function(nm,clb){var space=nm.getInternal()._getSpaceReposition(),outer=nm.getInternal()._getOuter(nm.elts.cont);nm.elts.cont.animate({width:nm.sizes.w,height:nm.sizes.h,top:space.top+(nm.getInternal().fullSize.viewH-outer.h.total-nm.sizes.h)/2,left:space.left+(nm.getInternal().fullSize.viewW-outer.w.total-nm.sizes.w)/2},clb);}}});$.nmFilters({ie6:{is:function(){return true;},initElts:function(nm){nm.store.ie6=true;if(shown==0){$h.css({overflow:'hidden'});var w=$b.width(),h=$b.outerHeight(true)+'px';if($w.height()>=$b.outerHeight(true)){h=$w.height()+'px';}else
-w+=20;w+='px';$b.css({width:w,height:h,position:'static',overflow:'hidden'});}},beforeShowBg:function(nm){var space=nm.getInternal()._getSpaceReposition(),outer=nm.getInternal()._getOuter($b);nm.elts.bg.css({position:'absolute',top:space.top,left:space.left,width:nm.getInternal().fullSize.viewW+200,height:nm.getInternal().fullSize.viewH+200});shown++;},afterHideBg:function(nm){if(nm.store.ie6){nm.store.ie6=false;shown--;}
-if(shown==0){$h.css({overflow:''});$b.css({width:'',height:'',position:'',overflow:''});}},size:function(nm){if(!nm._hasFilter('image')&&!nm._hasFilter('swf')){if(nm.sizes.h<250)nm.sizes.h=250;if(nm.sizes.w<250)nm.sizes.w=250;else if(nm.sizes.w>1000)nm.sizes.w=1000;}},close:function(nm){if(nm.store.ie6){nm.store.ie6=false;shown--;}},beforeShowLoad:function(nm){var space=nm.getInternal()._getSpaceReposition(),outer=nm.getInternal()._getOuter(nm.elts.load);nm.elts.load.css({'z-index':zIndex++,position:'absolute',top:space.top+(nm.getInternal().fullSize.viewH-nm.elts.load.height()-outer.h.margin)/2,left:space.left+(nm.getInternal().fullSize.viewW-nm.elts.load.width()-outer.w.margin)/2});},beforeShowCont:function(nm){var space=nm.getInternal()._getSpaceReposition(),outer=nm.getInternal()._getOuter(nm.elts.cont);nm.elts.cont.css({'z-index':zIndex++,position:'absolute',top:space.top+(nm.getInternal().fullSize.viewH-outer.h.total-nm.sizes.h)/2,left:space.left+(nm.getInternal().fullSize.viewW-outer.w.total-nm.sizes.w)/2});}}});});
\ No newline at end of file
--- a/web/hdabo/static/hdabo/js/jquery.nyroModal.min.js	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-/*
- * nyroModal v2.0.0
- * Core
- *
- * 
- * Included parts:
- * - anims.fade
- * - filters.title
- * - filters.gallery
- * - filters.link
- * - filters.dom
- * - filters.image
- * - filters.swf
- * - filters.form
- * - filters.formFile
- * - filters.iframe
- * - filters.iframeForm
- * - filters.embedly
- */
- jQuery(function($,undefined){var $w=$(window),$d=$(document),$b=$('body'),baseHref=$('base').attr('href'),_nmObj={filters:[],callbacks:{},loadFilter:undefined,modal:false,closeOnEscape:true,closeOnClick:true,useKeyHandler:false,showCloseButton:true,closeButton:'<a href="#" class="nyroModalClose nyroModalCloseButton nmReposition" title="close">Close</a>',stack:false,header:undefined,footer:undefined,galleryLoop:true,galleryCounts:true,ltr:true,imageRegex:'[^\.]\.(jpg|jpeg|png|tiff|gif|bmp)\s*$',selIndicator:'nyroModalSel',swf:{allowFullScreen:'true',allowscriptaccess:'always',wmode:'transparent'},store:{},errorMsg:'An error occured',elts:{all:undefined,bg:undefined,load:undefined,cont:undefined,hidden:undefined},sizes:{initW:undefined,initH:undefined,w:undefined,h:undefined,minW:undefined,minH:undefined,wMargin:undefined,hMargin:undefined},anim:{def:undefined,showBg:undefined,hideBg:undefined,showLoad:undefined,hideLoad:undefined,showCont:undefined,hideCont:undefined,showTrans:undefined,hideTrans:undefined,resize:undefined},_open:false,_bgReady:false,_opened:false,_loading:false,_animated:false,_transition:false,_nmOpener:undefined,_nbContentLoading:0,_scripts:'',_scriptsShown:'',saveObj:function(){this.opener.data('nmObj',this);},open:function(){this.getInternal()._pushStack(this.opener);this._opened=false;this._bgReady=false;this._open=true;this._initElts();this._load();this._nbContentLoading=0;this._callAnim('showBg',$.proxy(function(){this._bgReady=true;if(this._nmOpener){this._nmOpener._close();this._nmOpener._bgReady=false;this._nmOpener._loading=false;this._nmOpener._animated=false;this._nmOpener._opened=false;this._nmOpener._open=false;this._nmOpener.elts.cont=this._nmOpener.elts.hidden=this._nmOpener.elts.load=this._nmOpener.elts.bg=this._nmOpener.elts.all=undefined;this._nmOpener.saveObj();this._nmOpener=undefined;}this._contentLoading();},this));},resize:function(){this.sizes.w=this.sizes.initW;this.sizes.h=this.sizes.initH;this._unreposition();this.size();this._callAnim('resize',$.proxy(function(){this._reposition();},this));},size:function(){var maxHeight=this.getInternal().fullSize.viewH-this.sizes.hMargin,maxWidth=this.getInternal().fullSize.viewW-this.sizes.wMargin;if(this.sizes.minW&&this.sizes.minW>this.sizes.w)this.sizes.w=this.sizes.minW;if(this.sizes.minH&&this.sizes.minH>this.sizes.h)this.sizes.h=this.sizes.minH;if(this.sizes.h>maxHeight||this.sizes.w>maxWidth){this.sizes.h=Math.min(this.sizes.h,maxHeight);this.sizes.w=Math.min(this.sizes.w,maxWidth);}this._callFilters('size');},getForNewLinks:function(){var ret;if(this.stack){ret=$.extend(true,{},this);ret._nmOpener=undefined;ret.elts.all=undefined;}else{ret=$.extend({},this);ret._nmOpener=this;}ret.filters=[];ret.opener=undefined;ret._open=false;return ret;},keyHandle:function(e){this.keyEvent=e;this._callFilters('keyHandle');this.keyEvent=undefined;delete(this.keyEvent);},getInternal:function(){return _internal;},_close:function(){this.getInternal()._removeStack(this.opener);this._opened=false;this._open=false;this._callFilters('close');},close:function(){this._close();this._callFilters('beforeClose');var self=this;this._unreposition();self._callAnim('hideCont',function(){self._callAnim('hideLoad',function(){self._callAnim('hideBg',function(){self._callFilters('afterClose');self.elts.cont.remove();self.elts.hidden.remove();self.elts.load.remove();self.elts.bg.remove();self.elts.all.remove();self.elts.cont=self.elts.hidden=self.elts.load=self.elts.bg=self.elts.all=undefined;});});});},_initElts:function(){if(!this.stack&&this.getInternal().stack.length>1)this.elts=$(_internal.stack[_internal.stack.length-2]).data('nmObj').elts;if(!this.elts.all||this.elts.all.closest('body').length==0)this.elts.all=this.elts.bg=this.elts.cont=this.elts.hidden=this.elts.load=undefined;if(!this.elts.all)this.elts.all=$('<div />').appendTo(this.getInternal()._container);if(!this.elts.bg)this.elts.bg=$('<div />').hide().appendTo(this.elts.all);if(!this.elts.cont)this.elts.cont=$('<div />').hide().appendTo(this.elts.all);if(!this.elts.hidden)this.elts.hidden=$('<div />').hide().appendTo(this.elts.all);this.elts.hidden.empty();if(!this.elts.load)this.elts.load=$('<div />').hide().appendTo(this.elts.all);this._callFilters('initElts');},_error:function(){this._callFilters('error');},_setCont:function(html,selector){if(selector){var tmp=[],i=0;html=html .replace(/\r\n/gi,'nyroModalLN').replace(/<script(.|\s)*?\/script>/gi,function(x){tmp[i]=x;return '<pre class=nyroModalScript rel="'+(i++)+'"></pre>';});var cur=$('<div>'+html+'</div>').find(selector);if(cur.length){html=cur.html().replace(/<pre class="?nyroModalScript"? rel="?(.?)"?><\/pre>/gi,function(x,y,z){return tmp[y];}).replace(/nyroModalLN/gi,"\r\n");}else{this._error();return;}}this.elts.hidden .append(this._filterScripts(html)).prepend(this.header).append(this.footer).wrapInner('<div class="nyroModal'+ucfirst(this.loadFilter)+'" />');this.sizes.initW=this.sizes.w=this.elts.hidden.width();this.sizes.initH=this.sizes.h=this.elts.hidden.height();var outer=this.getInternal()._getOuter(this.elts.cont);this.sizes.hMargin=outer.h.total;this.sizes.wMargin=outer.w.total;this.size();this.loading=false;this._callFilters('filledContent');this._contentLoading();},_filterScripts:function(data){if(typeof data!='string')return data;this._scripts=[];this._scriptsShown=[];var start=0,stStart='<script',stEnd='</script>',endLn=stEnd.length,pos,pos2,tmp;while((pos=data.indexOf(stStart,start))>-1){pos2=data.indexOf(stEnd)+endLn;tmp=$(data.substring(pos,pos2));if(!tmp.attr('src')||tmp.attr('rel')=='forceLoad'){if(tmp.attr('rev')=='shown')this._scriptsShown.push(tmp.get(0));else this._scripts.push(tmp.get(0));}data=data.substring(0,pos)+data.substr(pos2);start=pos;}return data;},_hasFilter:function(filter){var ret=false;$.each(this.filters,function(i,f){ret=ret||f==filter;});return ret;},_delFilter:function(filter){this.filters=$.map(this.filters,function(v){if(v!=filter)return v;});},_callFilters:function(fct){this.getInternal()._debug(fct);var ret=[],self=this;$.each(this.filters,function(i,f){ret[f]=self._callFilter(f,fct);});if(this.callbacks[fct]&&$.isFunction(this.callbacks[fct]))this.callbacks[fct](this);return ret;},_callFilter:function(f,fct){if(_filters[f]&&_filters[f][fct]&&$.isFunction(_filters[f][fct]))return _filters[f][fct](this);return undefined;},_callAnim:function(fct,clb){this.getInternal()._debug(fct);this._callFilters('before'+ucfirst(fct));if(!this._animated){this._animated=true;if(!$.isFunction(clb))clb=$.noop;var set=this.anim[fct]||this.anim.def||'basic';if(!_animations[set]||!_animations[set][fct]||!$.isFunction(_animations[set][fct]))set='basic';_animations[set][fct](this,$.proxy(function(){this._animated=false;this._callFilters('after'+ucfirst(fct));clb();},this));}},_load:function(){this.getInternal()._debug('_load');if(!this.loading&&this.loadFilter){this.loading=true;this._callFilter(this.loadFilter,'load');}},_contentLoading:function(){if(!this._animated&&this._bgReady){if(!this._transition&&this.elts.cont.html().length>0)this._transition=true;this._nbContentLoading++;if(!this.loading){if(!this._opened){this._opened=true;if(this._transition){var fct=$.proxy(function(){this._writeContent();this._callFilters('beforeShowCont');this._callAnim('hideTrans',$.proxy(function(){this._transition=false;this.elts.cont.append(this._scriptsShown);this._reposition();this._callFilters('afterShowCont');},this));},this);if(this._nbContentLoading==1){this._unreposition();this._callAnim('showTrans',fct);}else{fct();}}else{this._callAnim('hideLoad',$.proxy(function(){this._writeContent();this._callAnim('showCont',$.proxy(function(){this.elts.cont.append(this._scriptsShown);this._reposition();},this));},this));}}}else if(this._nbContentLoading==1){var outer=this.getInternal()._getOuter(this.elts.load);this.elts.load .css({position:'fixed',top:(this.getInternal().fullSize.viewH-this.elts.load.height()-outer.h.margin)/2,left:(this.getInternal().fullSize.viewW-this.elts.load.width()-outer.w.margin)/2});if(this._transition){this._unreposition();this._callAnim('showTrans',$.proxy(function(){this._contentLoading();},this));}else{this._callAnim('showLoad',$.proxy(function(){this._contentLoading();},this));}}}},_writeContent:function(){this.elts.cont .empty().append(this.elts.hidden.contents()).append(this._scripts).append(this.showCloseButton?this.closeButton:'').css({position:'fixed',width:this.sizes.w,height:this.sizes.h,top:(this.getInternal().fullSize.viewH-this.sizes.h-this.sizes.hMargin)/2,left:(this.getInternal().fullSize.viewW-this.sizes.w-this.sizes.wMargin)/2});},_reposition:function(){var elts=this.elts.cont.find('.nmReposition');if(elts.length){var space=this.getInternal()._getSpaceReposition();elts.each(function(){var me=$(this),offset=me.offset();me.css({position:'fixed',top:offset.top-space.top,left:offset.left-space.left});});this.elts.cont.after(elts);}this.elts.cont.css('overflow','auto');},_unreposition:function(){this.elts.cont.css('overflow','');var elts=this.elts.all.find('.nmReposition');if(elts.length)this.elts.cont.append(elts.removeAttr('style'));}},_internal={firstInit:true,stack:[],fullSize:{w:0,h:0,wW:0,wH:0,viewW:0,viewH:0},nyroModal:function(opts,fullObj){if(_internal.firstInit){_internal._container=$('<div />').appendTo($b);$w.smartresize($.proxy(_internal._resize,_internal));$d.bind('keydown.nyroModal',$.proxy(_internal._keyHandler,_internal));_internal._calculateFullSize();_internal.firstInit=false;}return this.nmInit(opts,fullObj).each(function(){_internal._init($(this).data('nmObj'));});},nmInit:function(opts,fullObj){return this.each(function(){var me=$(this);if(fullObj)me.data('nmObj',$.extend(true,{opener:me},opts));else me.data('nmObj',me.data('nmObj')?$.extend(true,me.data('nmObj'),opts):$.extend(true,{opener:me},_nmObj,opts));});},nmCall:function(){return this.trigger('nyroModal');},nmManual:function(url,opts){$('<a />',{href:url}).nyroModal(opts).trigger('nyroModal');},nmObj:function(opts){$.extend(true,_nmObj,opts);},nmInternal:function(opts){$.extend(true,_internal,opts);},nmAnims:function(opts){$.extend(true,_animations,opts);},nmFilters:function(opts){$.extend(true,_filters,opts);},nmTop:function(){if(_internal.stack.length)return $(_internal.stack[_internal.stack.length-1]).data('nmObj');return undefined;},_debug:function(msg){if(window.console&&window.console.log)window.console.log(msg);},_container:undefined,_init:function(nm){nm.filters=[];$.each(_filters,function(f,obj){if($.isFunction(obj.is)&&obj.is(nm)){nm.filters.push(f);}});nm._callFilters('init');nm.opener .unbind('nyroModal.nyroModal nmClose.nyroModal nmResize.nyroModal').bind({'nyroModal.nyroModal':function(e){nm.open();return false;},'nmClose.nyroModal':function(){nm.close();return false;},'nmResize.nyroModal':function(){nm.resize();return false;}});},_scrollWidth:(function(){var scrollbarWidth;if($.browser.msie){var $textarea1=$('<textarea cols="10" rows="2"></textarea>').css({position:'absolute',top:-1000,left:-1000}).appendTo($b),$textarea2=$('<textarea cols="10" rows="2" style="overflow: hidden;"></textarea>').css({position:'absolute',top:-1000,left:-1000}).appendTo($b);scrollbarWidth=$textarea1.width()-$textarea2.width();$textarea1.add($textarea2).remove();}else{var $div=$('<div />').css({width:100,height:100,overflow:'auto',position:'absolute',top:-1000,left:-1000}).prependTo($b).append('<div />').find('div').css({width:'100%',height:200});scrollbarWidth=100-$div.width();$div.parent().remove();}return scrollbarWidth;})(),_selNyroModal:function(obj){return $(obj).data('nmObj')?true:false;},_selNyroModalOpen:function(obj){var me=$(obj);return me.data('nmObj')?me.data('nmObj')._open:false;},_keyHandler:function(e){var nmTop=$.nmTop();if(nmTop&&nmTop.useKeyHandler){return nmTop.keyHandle(e);}},_pushStack:function(obj){this.stack=$.map(this.stack,function(elA){if(elA!=obj.get(0))return elA;});this.stack.push(obj.get(0));},_removeStack:function(obj){this.stack=$.map(this.stack,function(elA){if(elA!=obj.get(0))return elA;});},_resize:function(){var opens=$(':nmOpen').each(function(){$(this).data('nmObj')._unreposition();});this._calculateFullSize();opens.trigger('nmResize');},_calculateFullSize:function(){this.fullSize={w:$d.width(),h:$d.height(),wW:$w.width(),wH:$w.height()};this.fullSize.viewW=Math.min(this.fullSize.w,this.fullSize.wW);this.fullSize.viewH=Math.min(this.fullSize.h,this.fullSize.wH);},_getCurCSS:function(elm,name){var ret=parseInt($.curCSS(elm,name,true));return isNaN(ret)?0:ret;},_getOuter:function(elm){elm=elm.get(0);var ret={h:{margin:this._getCurCSS(elm,'marginTop')+this._getCurCSS(elm,'marginBottom'),border:this._getCurCSS(elm,'borderTopWidth')+this._getCurCSS(elm,'borderBottomWidth'),padding:this._getCurCSS(elm,'paddingTop')+this._getCurCSS(elm,'paddingBottom')},w:{margin:this._getCurCSS(elm,'marginLeft')+this._getCurCSS(elm,'marginRight'),border:this._getCurCSS(elm,'borderLeftWidth')+this._getCurCSS(elm,'borderRightWidth'),padding:this._getCurCSS(elm,'paddingLeft')+this._getCurCSS(elm,'paddingRight')}};ret.h.outer=ret.h.margin+ret.h.border;ret.w.outer=ret.w.margin+ret.w.border;ret.h.inner=ret.h.padding+ret.h.border;ret.w.inner=ret.w.padding+ret.w.border;ret.h.total=ret.h.outer+ret.h.padding;ret.w.total=ret.w.outer+ret.w.padding;return ret;},_getSpaceReposition:function(){var outer=this._getOuter($b),ie7=$.browser.msie&&$.browser.version<8&&!(screen.height<=$w.height()+23);return{top:$w.scrollTop()-(!ie7?outer.h.border/2:0),left:$w.scrollLeft()-(!ie7?outer.w.border/2:0)};},_getHash:function(url){if(typeof url=='string'){var hashPos=url.indexOf('#');if(hashPos>-1)return url.substring(hashPos);}return '';},_extractUrl:function(url){var ret={url:undefined,sel:undefined};if(url){var hash=this._getHash(url),hashLoc=this._getHash(window.location.href),curLoc=window.location.href.substring(0,window.location.href.length-hashLoc.length),req=url.substring(0,url.length-hash.length);ret.sel=hash;if(req!=curLoc&&req!=baseHref)ret.url=req;}return ret;}},_animations={basic:{showBg:function(nm,clb){nm.elts.bg.css({opacity:0.7}).show();clb();},hideBg:function(nm,clb){nm.elts.bg.hide();clb();},showLoad:function(nm,clb){nm.elts.load.show();clb();},hideLoad:function(nm,clb){nm.elts.load.hide();clb();},showCont:function(nm,clb){nm.elts.cont.show();clb();},hideCont:function(nm,clb){nm.elts.cont.hide();clb();},showTrans:function(nm,clb){nm.elts.cont.hide();nm.elts.load.show();clb();},hideTrans:function(nm,clb){nm.elts.cont.show();nm.elts.load.hide();clb();},resize:function(nm,clb){nm.elts.cont.css({width:nm.sizes.w,height:nm.sizes.h,top:(nm.getInternal().fullSize.viewH-nm.sizes.h-nm.sizes.hMargin)/2,left:(nm.getInternal().fullSize.viewW-nm.sizes.w-nm.sizes.wMargin)/2});clb();}}},_filters={basic:{is:function(nm){return true;},init:function(nm){if(nm.opener.attr('rev')=='modal')nm.modal=true;if(nm.modal)nm.closeOnEscape=nm.closeOnClick=nm.showCloseButton=false;if(nm.closeOnEscape)nm.useKeyHandler=true;},initElts:function(nm){nm.elts.bg.addClass('nyroModalBg');if(nm.closeOnClick)nm.elts.bg.unbind('click.nyroModal').bind('click.nyroModal',function(e){e.preventDefault();nm.close();});nm.elts.cont.addClass('nyroModalCont');nm.elts.hidden.addClass('nyroModalCont nyroModalHidden');nm.elts.load.addClass('nyroModalCont nyroModalLoad');},error:function(nm){nm.elts.hidden.addClass('nyroModalError');nm.elts.cont.addClass('nyroModalError');nm._setCont(nm.errorMsg);},beforeShowCont:function(nm){nm.elts.cont .find('.nyroModal').nyroModal(nm.getForNewLinks(),true).end().find('.nyroModalClose').bind('click.nyroModal',function(e){e.preventDefault();nm.close();});},keyHandle:function(nm){if(nm.keyEvent.keyCode==27&&nm.closeOnEscape){nm.keyEvent.preventDefault();nm.close();}}},custom:{is:function(nm){return true;}}};$.fn.extend({nm:_internal.nyroModal,nyroModal:_internal.nyroModal,nmInit:_internal.nmInit,nmCall:_internal.nmCall});$.extend({nmManual:_internal.nmManual,nmObj:_internal.nmObj,nmInternal:_internal.nmInternal,nmAnims:_internal.nmAnims,nmFilters:_internal.nmFilters,nmTop:_internal.nmTop});$.expr[':'].nyroModal=$.expr[':'].nm=_internal._selNyroModal;$.expr[':'].nmOpen=_internal._selNyroModalOpen;});(function($,sr){var debounce=function(func,threshold,execAsap){var timeout;return function debounced(){var obj=this,args=arguments;function delayed(){if(!execAsap)func.apply(obj,args);timeout=null;};if(timeout)clearTimeout(timeout);else if(execAsap)func.apply(obj,args);timeout=setTimeout(delayed,threshold||100);};};jQuery.fn[sr]=function(fn){return fn?this.bind('resize',debounce(fn)):this.trigger(sr);};})(jQuery,'smartresize');function ucfirst(str){str+='';var f=str.charAt(0).toUpperCase();return f+str.substr(1);};
- jQuery(function($,undefined){$.nmAnims({fade:{showBg:function(nm,clb){nm.elts.bg.fadeTo(250,0.7,clb);},hideBg:function(nm,clb){nm.elts.bg.fadeOut(clb);},showLoad:function(nm,clb){nm.elts.load.fadeIn(clb);},hideLoad:function(nm,clb){nm.elts.load.fadeOut(clb);},showCont:function(nm,clb){nm.elts.cont.fadeIn(clb);},hideCont:function(nm,clb){nm.elts.cont.css('overflow','hidden').fadeOut(clb);},showTrans:function(nm,clb){nm.elts.load .css({position:nm.elts.cont.css('position'),top:nm.elts.cont.css('top'),left:nm.elts.cont.css('left'),width:nm.elts.cont.css('width'),height:nm.elts.cont.css('height'),marginTop:nm.elts.cont.css('marginTop'),marginLeft:nm.elts.cont.css('marginLeft')}).fadeIn(function(){nm.elts.cont.hide();clb();});},hideTrans:function(nm,clb){nm.elts.cont.css('visibility','hidden').show();nm.elts.load .css('position',nm.elts.cont.css('position')).animate({top:nm.elts.cont.css('top'),left:nm.elts.cont.css('left'),width:nm.elts.cont.css('width'),height:nm.elts.cont.css('height'),marginTop:nm.elts.cont.css('marginTop'),marginLeft:nm.elts.cont.css('marginLeft')},function(){nm.elts.cont.css('visibility','');nm.elts.load.fadeOut(clb);});},resize:function(nm,clb){nm.elts.cont.animate({width:nm.sizes.w,height:nm.sizes.h,top:(nm.getInternal().fullSize.viewH-nm.sizes.h-nm.sizes.hMargin)/2,left:(nm.getInternal().fullSize.viewW-nm.sizes.w-nm.sizes.wMargin)/2},clb);}}});$.nmObj({anim:{def:'fade'}});});;
- jQuery(function($,undefined){$.nmFilters({title:{is:function(nm){return nm.opener.is('[title]');},beforeShowCont:function(nm){var offset=nm.elts.cont.offset();nm.store.title=$('<h1 />',{text:nm.opener.attr('title')}).addClass('nyroModalTitle nmReposition');nm.elts.cont.prepend(nm.store.title);},close:function(nm){if(nm.store.title){nm.store.title.remove();nm.store.title=undefined;delete(nm.store.title);}}}});});;
- jQuery(function($,undefined){$.nmFilters({gallery:{is:function(nm){var ret=nm.opener.is('[rel]:not([rel=external], [rel=nofollow])');if(ret&&nm.galleryCounts&&!nm._hasFilter('title'))nm.filters.push('title');return ret;},init:function(nm){nm.useKeyHandler=true;},keyHandle:function(nm){if(!nm._animated&&nm._opened){if(nm.keyEvent.keyCode==39||nm.keyEvent.keyCode==40){nm.keyEvent.preventDefault();nm._callFilters('galleryNext');}else if(nm.keyEvent.keyCode==37||nm.keyEvent.keyCode==38){nm.keyEvent.preventDefault();nm._callFilters('galleryPrev');}}},initElts:function(nm){var rel=nm.opener.attr('rel'),indexSpace=rel.indexOf(' ');nm.store.gallery=indexSpace>0?rel.substr(0,indexSpace):rel;nm.store.galleryLinks=$('[href][rel="'+nm.store.gallery+'"], [href][rel^="'+nm.store.gallery+' "]');nm.store.galleryIndex=nm.store.galleryLinks.index(nm.opener);},beforeShowCont:function(nm){if(nm.galleryCounts&&nm.store.title&&nm.store.galleryLinks.length>1){var curTitle=nm.store.title.html();nm.store.title.html((curTitle.length?curTitle+' - ':'')+(nm.store.galleryIndex+1)+'/'+nm.store.galleryLinks.length);}},filledContent:function(nm){var link=this._getGalleryLink(nm,-1),append=nm.elts.hidden.find(' > div');if(link){$('<a />',{text:'previous',href:'#'}).addClass('nyroModalPrev').bind('click',function(e){e.preventDefault();nm._callFilters('galleryPrev');}).appendTo(append);}link=this._getGalleryLink(nm,1);if(link){$('<a />',{text:'next',href:'#'}).addClass('nyroModalNext').bind('click',function(e){e.preventDefault();nm._callFilters('galleryNext');}).appendTo(append);}},close:function(nm){nm.store.gallery=undefined;nm.store.galleryLinks=undefined;nm.store.galleryIndex=undefined;delete(nm.store.gallery);delete(nm.store.galleryLinks);delete(nm.store.galleryIndex);if(nm.elts.cont)nm.elts.cont.find('.nyroModalNext, .nyroModalPrev').remove();},galleryNext:function(nm){this._getGalleryLink(nm,1).nyroModal(nm.getForNewLinks(),true).click();},galleryPrev:function(nm){this._getGalleryLink(nm,-1).nyroModal(nm.getForNewLinks(),true).click();},_getGalleryLink:function(nm,dir){if(nm.store.gallery){if(!nm.ltr)dir *=-1;var index=nm.store.galleryIndex+dir;if(index>=0&&index<nm.store.galleryLinks.length)return nm.store.galleryLinks.eq(index);else if(nm.galleryLoop)return nm.store.galleryLinks.eq(index<0?nm.store.galleryLinks.length-1:0);}return undefined;}}});});;
- jQuery(function($,undefined){$.nmFilters({link:{is:function(nm){var ret=nm.opener.is('[href]');if(ret)nm.store.link=nm.getInternal()._extractUrl(nm.opener.attr('href'));return ret;},init:function(nm){nm.loadFilter='link';nm.opener.unbind('click.nyroModal').bind('click.nyroModal',function(e){e.preventDefault();nm.opener.trigger('nyroModal');});},load:function(nm){$.ajax({url:nm.store.link.url,data:nm.store.link.sel?[{name:nm.selIndicator,value:nm.store.link.sel.substring(1)}]:undefined,success:function(data){nm._setCont(data,nm.store.link.sel);},error:function(){nm._error();}});}}});});;
- jQuery(function($,undefined){$.nmFilters({dom:{is:function(nm){return nm._hasFilter('link')&&!nm.store.link.url&&nm.store.link.sel;},init:function(nm){nm.loadFilter='dom';},load:function(nm){nm.store.domEl=$(nm.store.link.sel);if(nm.store.domEl.length)nm._setCont(nm.store.domEl.contents());else nm._error();},close:function(nm){if(nm.store.domEl&&nm.elts.cont)nm.store.domEl.append(nm.elts.cont.find('.nyroModalDom').contents());}}});});;
- jQuery(function($,undefined){$.nmFilters({image:{is:function(nm){return(new RegExp(nm.imageRegex,'i')).test(nm.opener.attr('href'));},init:function(nm){nm.loadFilter='image';},load:function(nm){var url=nm.opener.attr('href');$('<img />').load(function(){nm.elts.cont.addClass('nyroModalImg');nm.elts.hidden.addClass('nyroModalImg');nm._setCont(this);}).error(function(){nm._error();}).attr('src',url);},size:function(nm){if(nm.sizes.w!=nm.sizes.initW||nm.sizes.h!=nm.sizes.initH){var ratio=Math.min(nm.sizes.w/nm.sizes.initW,nm.sizes.h/nm.sizes.initH);nm.sizes.w=nm.sizes.initW * ratio;nm.sizes.h=nm.sizes.initH * ratio;}var img=nm.loading?nm.elts.hidden.find('img'):nm.elts.cont.find('img');img.attr({width:nm.sizes.w,height:nm.sizes.h});},close:function(nm){if(nm.elts.cont){nm.elts.cont.removeClass('nyroModalImg');nm.elts.hidden.removeClass('nyroModalImg');}}}});});;
- jQuery(function($,undefined){$.nmFilters({swf:{is:function(nm){return nm._hasFilter('link')&&nm.opener.is('[href$=.swf]');},init:function(nm){nm.loadFilter='swf';},load:function(nm){var url=nm.store.link.url,cont='<div><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+nm.sizes.w+'" height="'+nm.sizes.h+'"><param name="movie" value="'+url+'"></param>',tmp='';$.each(nm.swf,function(name,val){cont+='<param name="'+name+'" value="'+val+'"></param>';tmp+=' '+name+'="'+val+'"';});cont+='<embed src="'+url+'" type="application/x-shockwave-flash" width="'+nm.sizes.w+'" height="'+nm.sizes.h+'"'+tmp+'></embed></object></div>';nm._setCont(cont);}}});});;
- jQuery(function($,undefined){$.nmFilters({form:{is:function(nm){var ret=nm.opener.is('form');if(ret)nm.store.form=nm.getInternal()._extractUrl(nm.opener.attr('action'));return ret;},init:function(nm){nm.loadFilter='form';nm.opener.unbind('submit.nyroModal').bind('submit.nyroModal',function(e){e.preventDefault();nm.opener.trigger('nyroModal');});},load:function(nm){var data=nm.opener.serializeArray();if(nm.store.form.sel)data.push({name:nm.selIndicator,value:nm.store.form.sel.substring(1)});$.ajax({url:nm.store.form.url,data:data,type:nm.opener.attr('method')?nm.opener.attr('method'):'get',success:function(data){nm._setCont(data,nm.store.form.sel);},error:function(){nm._error();}});}}});});;
- jQuery(function($,undefined){$.nmFilters({formFile:{is:function(nm){var ret=nm.opener.is('form[enctype="multipart/form-data"]');if(ret){nm._delFilter('form');if(!nm.store.form)nm.store.form=nm.getInternal()._extractUrl(nm.opener.attr('action'));}return ret;},init:function(nm){nm.loadFilter='formFile';nm.store.formFileLoading=false;nm.opener.unbind('submit.nyroModal').bind('submit.nyroModal',function(e){if(!nm.store.formFileIframe){e.preventDefault();nm.opener.trigger('nyroModal');}else{nm.store.formFileLoading=true;}});},initElts:function(nm){var inputSel;if(nm.store.form.sel)inputSel=$('<input />',{'type':'hidden',name:nm.selIndicator,value:nm.store.form.sel.substring(1)}).appendTo(nm.opener);function rmFormFileElts(){if(inputSel){inputSel.remove();inputSel=undefined;delete(inputSel);}nm.store.formFileIframe.attr('src','about:blank').remove();nm.store.formFileIframe=undefined;delete(nm.store.formFileIframe);}nm.store.formFileIframe=$('<iframe name="nyroModalFormFile" src="javascript:\'\';"></iframe>').hide().load(function(){if(nm.store.formFileLoading){nm.store.formFileLoading=false;var content=nm.store.formFileIframe .unbind('load error').contents().find('body').not('script[src]');if(content&&content.html()&&content.html().length){rmFormFileElts();nm._setCont(content.html(),nm.store.form.sel);}else{var nbTry=0;fct=function(){nbTry++;var content=nm.store.formFileIframe .unbind('load error').contents().find('body').not('script[src]');if(content&&content.html()&&content.html().length){nm._setCont(content.html(),nm.store.form.sel);rmFormFileElts();}else if(nbTry<5){setTimeout(fct,25);}else{rmFormFileElts();nm._error();}};setTimeout(fct,25);}}}).error(function(){rmIframe();nm._error();});nm.elts.all.append(nm.store.formFileIframe);nm.opener .attr('target','nyroModalFormFile').submit();},close:function(nm){nm.store.formFileLoading=false;if(nm.store.formFileIframe){nm.store.formFileIframe.remove();nm.store.formFileIframe=undefined;delete(nm.store.formFileIframe);}}}});});;
- jQuery(function($,undefined){$.nmFilters({iframe:{is:function(nm){var target=nm.opener.attr('target')||'',rel=nm.opener.attr('rel')||'',opener=nm.opener.get(0);return!nm._hasFilter('image')&&(target.toLowerCase()=='_blank'||rel.toLowerCase().indexOf('external')>-1||(opener.hostname&&opener.hostname.replace(/:\d*$/,'')!=window.location.hostname.replace(/:\d*$/,'')));},init:function(nm){nm.loadFilter='iframe';},load:function(nm){nm.store.iframe=$('<iframe src="javascript:\'\';"></iframe>');nm._setCont(nm.store.iframe);},afterShowCont:function(nm){nm.store.iframe.attr('src',nm.opener.attr('href'));},close:function(nm){if(nm.store.iframe){nm.store.iframe.remove();nm.store.iframe=undefined;delete(nm.store.iframe);}}}});});;
- jQuery(function($,undefined){$.nmFilters({iframeForm:{is:function(nm){var ret=nm._hasFilter('iframe')&&nm.opener.is('form');if(ret){nm._delFilter('iframe');nm._delFilter('form');}return ret;},init:function(nm){nm.loadFilter='iframeForm';nm.store.iframeFormLoading=false;nm.store.iframeFormOrgTarget=nm.opener.attr('target');nm.opener.unbind('submit.nyroModal').bind('submit.nyroModal',function(e){if(!nm.store.iframeFormIframe){e.preventDefault();nm.opener.trigger('nyroModal');}else{nm.store.iframeFormLoading=true;}});},load:function(nm){nm.store.iframeFormIframe=$('<iframe name="nyroModalIframeForm" src="javascript:\'\';"></iframe>');nm._setCont(nm.store.iframeFormIframe);},afterShowCont:function(nm){nm.opener .attr('target','nyroModalIframeForm').submit();},close:function(nm){nm.store.iframeFormOrgTarget?nm.opener.attr('target',nm.store.iframeFormOrgTarget):nm.opener.removeAttr('target');delete(nm.store.formFileLoading);delete(nm.store.iframeFormOrgTarget);if(nm.store.iframeFormIframe){nm.store.iframeFormIframe.remove();nm.store.iframeFormIframe=undefined;delete(nm.store.iframeFormIframe);}}}});});;
- jQuery(function($,undefined){$.nmFilters({embedly:{is:function(nm){var embedlyReg= /http:\/\/(.*youtube\.com\/watch.*|.*\.youtube\.com\/v\/.*|youtu\.be\/.*|.*\.youtube\.com\/user\/.*|.*\.youtube\.com\/.*#.*\/.*|m\.youtube\.com\/watch.*|m\.youtube\.com\/index.*|.*\.youtube\.com\/profile.*|.*justin\.tv\/.*|.*justin\.tv\/.*\/b\/.*|.*justin\.tv\/.*\/w\/.*|www\.ustream\.tv\/recorded\/.*|www\.ustream\.tv\/channel\/.*|www\.ustream\.tv\/.*|qik\.com\/video\/.*|qik\.com\/.*|qik\.ly\/.*|.*revision3\.com\/.*|.*\.dailymotion\.com\/video\/.*|.*\.dailymotion\.com\/.*\/video\/.*|www\.collegehumor\.com\/video:.*|.*twitvid\.com\/.*|www\.break\.com\/.*\/.*|vids\.myspace\.com\/index\.cfm\?fuseaction=vids\.individual&videoid.*|www\.myspace\.com\/index\.cfm\?fuseaction=.*&videoid.*|www\.metacafe\.com\/watch\/.*|www\.metacafe\.com\/w\/.*|blip\.tv\/file\/.*|.*\.blip\.tv\/file\/.*|video\.google\.com\/videoplay\?.*|.*revver\.com\/video\/.*|video\.yahoo\.com\/watch\/.*\/.*|video\.yahoo\.com\/network\/.*|.*viddler\.com\/explore\/.*\/videos\/.*|liveleak\.com\/view\?.*|www\.liveleak\.com\/view\?.*|animoto\.com\/play\/.*|dotsub\.com\/view\/.*|www\.overstream\.net\/view\.php\?oid=.*|www\.livestream\.com\/.*|www\.worldstarhiphop\.com\/videos\/video.*\.php\?v=.*|worldstarhiphop\.com\/videos\/video.*\.php\?v=.*|teachertube\.com\/viewVideo\.php.*|www\.teachertube\.com\/viewVideo\.php.*|www1\.teachertube\.com\/viewVideo\.php.*|www2\.teachertube\.com\/viewVideo\.php.*|bambuser\.com\/v\/.*|bambuser\.com\/channel\/.*|bambuser\.com\/channel\/.*\/broadcast\/.*|www\.schooltube\.com\/video\/.*\/.*|bigthink\.com\/ideas\/.*|bigthink\.com\/series\/.*|sendables\.jibjab\.com\/view\/.*|sendables\.jibjab\.com\/originals\/.*|www\.xtranormal\.com\/watch\/.*|dipdive\.com\/media\/.*|dipdive\.com\/member\/.*\/media\/.*|dipdive\.com\/v\/.*|.*\.dipdive\.com\/media\/.*|.*\.dipdive\.com\/v\/.*|.*yfrog\..*\/.*|tweetphoto\.com\/.*|www\.flickr\.com\/photos\/.*|flic\.kr\/.*|twitpic\.com\/.*|www\.twitpic\.com\/.*|twitpic\.com\/photos\/.*|www\.twitpic\.com\/photos\/.*|.*imgur\.com\/.*|.*\.posterous\.com\/.*|post\.ly\/.*|twitgoo\.com\/.*|i.*\.photobucket\.com\/albums\/.*|s.*\.photobucket\.com\/albums\/.*|phodroid\.com\/.*\/.*\/.*|www\.mobypicture\.com\/user\/.*\/view\/.*|moby\.to\/.*|xkcd\.com\/.*|www\.xkcd\.com\/.*|imgs\.xkcd\.com\/.*|www\.asofterworld\.com\/index\.php\?id=.*|www\.asofterworld\.com\/.*\.jpg|asofterworld\.com\/.*\.jpg|www\.qwantz\.com\/index\.php\?comic=.*|23hq\.com\/.*\/photo\/.*|www\.23hq\.com\/.*\/photo\/.*|.*dribbble\.com\/shots\/.*|drbl\.in\/.*|.*\.smugmug\.com\/.*|.*\.smugmug\.com\/.*#.*|emberapp\.com\/.*\/images\/.*|emberapp\.com\/.*\/images\/.*\/sizes\/.*|emberapp\.com\/.*\/collections\/.*\/.*|emberapp\.com\/.*\/categories\/.*\/.*\/.*|embr\.it\/.*|picasaweb\.google\.com.*\/.*\/.*#.*|picasaweb\.google\.com.*\/lh\/photo\/.*|picasaweb\.google\.com.*\/.*\/.*|dailybooth\.com\/.*\/.*|brizzly\.com\/pic\/.*|pics\.brizzly\.com\/.*\.jpg|img\.ly\/.*|www\.tinypic\.com\/view\.php.*|tinypic\.com\/view\.php.*|www\.tinypic\.com\/player\.php.*|tinypic\.com\/player\.php.*|www\.tinypic\.com\/r\/.*\/.*|tinypic\.com\/r\/.*\/.*|.*\.tinypic\.com\/.*\.jpg|.*\.tinypic\.com\/.*\.png|meadd\.com\/.*\/.*|meadd\.com\/.*|.*\.deviantart\.com\/art\/.*|.*\.deviantart\.com\/gallery\/.*|.*\.deviantart\.com\/#\/.*|fav\.me\/.*|.*\.deviantart\.com|.*\.deviantart\.com\/gallery|.*\.deviantart\.com\/.*\/.*\.jpg|.*\.deviantart\.com\/.*\/.*\.gif|.*\.deviantart\.net\/.*\/.*\.jpg|.*\.deviantart\.net\/.*\/.*\.gif|plixi\.com\/p\/.*|plixi\.com\/profile\/home\/.*|plixi\.com\/.*|www\.fotopedia\.com\/.*\/.*|fotopedia\.com\/.*\/.*|photozou\.jp\/photo\/show\/.*\/.*|photozou\.jp\/photo\/photo_only\/.*\/.*|instagr\.am\/p\/.*|skitch\.com\/.*\/.*\/.*|img\.skitch\.com\/.*|https:\/\/skitch\.com\/.*\/.*\/.*|https:\/\/img\.skitch\.com\/.*|share\.ovi\.com\/media\/.*\/.*|www\.questionablecontent\.net\/|questionablecontent\.net\/|www\.questionablecontent\.net\/view\.php.*|questionablecontent\.net\/view\.php.*|questionablecontent\.net\/comics\/.*\.png|www\.questionablecontent\.net\/comics\/.*\.png|picplz\.com\/user\/.*\/pic\/.*\/|twitrpix\.com\/.*|.*\.twitrpix\.com\/.*|www\.someecards\.com\/.*\/.*|someecards\.com\/.*\/.*|some\.ly\/.*|www\.some\.ly\/.*|pikchur\.com\/.*|achewood\.com\/.*|www\.achewood\.com\/.*|achewood\.com\/index\.php.*|www\.achewood\.com\/index\.php.*|www\.whitehouse\.gov\/photos-and-video\/video\/.*|www\.whitehouse\.gov\/video\/.*|wh\.gov\/photos-and-video\/video\/.*|wh\.gov\/video\/.*|www\.hulu\.com\/watch.*|www\.hulu\.com\/w\/.*|hulu\.com\/watch.*|hulu\.com\/w\/.*|.*crackle\.com\/c\/.*|www\.fancast\.com\/.*\/videos|www\.funnyordie\.com\/videos\/.*|www\.funnyordie\.com\/m\/.*|funnyordie\.com\/videos\/.*|funnyordie\.com\/m\/.*|www\.vimeo\.com\/groups\/.*\/videos\/.*|www\.vimeo\.com\/.*|vimeo\.com\/m\/#\/featured\/.*|vimeo\.com\/groups\/.*\/videos\/.*|vimeo\.com\/.*|vimeo\.com\/m\/#\/featured\/.*|www\.ted\.com\/talks\/.*\.html.*|www\.ted\.com\/talks\/lang\/.*\/.*\.html.*|www\.ted\.com\/index\.php\/talks\/.*\.html.*|www\.ted\.com\/index\.php\/talks\/lang\/.*\/.*\.html.*|.*nfb\.ca\/film\/.*|www\.thedailyshow\.com\/watch\/.*|www\.thedailyshow\.com\/full-episodes\/.*|www\.thedailyshow\.com\/collection\/.*\/.*\/.*|movies\.yahoo\.com\/movie\/.*\/video\/.*|movies\.yahoo\.com\/movie\/.*\/trailer|movies\.yahoo\.com\/movie\/.*\/video|www\.colbertnation\.com\/the-colbert-report-collections\/.*|www\.colbertnation\.com\/full-episodes\/.*|www\.colbertnation\.com\/the-colbert-report-videos\/.*|www\.comedycentral\.com\/videos\/index\.jhtml\?.*|www\.theonion\.com\/video\/.*|theonion\.com\/video\/.*|wordpress\.tv\/.*\/.*\/.*\/.*\/|www\.traileraddict\.com\/trailer\/.*|www\.traileraddict\.com\/clip\/.*|www\.traileraddict\.com\/poster\/.*|www\.escapistmagazine\.com\/videos\/.*|www\.trailerspy\.com\/trailer\/.*\/.*|www\.trailerspy\.com\/trailer\/.*|www\.trailerspy\.com\/view_video\.php.*|www\.atom\.com\/.*\/.*\/|fora\.tv\/.*\/.*\/.*\/.*|www\.spike\.com\/video\/.*|www\.gametrailers\.com\/video\/.*|gametrailers\.com\/video\/.*|www\.koldcast\.tv\/video\/.*|www\.koldcast\.tv\/#video:.*|techcrunch\.tv\/watch.*|techcrunch\.tv\/.*\/watch.*|mixergy\.com\/.*|video\.pbs\.org\/video\/.*|www\.zapiks\.com\/.*|tv\.digg\.com\/diggnation\/.*|tv\.digg\.com\/diggreel\/.*|tv\.digg\.com\/diggdialogg\/.*|www\.trutv\.com\/video\/.*|www\.nzonscreen\.com\/title\/.*|nzonscreen\.com\/title\/.*|app\.wistia\.com\/embed\/medias\/.*|https:\/\/app\.wistia\.com\/embed\/medias\/.*|www\.godtube\.com\/featured\/video\/.*|godtube\.com\/featured\/video\/.*|www\.godtube\.com\/watch\/.*|godtube\.com\/watch\/.*|www\.tangle\.com\/view_video.*|mediamatters\.org\/mmtv\/.*|www\.clikthrough\.com\/theater\/video\/.*|soundcloud\.com\/.*|soundcloud\.com\/.*\/.*|soundcloud\.com\/.*\/sets\/.*|soundcloud\.com\/groups\/.*|snd\.sc\/.*|www\.last\.fm\/music\/.*|www\.last\.fm\/music\/+videos\/.*|www\.last\.fm\/music\/+images\/.*|www\.last\.fm\/music\/.*\/_\/.*|www\.last\.fm\/music\/.*\/.*|www\.mixcloud\.com\/.*\/.*\/|www\.radionomy\.com\/.*\/radio\/.*|radionomy\.com\/.*\/radio\/.*|www\.entertonement\.com\/clips\/.*|www\.rdio\.com\/#\/artist\/.*\/album\/.*|www\.rdio\.com\/artist\/.*\/album\/.*|www\.zero-inch\.com\/.*|.*\.bandcamp\.com\/|.*\.bandcamp\.com\/track\/.*|.*\.bandcamp\.com\/album\/.*|freemusicarchive\.org\/music\/.*|www\.freemusicarchive\.org\/music\/.*|freemusicarchive\.org\/curator\/.*|www\.freemusicarchive\.org\/curator\/.*|www\.npr\.org\/.*\/.*\/.*\/.*\/.*|www\.npr\.org\/.*\/.*\/.*\/.*\/.*\/.*|www\.npr\.org\/.*\/.*\/.*\/.*\/.*\/.*\/.*|www\.npr\.org\/templates\/story\/story\.php.*|huffduffer\.com\/.*\/.*|www\.audioboo\.fm\/boos\/.*|audioboo\.fm\/boos\/.*|boo\.fm\/b.*|www\.xiami\.com\/song\/.*|xiami\.com\/song\/.*|espn\.go\.com\/video\/clip.*|espn\.go\.com\/.*\/story.*|abcnews\.com\/.*\/video\/.*|abcnews\.com\/video\/playerIndex.*|washingtonpost\.com\/wp-dyn\/.*\/video\/.*\/.*\/.*\/.*|www\.washingtonpost\.com\/wp-dyn\/.*\/video\/.*\/.*\/.*\/.*|www\.boston\.com\/video.*|boston\.com\/video.*|www\.facebook\.com\/photo\.php.*|www\.facebook\.com\/video\/video\.php.*|www\.facebook\.com\/v\/.*|cnbc\.com\/id\/.*\?.*video.*|www\.cnbc\.com\/id\/.*\?.*video.*|cnbc\.com\/id\/.*\/play\/1\/video\/.*|www\.cnbc\.com\/id\/.*\/play\/1\/video\/.*|cbsnews\.com\/video\/watch\/.*|www\.google\.com\/buzz\/.*\/.*\/.*|www\.google\.com\/buzz\/.*|www\.google\.com\/profiles\/.*|google\.com\/buzz\/.*\/.*\/.*|google\.com\/buzz\/.*|google\.com\/profiles\/.*|www\.cnn\.com\/video\/.*|edition\.cnn\.com\/video\/.*|money\.cnn\.com\/video\/.*|today\.msnbc\.msn\.com\/id\/.*\/vp\/.*|www\.msnbc\.msn\.com\/id\/.*\/vp\/.*|www\.msnbc\.msn\.com\/id\/.*\/ns\/.*|today\.msnbc\.msn\.com\/id\/.*\/ns\/.*|multimedia\.foxsports\.com\/m\/video\/.*\/.*|msn\.foxsports\.com\/video.*|www\.globalpost\.com\/video\/.*|www\.globalpost\.com\/dispatch\/.*|.*amazon\..*\/gp\/product\/.*|.*amazon\..*\/.*\/dp\/.*|.*amazon\..*\/dp\/.*|.*amazon\..*\/o\/ASIN\/.*|.*amazon\..*\/gp\/offer-listing\/.*|.*amazon\..*\/.*\/ASIN\/.*|.*amazon\..*\/gp\/product\/images\/.*|www\.amzn\.com\/.*|amzn\.com\/.*|www\.shopstyle\.com\/browse.*|www\.shopstyle\.com\/action\/apiVisitRetailer.*|www\.shopstyle\.com\/action\/viewLook.*|gist\.github\.com\/.*|twitter\.com\/.*\/status\/.*|twitter\.com\/.*\/statuses\/.*|mobile\.twitter\.com\/.*\/status\/.*|mobile\.twitter\.com\/.*\/statuses\/.*|www\.crunchbase\.com\/.*\/.*|crunchbase\.com\/.*\/.*|www\.slideshare\.net\/.*\/.*|www\.slideshare\.net\/mobile\/.*\/.*|.*\.scribd\.com\/doc\/.*|screenr\.com\/.*|polldaddy\.com\/community\/poll\/.*|polldaddy\.com\/poll\/.*|answers\.polldaddy\.com\/poll\/.*|www\.5min\.com\/Video\/.*|www\.howcast\.com\/videos\/.*|www\.screencast\.com\/.*\/media\/.*|screencast\.com\/.*\/media\/.*|www\.screencast\.com\/t\/.*|screencast\.com\/t\/.*|issuu\.com\/.*\/docs\/.*|www\.kickstarter\.com\/projects\/.*\/.*|www\.scrapblog\.com\/viewer\/viewer\.aspx.*|ping\.fm\/p\/.*|chart\.ly\/.*|maps\.google\.com\/maps\?.*|maps\.google\.com\/\?.*|maps\.google\.com\/maps\/ms\?.*|.*\.craigslist\.org\/.*\/.*|my\.opera\.com\/.*\/albums\/show\.dml\?id=.*|my\.opera\.com\/.*\/albums\/showpic\.dml\?album=.*&picture=.*|tumblr\.com\/.*|.*\.tumblr\.com\/post\/.*|www\.polleverywhere\.com\/polls\/.*|www\.polleverywhere\.com\/multiple_choice_polls\/.*|www\.polleverywhere\.com\/free_text_polls\/.*|www\.quantcast\.com\/wd:.*|www\.quantcast\.com\/.*|siteanalytics\.compete\.com\/.*|statsheet\.com\/statplot\/charts\/.*\/.*\/.*\/.*|statsheet\.com\/statplot\/charts\/e\/.*|statsheet\.com\/.*\/teams\/.*\/.*|statsheet\.com\/tools\/chartlets\?chart=.*|.*\.status\.net\/notice\/.*|identi\.ca\/notice\/.*|brainbird\.net\/notice\/.*|shitmydadsays\.com\/notice\/.*|www\.studivz\.net\/Profile\/.*|www\.studivz\.net\/l\/.*|www\.studivz\.net\/Groups\/Overview\/.*|www\.studivz\.net\/Gadgets\/Info\/.*|www\.studivz\.net\/Gadgets\/Install\/.*|www\.studivz\.net\/.*|www\.meinvz\.net\/Profile\/.*|www\.meinvz\.net\/l\/.*|www\.meinvz\.net\/Groups\/Overview\/.*|www\.meinvz\.net\/Gadgets\/Info\/.*|www\.meinvz\.net\/Gadgets\/Install\/.*|www\.meinvz\.net\/.*|www\.schuelervz\.net\/Profile\/.*|www\.schuelervz\.net\/l\/.*|www\.schuelervz\.net\/Groups\/Overview\/.*|www\.schuelervz\.net\/Gadgets\/Info\/.*|www\.schuelervz\.net\/Gadgets\/Install\/.*|www\.schuelervz\.net\/.*|myloc\.me\/.*|pastebin\.com\/.*|pastie\.org\/.*|www\.pastie\.org\/.*|redux\.com\/stream\/item\/.*\/.*|redux\.com\/f\/.*\/.*|www\.redux\.com\/stream\/item\/.*\/.*|www\.redux\.com\/f\/.*\/.*|cl\.ly\/.*|cl\.ly\/.*\/content|speakerdeck\.com\/u\/.*\/p\/.*|www\.kiva\.org\/lend\/.*|www\.timetoast\.com\/timelines\/.*|storify\.com\/.*\/.*|.*meetup\.com\/.*|meetu\.ps\/.*|www\.dailymile\.com\/people\/.*\/entries\/.*|.*\.kinomap\.com\/.*|www\.metacdn\.com\/api\/users\/.*\/content\/.*|www\.metacdn\.com\/api\/users\/.*\/media\/.*|prezi\.com\/.*\/.*|.*\.uservoice\.com\/.*\/suggestions\/.*)/i;var ret=nm._hasFilter('link')&&nm.opener.attr('href')&&nm.opener.attr('href').match(embedlyReg)!==null;if(ret)nm._delFilter('iframe');return ret;},init:function(nm){nm.loadFilter='embedly';nm.store.embedly={};},load:function(nm){$.ajax({url:'http://api.embed.ly/1/oembed',dataType:'jsonp',data:'wmode=transparent&url='+nm.opener.attr('href'),success:function(data){if(data.type=='error')nm._error();else if(data.type=='photo'){nm.filters.push('image');$('<img />').load(function(){nm.elts.cont.addClass('nyroModalImg');nm.elts.hidden.addClass('nyroModalImg');nm._setCont(this);}).error(function(){nm._error();}).attr('src',data.url);}else{nm.store.embedly.w=data.width;nm.store.embedly.h=data.height;nm._setCont('<div>'+data.html+'</div>');}}});},size:function(nm){if(nm.store.embedly.w&&!nm.sizes.h){nm.sizes.w=nm.store.embedly.w;nm.sizes.h=nm.store.embedly.h;}}}});});;
--- a/web/hdabo/static/hdabo/js/jquery.qtip.min.js	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('"6t 6u";(j($){$(31).3x(j(){R i;$(2e).1J(\'3L 3E\',j(r){1V(i=0;i<$.18.g.O.Q;i++){R T=$.18.g.O[i];c(T&&T.V&&T.V.1b&&T.8.k.17!==\'29\'&&T.d.h.2r(\':28\')&&(T.8.k.1e.3E&&r.17===\'3E\'||T.8.k.1e.3L&&r.17===\'3L\')){T.2h(r,H)}}});$(31).1J(\'5j.g\',j(r){c($(r.s).5g(\'12.g\').Q===0){R h=$(\'.6w\'),T=h.g(\'T\');c(h.2r(\':28\')&&T&&T.V&&!T.V.23&&$(r.s).2m(T.d.s).Q>1){T.D(r)}}})});j 2D(w){c(!w){B p}A.x=5a(w).3l(/5x/i,\'1j\').5y(/M|25|1j/i)[0].2F();A.y=5a(w).3l(/5x/i,\'1j\').5y(/K|26|1j/i)[0].2F();A.1k={M:0,K:0};A.2y=(w.2H(0).6L(/^(t|b)/)>-1)?\'y\':\'x\';A.1w=j(){B(A.2y===\'y\')?A.y+A.x:A.x+A.y}}j 4t(w,o,G){R 1N={5B:[[0,0],[o,G],[o,0]],6a:[[0,0],[o,0],[0,G]],5K:[[0,G],[o,0],[o,G]],5N:[[0,0],[0,G],[o,G]],6y:[[0,G],[o/2,0],[o,G]],6v:[[0,0],[o,0],[o/2,G]],6i:[[0,0],[o,G/2],[0,G]],6J:[[o,0],[o,G],[0,G/2]]};1N.6M=1N.5B;1N.6z=1N.6a;1N.6x=1N.5K;1N.6C=1N.5N;B 1N[w]}j 4e(E){R 2j;c($(\'<1f />\').1q(0).1E){2j={3K:[E,E],40:[0,E],4I:[E,0],3P:[0,0]}}C c($.16.1d){2j={3K:[-2z,2z,0],40:[-2z,2z,-E],4I:[2z,5D,0],3P:[2z,5D,-E]}}B 2j}j 2G(e,4b){R 2U,i;2U=$.2p(H,{},e);1V(i 5R 2U){c(4b===H&&(/(f|1g)/i).1Y(i)){3z 2U[i]}C c(!4b&&(/(o|I|f|U|1g|4v)/i).1Y(i)){3z 2U[i]}}B 2U}j 4i(e){c(P e.f!==\'19\'){e.f={w:e.f}}c(P e.f.N!==\'19\'){e.f.N={o:e.f.N,G:e.f.N}}c(P e.I!==\'19\'){e.I={o:e.I}}c(P e.o!==\'19\'){e.o={2Z:e.o}}c(P e.o.1H===\'1w\'){e.o.1H=1A(e.o.1H.3l(/([0-9]+)/i,"$1"),10)}c(P e.o.2b===\'1w\'){e.o.2b=1A(e.o.2b.3l(/([0-9]+)/i,"$1"),10)}c(P e.f.N.x===\'2s\'){e.f.N.o=e.f.N.x;3z e.f.N.x}c(P e.f.N.y===\'2s\'){e.f.N.G=e.f.N.y;3z e.f.N.y}B e}j 4l(){R 7,i,3A,2v,1D,1P;7=A;3A=[H,{}];1V(i=0;i<3b.Q;i++){3A.5h(3b[i])}2v=[$.2p.4s($,3A)];6F(P 2v[0].21===\'1w\'){2v.5O(4i($.18.g.3c[2v[0].21]))}2v.5O(H,{1g:{h:\'g-\'+(3b[0].21||\'39\')}},$.18.g.3c.39);1D=$.2p.4s($,2v);1P=($.16.1d)?1:0;1D.f.N.o+=1P;1D.f.N.G+=1P;c(1D.f.N.o%2>0){1D.f.N.o+=1}c(1D.f.N.G%2>0){1D.f.N.G+=1}c(1D.f.w===H){c(7.8.k.w.h===\'1j\'&&7.8.k.w.s===\'1j\'){1D.f.w=p}C{1D.f.w=7.8.k.w.h}}B 1D}j 46(1f,X,E,J){R 1n=1f.1q(0).1E(\'2d\');1n.5G=J;1n.5U();1n.3p(X[0],X[1],E,0,1u.6N*2,p);1n.5Y()}j 59(){R 7,i,o,E,J,X,1Q,N,4O,2k,3e,3i,4g,4q,4G;7=A;7.d.1t.1M(\'.g-3i, .g-3e\').3W();o=7.8.e.I.o;E=7.8.e.I.E;J=7.8.e.I.J||7.8.e.f.J;X=4e(E);1Q={};1V(i 5R X){1Q[i]=\'<12 1S="\'+i+\'" e="\'+((/6n/).1Y(i)?\'M\':\'25\')+\':0; \'+\'k:34; G:\'+E+\'1a; o:\'+E+\'1a; 2u:1F; 2S-G:0.1B; 2Y-N:1B">\';c($(\'<1f />\').1q(0).1E){1Q[i]+=\'<1f G="\'+E+\'" o="\'+E+\'" e="4Q-3o: K"></1f>\'}C c($.16.1d){N=E*2+3;1Q[i]+=\'<v:3p 6f="p" 3t="\'+J+\'" 6s="\'+X[i][0]+\'" 6r="\'+X[i][1]+\'" \'+\'e="o:\'+N+\'1a; G:\'+N+\'1a; 2q-K:\'+((/26/).1Y(i)?-2:-1)+\'1a; \'+\'2q-M:\'+((/6m/).1Y(i)?X[i][2]-3.5:-1)+\'1a; \'+\'4Q-3o:K; 2a:53-4E; 3I:1x(#2L#3R)"></v:3p>\'}1Q[i]+=\'</12>\'}4O=7.3d().o-(1u.1H(o,E)*2);2k=\'<12 1I="g-2k" e="G:\'+E+\'1a; o:\'+4O+\'1a; \'+\'2u:1F; 1s-J:\'+J+\'; 2S-G:0.1B; 2Y-N:1B;">\';3e=\'<12 1I="g-3e" 4k="4f" e="G:\'+E+\'1a; \'+\'2q-M:\'+E+\'1a; 2S-G:0.1B; 2Y-N:1B; 2x:0;">\'+1Q.3K+1Q.40+2k;7.d.1t.3B(3e);3i=\'<12 1I="g-3i" 4k="4f" e="G:\'+E+\'1a; \'+\'2q-M:\'+E+\'1a; 2S-G:0.1B; 2Y-N:1B; 2x:0;">\'+1Q.4I+1Q.3P+2k;7.d.1t.5s(3i);c($(\'<1f />\').1q(0).1E){7.d.1t.1M(\'1f\').1L(j(){4g=X[$(A).3O(\'[1S]:1R\').W(\'1S\')];46.S(7,$(A),4g,E,J)})}C c($.16.1d){7.d.h.5s(\'<v:3C e="3I:1x(#2L#3R);"></v:3C>\')}4q=1u.1H(E,(E+(o-E)));4G=1u.1H(o-E,0);7.d.1y.F({I:\'6D 3q \'+J,6H:4G+\'1a \'+4q+\'1a\'})}j 4u(1f,X,J){R 1n=1f.1q(0).1E(\'2d\');1n.5G=J;1n.5U();1n.6o(X[0][0],X[0][1]);1n.5Q(X[1][0],X[1][1]);1n.5Q(X[2][0],X[2][1]);1n.5Y()}j 42(w){R 7,1P,24,4n,4h,3Q;7=A;c(7.8.e.f.w===p||!7.d.f){B}c(!w){w=2T 2D(7.d.f.W(\'1S\'))}1P=24=($.16.1d)?1:0;7.d.f.F(w[w.2y],0);c(w.2y===\'y\'){c($.16.1d){c(1A($.16.2X.2H(0),10)===6){24=w.y===\'K\'?-3:1}C{24=w.y===\'K\'?1:2}}c(w.x===\'1j\'){7.d.f.F({M:\'50%\',6K:-(7.8.e.f.N.o/2)})}C c(w.x===\'M\'){7.d.f.F({M:7.8.e.I.E-1P})}C{7.d.f.F({25:7.8.e.I.E+1P})}c(w.y===\'K\'){7.d.f.F({K:-24})}C{7.d.f.F({26:24})}}C{c($.16.1d){24=(1A($.16.2X.2H(0),10)===6)?1:(w.x===\'M\'?1:2)}c(w.y===\'1j\'){7.d.f.F({K:\'50%\',49:-(7.8.e.f.N.G/2)})}C c(w.y===\'K\'){7.d.f.F({K:7.8.e.I.E-1P})}C{7.d.f.F({26:7.8.e.I.E+1P})}c(w.x===\'M\'){7.d.f.F({M:-24})}C{7.d.f.F({25:24})}}4n=\'2x-\'+w[w.2y];4h=7.8.e.f.N[w.2y===\'x\'?\'o\':\'G\'];7.d.h.F(\'2x\',0).F(4n,4h);c($.16.1d&&1A($.16.2X.2H(0),6)===6){3Q=1A(7.d.f.F(\'2q-K\'),10)||0;3Q+=1A(7.d.u.F(\'2q-K\'),10)||0;7.d.f.F({49:3Q})}}j 44(w){R 7,J,X,3J,2o,f;7=A;c(7.d.f!==1z){7.d.f.3W()}J=7.8.e.f.J||7.8.e.I.J;c(7.8.e.f.w===p){B}C c(!w){w=2T 2D(7.8.e.f.w)}X=4t(w.1w(),7.8.e.f.N.o,7.8.e.f.N.G);7.d.f=\'<12 1I="\'+7.8.e.1g.f+\'" 4k="4f" 1S="\'+w.1w()+\'" e="k:34; \'+\'G:\'+7.8.e.f.N.G+\'1a; o:\'+7.8.e.f.N.o+\'1a; \'+\'2q:0 6e; 2S-G:0.1B; 2Y-N:1B;"></12>\';7.d.h.3B(7.d.f);c($(\'<1f />\').1q(0).1E){f=\'<1f G="\'+7.8.e.f.N.G+\'" o="\'+7.8.e.f.N.o+\'"></1f>\'}C c($.16.1d){3J=7.8.e.f.N.o+\',\'+7.8.e.f.N.G;2o=\'m\'+X[0][0]+\',\'+X[0][1];2o+=\' l\'+X[1][0]+\',\'+X[1][1];2o+=\' \'+X[2][0]+\',\'+X[2][1];2o+=\' 6I\';f=\'<v:3M 3t="\'+J+\'" 6f="p" 6p="H" 2o="\'+2o+\'" 3J="\'+3J+\'" \'+\'e="o:\'+7.8.e.f.N.o+\'1a; G:\'+7.8.e.f.N.G+\'1a; \'+\'2S-G:0.1B; 2a:53-4E; 3I:1x(#2L#3R); \'+\'4Q-3o:\'+(w.y===\'K\'?\'26\':\'K\')+\'"></v:3M>\';f+=\'<v:3C e="3I:1x(#2L#3R);"></v:3C>\';7.d.1y.F(\'k\',\'4y\')}7.d.f=7.d.h.1M(\'.\'+7.8.e.1g.f).6B(0);7.d.f.2l(f);c($(\'<1f  />\').1q(0).1E){4u.S(7,7.d.f.1M(\'1f:1R\'),X,J)}c(w.y===\'K\'&&$.16.1d&&1A($.16.2X.2H(0),10)===6){7.d.f.F({49:-4})}42.S(7,w)}j 5b(){R 7=A;c(7.d.U!==1z){7.d.U.3W()}7.d.h.W(\'3r-6E\',\'g-\'+7.11+\'-U\');7.d.U=$(\'<12 11="g-\'+7.11+\'-U" 1I="\'+7.8.e.1g.U+\'"></12>\').F(2G(7.8.e.U,H)).F({2f:($.16.1d)?1:0}).58(7.d.1y);c(7.8.u.U.1m){7.5W.S(7,7.8.u.U.1m)}c(7.8.u.U.1i!==p&&P 7.8.u.U.1i===\'1w\'){7.d.1i=$(\'<a 1I="\'+7.8.e.1g.1i+\'" 5e="1i" e="6G:25; k: 4y"></a>\').F(2G(7.8.e.1i,H)).2l(7.8.u.U.1i).58(7.d.U).5d(j(r){c(!7.V.23){7.D(r)}})}}j 5l(){R 7,3h,2i,3u;7=A;3h=7.8.q.L.s;2i=7.8.D.L.s;c(7.8.D.3g){2i=2i.2m(7.d.h)}3u=[\'5d\',\'6h\',\'6k\',\'6j\',\'4C\',\'4x\',\'5j\',\'6l\',\'35\'];j 3v(r){c(7.V.23===H){B}2g(7.1G.1W);7.1G.1W=4M(j(){$(3u).1L(j(){2i.1O(A+\'.g-1W\');7.d.u.1O(A+\'.g-1W\')});7.D(r)},7.8.D.2V)}c(7.8.D.3g===H){7.d.h.1J(\'35.g\',j(){c(7.V.23===H){B}2g(7.1G.D)})}j 4S(r){c(7.V.23===H){B}c(7.8.D.L.r===\'1W\'){$(3u).1L(j(){2i.1J(A+\'.g-1W\',3v);7.d.u.1J(A+\'.g-1W\',3v)});3v()}2g(7.1G.q);2g(7.1G.D);c(7.8.q.2V>0){7.1G.q=4M(j(){7.q(r)},7.8.q.2V)}C{7.q(r)}}j 4P(r){c(7.V.23===H){B}c(7.8.D.3g===H&&(/1K(6q|6A)/i).1Y(7.8.D.L.r)&&$(r.70).5g(\'12.g[11^="g"]\').Q>0){r.7L();r.7K();2g(7.1G.D);B p}2g(7.1G.q);2g(7.1G.D);7.d.h.3S(H,H);7.1G.D=4M(j(){7.D(r)},7.8.D.2V)}c(7.8.k.s===\'1K\'&&7.8.k.17!==\'29\'){3h.1J(\'4C.g\',j(r){7.1v.1K={M:r.3Y,K:r.4c};c(7.V.23===p&&7.8.k.1e.1K===H&&7.8.k.17!==\'29\'&&7.d.h.F(\'2a\')!==\'3a\'){7.2h(r)}})}c((7.8.q.L.s.2m(7.8.D.L.s).Q===1&&7.8.q.L.r===7.8.D.L.r&&7.8.D.L.r!==\'1W\')||7.8.D.L.r===\'4R\'){7.1v.2I=0;3h.1J(7.8.q.L.r+\'.g\',j(r){c(7.1v.2I===0){4S(r)}C{4P(r)}})}C{3h.1J(7.8.q.L.r+\'.g\',4S);c(7.8.D.L.r!==\'1W\'){2i.1J(7.8.D.L.r+\'.g\',4P)}}c((/(3g|34)/).1Y(7.8.k.17)){7.d.h.1J(\'35.g\',7.2E)}}j 22(){R 7,2l,2t;7=A;2t=7.3d();2l=\'<7J 1I="g-22" 7I="0" 7M="-1" 4T="7N:p" \'+\'e="2a:4E; k:34; z-3s:-1; 5m:7R(2B=\\\'0\\\'); I: 1B 3q 4H; \'+\'G:\'+2t.G+\'1a; o:\'+2t.o+\'1a" />\';7.d.22=7.d.1t.3B(2l).2w(\'.g-22:1R\')}j 4w(){R 7,u,1x,Y,2A;7=A;7.5J.S(7);7.V.1b=2;7.d.h=\'<12 g="\'+7.11+\'" 11="g-\'+7.11+\'" 5e="h" \'+\'3r-7Q="g-\'+7.11+\'-u" 1I="g \'+(7.8.e.1g.h||7.8.e)+\'" \'+\'e="2a:3a; -7P-I-E:0; -7O-I-E:0; I-E:0; k:\'+7.8.k.17+\';"> \'+\'  <12 1I="g-1t" e="k:4y; 2u:1F; 1m-3o:M;"> \'+\'    <12 1I="g-1y" e="2u:1F;"> \'+\'       <12 11="g-\'+7.11+\'-u" 1I="g-u \'+7.8.e.1g.u+\'"></12> \'+\'</12></12></12>\';7.d.h=$(7.d.h);7.d.h.5P(7.8.k.3U);7.d.h.Y(\'g\',{3k:0,O:[7]});7.d.1t=7.d.h.2w(\'12:1R\');7.d.1y=7.d.1t.2w(\'12:1R\');7.d.u=7.d.1y.2w(\'12:1R\').F(2G(7.8.e));c($.16.1d){7.d.1t.2m(7.d.u).F({2f:1})}c(7.8.D.L.r===\'4R\'){7.d.h.W(\'4R\',H)}c(P 7.8.e.o.2Z===\'2s\'){7.4d()}c($(\'<1f />\').1q(0).1E||$.16.1d){c(7.8.e.I.E>0){59.S(7)}C{7.d.1y.F({I:7.8.e.I.o+\'1a 3q \'+7.8.e.I.J})}c(7.8.e.f.w!==p){44.S(7)}}C{7.d.1y.F({I:7.8.e.I.o+\'1a 3q \'+7.8.e.I.J});7.8.e.I.E=0;7.8.e.f.w=p}c((P 7.8.u.1m===\'1w\'&&7.8.u.1m.Q>0)||(7.8.u.1m.4r&&7.8.u.1m.Q>0)){u=7.8.u.1m}C{u=\' \'}c(7.8.u.U.1m!==p){5b.S(7)}7.4A(u,p);5l.S(7);c(7.8.q.3x===H){7.q()}c(7.8.u.1x!==p){1x=7.8.u.1x;Y=7.8.u.Y;2A=7.8.u.2A||\'1q\';7.5Z(1x,Y,2A)}7.V.1b=H;7.5f.S(7)}j 56(s,8,11){R 7=A;7.11=11;7.8=8;7.V={4j:p,1b:p,23:p,3Z:p};7.d={s:s.5v(7.8.e.1g.s),h:1z,1t:1z,u:1z,1y:1z,U:1z,1i:1z,f:1z,22:1z};7.1v={W:p,1K:{},2I:0,2u:{M:p,K:p}};7.1G={};$.2p(7,7.8.T,{q:j(r){R 1c,1X;c(!7.V.1b){B p}c(7.d.h.F(\'2a\')!==\'3a\'){B 7}7.d.h.3S(H,p);1c=7.5n.S(7,r);c(1c===p){B 7}j 2M(){7.d.h.W(\'3r-1F\',H);c(7.8.k.17!==\'29\'){7.2E()}7.5q.S(7,r);c($.16.1d){R 4a=7.d.h.1q(0).e;4a.43(\'5m\');4a.43(\'2B\')}C{7.d.h.F({2B:\'\'})}}7.1v.2I=1;c(7.8.k.17!==\'29\'){7.2h(r,(7.8.q.Z.Q>0&&7.1b!==2))}c(P 7.8.q.1X===\'19\'){1X=$(7.8.q.1X)}C c(7.8.q.1X===H){1X=$(\'12.g\').5S(7.d.h)}c(1X){1X.1L(j(){c($(A).g(\'T\').V.1b===H){$(A).g(\'T\').D()}})}c(P 7.8.q.Z.17===\'j\'){7.8.q.Z.17.S(7.d.h,7.8.q.Z.Q);7.d.h.5u(j(){2M();$(A).5t()})}C{4N(7.8.q.Z.17.2F()){1Z\'3w\':7.d.h.7H(7.8.q.Z.Q,2M);1C;1Z\'5o\':7.d.h.7G(7.8.q.Z.Q,j(){2M();c(7.8.k.17!==\'29\'){7.2h(r,H)}});1C;1Z\'5p\':7.d.h.q(7.8.q.Z.Q,2M);1C;2L:7.d.h.q(1z,2M);1C}7.d.h.5v(7.8.e.1g.3T)}B 7},D:j(r){R 1c;c(!7.V.1b){B p}C c(7.d.h.F(\'2a\')===\'3a\'){B 7}2g(7.1G.q);7.d.h.3S(H,p);1c=7.5A.S(7,r);c(1c===p){B 7}j 2K(){7.d.h.W(\'3r-1F\',H);c($.16.1d){7.d.h.1q(0).e.43(\'2B\')}C{7.d.h.F({2B:\'\'})}7.4Z.S(7,r)}7.1v.2I=0;c(P 7.8.D.Z.17===\'j\'){7.8.D.Z.17.S(7.d.h,7.8.D.Z.Q);7.d.h.5u(j(){2K();$(A).5t()})}C{4N(7.8.D.Z.17.2F()){1Z\'3w\':7.d.h.7z(7.8.D.Z.Q,2K);1C;1Z\'5o\':7.d.h.7y(7.8.D.Z.Q,2K);1C;1Z\'5p\':7.d.h.D(7.8.D.Z.Q,2K);1C;2L:7.d.h.D(1z,2K);1C}7.d.h.7x(7.8.e.1g.3T)}B 7},2I:j(r,38){R 5r=/7w|2s/.1Y(P 38)?38:!7.d.h.2r(\':28\');7[5r?\'q\':\'D\'](r);B 7},2h:j(r,4o){c(!7.V.1b){B p}R 1U=8.k,s=$(1U.s),2Q=7.d.h.47(),2P=7.d.h.48(),1p,1l,k,1o=1U.w.h,2R=1U.w.s,1c,14,i,4L,27,45={M:j(){R 3j=$(2e).3D(),3n=$(2e).o()+$(2e).3D(),2J=1o.x===\'1j\'?2Q/2:2Q,2N=1o.x===\'1j\'?1p/2:1p,2O=(1o.x===\'1j\'?1:2)*7.8.e.I.E,1k=-2*1U.1e.x,3m=k.M+2Q,1h;c(3m>3n){1h=1k-2J-2N+2O;c(k.M+1h>3j||3j-(k.M+1h)<3m-3n){B{1e:1h,f:\'25\'}}}c(k.M<3j){1h=1k+2J+2N-2O;c(3m+1h<3n||3m+1h-3n<3j-k.M){B{1e:1h,f:\'M\'}}}B{1e:0,f:1o.x}},K:j(){R 30=$(2e).3G(),33=$(2e).G()+$(2e).3G(),2J=1o.y===\'1j\'?2P/2:2P,2N=1o.y===\'1j\'?1l/2:1l,2O=(1o.y===\'1j\'?1:2)*7.8.e.I.E,1k=-2*1U.1e.y,32=k.K+2P,1h;c(32>33){1h=1k-2J-2N+2O;c(k.K+1h>30||30-(k.K+1h)<32-33){B{1e:1h,f:\'26\'}}}c(k.K<30){1h=1k+2J+2N-2O;c(32+1h<33||32+1h-33<30-k.K){B{1e:1h,f:\'K\'}}}B{1e:0,f:1o.y}}};c(r&&8.k.s===\'1K\'){2R={x:\'M\',y:\'K\'};1p=1l=0;c(!r.3Y){k=7.1v.1K}C{k={K:r.4c,M:r.3Y}}}C{c(s[0]===31){1p=s.o();1l=s.G();k={K:0,M:0}}C c(s[0]===2e){1p=s.o();1l=s.G();k={K:s.3G(),M:s.3D()}}C c(s.2r(\'7A\')){14=7.8.k.s.W(\'14\').7B(\',\');1V(i=0;i<14.Q;i++){14[i]=1A(14[i],10)}4L=7.8.k.s.3O(\'7F\').W(\'21\');27=$(\'4U[7E="#\'+4L+\'"]:1R\').1k();k={M:1u.3H(27.M+14[0]),K:1u.3H(27.K+14[1])};4N(7.8.k.s.W(\'3M\').2F()){1Z\'7T\':1p=1u.4V(1u.5z(14[2]-14[0]));1l=1u.4V(1u.5z(14[3]-14[1]));1C;1Z\'7C\':1p=14[2]+1;1l=14[2]+1;1C;1Z\'7S\':1p=14[0];1l=14[1];1V(i=0;i<14.Q;i++){c(i%2===0){c(14[i]>1p){1p=14[i]}c(14[i]<14[0]){k.M=1u.3H(27.M+14[i])}}C{c(14[i]>1l){1l=14[i]}c(14[i]<14[1]){k.K=1u.3H(27.K+14[i])}}}1p=1p-(k.M-27.M);1l=1l-(k.K-27.K);1C}1p-=2;1l-=2}C{1p=s.47();1l=s.48();c(!7.d.h.2r(\':28\')){7.d.h.F({M:\'-81\'}).q()}c(!1U.1e.1k||7.d.h.4F()[0]===31.4X){k=s.1k()}C{k=s.k();k.K+=s.4F().3G();k.M+=s.4F().3D()}}k.M+=2R.x===\'25\'?1p:2R.x===\'1j\'?1p/2:0;k.K+=2R.y===\'26\'?1l:2R.y===\'1j\'?1l/2:0}k.M+=1U.1e.x+(1o.x===\'25\'?-2Q:1o.x===\'1j\'?-2Q/2:0);k.K+=1U.1e.y+(1o.y===\'26\'?-2P:1o.y===\'1j\'?-2P/2:0);c(7.8.e.I.E>0){c(1o.x===\'M\'){k.M-=7.8.e.I.E}C c(1o.x===\'25\'){k.M+=7.8.e.I.E}c(1o.y===\'K\'){k.K-=7.8.e.I.E}C c(1o.y===\'26\'){k.K+=7.8.e.I.E}}c(1U.1e.55){(j(){R 2W={x:0,y:0},2n={x:45.M(),y:45.K()},f=2T 2D(8.e.f.w);c(7.d.f&&f){c(2n.y.1e!==0){k.K+=2n.y.1e;f.y=2W.y=2n.y.f}c(2n.x.1e!==0){k.M+=2n.x.1e;f.x=2W.x=2n.x.f}7.1v.2u={M:2W.x===p,K:2W.y===p};c(7.d.f.W(\'1S\')!==f.1w()){44.S(7,f)}}}())}c(!7.d.22&&$.16.1d&&1A($.16.2X.2H(0),10)===6){22.S(7)}1c=7.57.S(7,r);c(1c===p){B 7}c(8.k.s!==\'1K\'&&4o===H){7.V.4j=H;7.d.h.3S().4o(k,7V,\'80\',j(){7.V.4j=p})}C{7.d.h.F(k)}7.5c.S(7,r);B 7},4d:j(1r){c(!7.V.1b||(1r&&P 1r!==\'2s\')){B p}R 1F=7.d.1y.7W().2m(7.d.f).2m(7.d.1i),2f=7.d.1t.2m(7.d.1y.2w()),h=7.d.h,1H=7.8.e.o.1H,2b=7.8.e.o.2b;c(!1r){c(P 7.8.e.o.2Z===\'2s\'){1r=7.8.e.o.2Z}C{7.d.h.F({o:\'6e\'});1F.D();h.o(1r);c($.16.1d){2f.F({2f:\'\'})}1r=7.3d().o;c(!7.8.e.o.2Z){1r=1u.2b(1u.1H(1r,2b),1H)}}}c(1r%2){1r+=1}7.d.h.o(1r);1F.q();c(7.8.e.I.E){7.d.h.1M(\'.g-2k\').1L(j(i){$(A).o(1r-(7.8.e.I.E*2))})}c($.16.1d){2f.F({2f:1});7.d.1t.o(1r);c(7.d.22){7.d.22.o(1r).G(7.3d.G)}}B 7},7Y:j(21){R f,2j,1n,w,X;c(!7.V.1b||P 21!==\'1w\'||!$.18.g.3c[21]){B p}7.8.e=4l.S(7,$.18.g.3c[21],7.8.4v.e);7.d.u.F(2G(7.8.e));c(7.8.u.U.1m!==p){7.d.U.F(2G(7.8.e.U,H))}7.d.1y.F({7U:7.8.e.I.J});c(7.8.e.f.w!==p){c($(\'<1f />\').1q(0).1E){f=7.d.h.1M(\'.g-f 1f:1R\');1n=f.1q(0).1E(\'2d\');1n.5I(0,0,3N,3N);w=f.3O(\'12[1S]:1R\').W(\'1S\');X=4t(w,7.8.e.f.N.o,7.8.e.f.N.G);4u.S(7,f,X,7.8.e.f.J||7.8.e.I.J)}C c($.16.1d){f=7.d.h.1M(\'.g-f [5E="3M"]\');f.W(\'3t\',7.8.e.f.J||7.8.e.I.J)}}c(7.8.e.I.E>0){7.d.h.1M(\'.g-2k\').F({7X:7.8.e.I.J});c($(\'<1f />\').1q(0).1E){2j=4e(7.8.e.I.E);7.d.h.1M(\'.g-1t 1f\').1L(j(){1n=$(A).1q(0).1E(\'2d\');1n.5I(0,0,3N,3N);w=$(A).3O(\'12[1S]:1R\').W(\'1S\');46.S(7,$(A),2j[w],7.8.e.I.E,7.8.e.I.J)})}C c($.16.1d){7.d.h.1M(\'.g-1t [5E="3p"]\').1L(j(){$(A).W(\'3t\',7.8.e.I.J)})}}B 7},4A:j(u,5F){R 36,37,4K;j 4J(){7.4d();c(5F!==p){c(7.8.k.17!==\'29\'){7.2h(7.d.h.2r(\':28\'),H)}c(7.8.e.f.w!==p){42.S(7)}}}c(!u){B p}36=7.54.S(7,u);c(P 36===\'1w\'){u=36}C c(36===p){B}c(7.V.1b){c($.16.1d){7.d.1y.2w().F({2f:\'7Z\'})}c(u.4r&&u.Q>0){u.5V(H).5P(7.d.u).q()}C{7.d.u.2l(u)}37=7.d.u.1M(\'4U[6O=p]\');c(37.Q>0){4K=0;37.1L(j(i){$(\'<4U 4T="\'+$(A).W(\'4T\')+\'" />\').7D(j(){c(++4K===37.Q){4J()}})})}C{4J()}}C{7.8.u.1m=u}7.4Y.S(7);B 7},5Z:j(1x,Y,2A){R 1c;j 4D(u){7.63.S(7);7.4A(u)}c(!7.V.1b){B p}1c=7.51.S(7);c(1c===p){B 7}c(2A===\'60\'){$.60(1x,Y,4D)}C{$.1q(1x,Y,4D)}B 7},5W:j(u){R 1c;c(!7.V.1b||!u){B p}1c=7.64.S(7);c(1c===p){B 7}c(7.d.1i){7.d.1i=7.d.1i.5V(H)}7.d.U.2l(u);c(7.d.1i){7.d.U.3B(7.d.1i)}7.65.S(7);B 7},2E:j(r){R 4B,3F,3y,1c;c(!7.V.1b||7.8.k.17===\'29\'){B p}4B=1A(7.d.h.F(\'z-3s\'),10);3F=7u+$(\'12.g[11^="g"]\').Q-1;c(!7.V.3Z&&4B!==3F){1c=7.5H.S(7,r);c(1c===p){B 7}$(\'12.g[11^="g"]\').5S(7.d.h).1L(j(){c($(A).g(\'T\').V.1b===H){3y=1A($(A).F(\'z-3s\'),10);c(P 3y===\'2s\'&&3y>-1){$(A).F({68:1A($(A).F(\'z-3s\'),10)-1})}$(A).g(\'T\').V.3Z=p}});7.d.h.F({68:3F});7.V.3Z=H;7.5C.S(7,r)}B 7},3X:j(38){7.V.23=38?H:p;B 7},3f:j(){R i,1c,O,4z=7.d.s.Y(\'4p\'+7.1v.W[0]);1c=7.61.S(7);c(1c===p){B 7}c(7.V.1b){7.8.q.L.s.1O(\'4C.g\',7.2h);7.8.q.L.s.1O(\'4x.g\',7.D);7.8.q.L.s.1O(7.8.q.L.r+\'.g\');7.8.D.L.s.1O(7.8.D.L.r+\'.g\');7.d.h.1O(7.8.D.L.r+\'.g\');7.d.h.1O(\'35.g\',7.2E);7.d.h.3W()}C{7.8.q.L.s.1O(7.8.q.L.r+\'.g-\'+7.11+\'-4m\')}c(P 7.d.s.Y(\'g\')===\'19\'){O=7.d.s.Y(\'g\').O;c(P O===\'19\'&&O.Q>0){1V(i=0;i<O.Q-1;i++){c(O[i].11===7.11){O.5X(i,1)}}}}$.18.g.O.5X(7.11,1);c(P O===\'19\'&&O.Q>0){7.d.s.Y(\'g\').3k=O.Q-1}C{7.d.s.73(\'g\')}c(4z){7.d.s.W(7.1v.W[0],4z)}7.62.S(7);B 7.d.s},72:j(){R q,1k;c(!7.V.1b){B p}q=(7.d.h.F(\'2a\')!==\'3a\')?p:H;c(q){7.d.h.F({3V:\'1F\'}).q()}1k=7.d.h.1k();c(q){7.d.h.F({3V:\'28\'}).D()}B 1k},3d:j(){R q,2t;c(!7.V.1b){B p}q=(!7.d.h.2r(\':28\'))?H:p;c(q){7.d.h.F({3V:\'1F\'}).q()}2t={G:7.d.h.48(),o:7.d.h.47()};c(q){7.d.h.F({3V:\'28\'}).D()}B 2t}})}$.18.g=j(8,41){R i,11,O,20,2c,1T,15,T;c(P 8===\'1w\'){c($(A).Y(\'g\')){c(8===\'T\'){B $(A).Y(\'g\').O[$(A).Y(\'g\').3k]}C c(8===\'O\'){B $(A).Y(\'g\').O}}C{B $(A)}}C{c(!8){8={}}c(P 8.u!==\'19\'||(8.u.4r&&8.u.Q>0)){8.u={1m:8.u}}c(P 8.u.U!==\'19\'){8.u.U={1m:8.u.U}}c(P 8.k!==\'19\'){8.k={w:8.k}}c(P 8.k.w!==\'19\'){8.k.w={s:8.k.w,h:8.k.w}}c(P 8.q!==\'19\'){8.q={L:8.q}}c(P 8.q.L!==\'19\'){8.q.L={r:8.q.L}}c(P 8.q.Z!==\'19\'){8.q.Z={17:8.q.Z}}c(P 8.D!==\'19\'){8.D={L:8.D}}c(P 8.D.L!==\'19\'){8.D.L={r:8.D.L}}c(P 8.D.Z!==\'19\'){8.D.Z={17:8.D.Z}}c(P 8.e!==\'19\'){8.e={21:8.e}}8.e=4i(8.e);20=$.2p(H,{},$.18.g.39,8);20.e=4l.S({8:20},20.e);20.4v=$.2p(H,{},8)}B $(A).1L(j(){R 7=$(A),u=p;c(P 8===\'1w\'){1T=8.2F();O=$(A).g(\'O\');c(P O===\'19\'){c(41===H&&1T===\'3f\'){1V(i=O.Q-1;i>-1;i--){c(\'19\'===P O[i]){O[i].3f()}}}C{c(41!==H){O=[$(A).g(\'T\')]}1V(i=0;i<O.Q;i++){c(1T===\'3f\'){O[i].3f()}C c(O[i].V.1b===H){c(1T===\'q\'){O[i].q()}C c(1T===\'D\'){O[i].D()}C c(1T===\'2E\'){O[i].2E()}C c(1T===\'3X\'){O[i].3X(H)}C c(1T===\'71\'){O[i].3X(p)}C c(1T===\'7v\'){O[i].2h()}}}}}}C{15=$.2p(H,{},20);15.D.Z.Q=20.D.Z.Q;15.q.Z.Q=20.q.Z.Q;c(15.k.3U===p){15.k.3U=$(31.4X)}c(15.k.s===p){15.k.s=$(A)}c(15.q.L.s===p){15.q.L.s=$(A)}c(15.D.L.s===p){15.D.L.s=$(A)}15.k.w.h=2T 2D(15.k.w.h);15.k.w.s=2T 2D(15.k.w.s);c(!15.u.1m.Q){$([\'U\',\'6b\']).1L(j(i,W){R 2C=7.W(W);c(2C&&2C.Q){u=[W,2C];7.Y(\'4p\'+W,2C).74(W);15.u.1m=2C.3l(/\\n/75,\'<78 />\');B p}})}11=$.18.g.O.Q;1V(i=0;i<11;i++){c(P $.18.g.O[i]===\'5i\'){11=i;1C}}2c=2T 56($(A),15,11);$.18.g.O[11]=2c;2c.1v.W=u;c(P $(A).Y(\'g\')===\'19\'&&$(A).Y(\'g\')){c(P $(A).W(\'g\')===\'5i\'){$(A).Y(\'g\').3k=$(A).Y(\'g\').O.Q}$(A).Y(\'g\').O.5h(2c)}C{$(A).Y(\'g\',{3k:0,O:[2c]})}c(15.u.5w===p&&15.q.L.r!==p&&15.q.3x!==H){15.q.L.s.1J(15.q.L.r+\'.g-\'+11+\'-4m\',{g:11},j(r){T=$.18.g.O[r.Y.g];T.8.q.L.s.1O(T.8.q.L.r+\'.g-\'+r.Y.g+\'-4m\');T.1v.1K={M:r.3Y,K:r.4c};4w.S(T);T.8.q.L.s.77(T.8.q.L.r)})}C{2c.1v.1K={M:15.q.L.s.1k().M,K:15.q.L.s.1k().K};4w.S(2c)}}})};$.18.g.O=[];$.18.g.18={W:$.18.W};$.18.W=j(W){R T=$(A).g(\'T\');B(3b.Q===1&&(/U|6b/i).1Y(W)&&T.V&&T.V.1b===H)?$(A).Y(\'4p\'+T.1v.W[0]):$.18.g.18.W.4s(A,3b)};$.18.g.39={u:{5w:p,1m:p,1x:p,Y:1z,U:{1m:p,1i:p}},k:{s:p,w:{s:\'3P\',h:\'3K\'},1e:{x:0,y:0,1K:H,55:p,3E:H,3L:H,1k:p},17:\'34\',3U:p},q:{L:{s:p,r:\'35\'},Z:{17:\'3w\',Q:5T},2V:76,1X:p,3x:p},D:{L:{s:p,r:\'4x\'},Z:{17:\'3w\',Q:5T},2V:0,3g:p},T:{5J:j(){},5f:j(){},57:j(){},5c:j(){},5n:j(){},5q:j(){},5A:j(){},4Z:j(){},54:j(){},4Y:j(){},51:j(){},63:j(){},64:j(){},65:j(){},61:j(){},62:j(){},5H:j(){},5C:j(){}}};$.18.g.3c={39:{1s:\'66\',J:\'#6Z\',2u:\'1F\',6Y:\'M\',o:{2b:0,1H:6S},2x:\'6R 6Q\',I:{o:1,E:0,J:\'#6P\'},f:{w:p,J:p,N:{o:13,G:13},2B:1},U:{1s:\'#6T\',6U:\'6X\',2x:\'6W 6V\'},1i:{79:\'7a\'},1g:{s:\'\',f:\'g-f\',U:\'g-U\',1i:\'g-1i\',u:\'g-u\',3T:\'g-3T\'}},5L:{I:{o:3,E:0,J:\'#7o\'},U:{1s:\'#7n\',J:\'#5M\'},1s:\'#7m\',J:\'#5M\',1g:{h:\'g-5L\'}},6d:{I:{o:3,E:0,J:\'#7p\'},U:{1s:\'#7q\',J:\'#6c\'},1s:\'66\',J:\'#6c\',1g:{h:\'g-6d\'}},69:{I:{o:3,E:0,J:\'#7t\'},U:{1s:\'#7s\',J:\'#67\'},1s:\'#7r\',J:\'#67\',1g:{h:\'g-69\'}},4H:{I:{o:3,E:0,J:\'#7l\'},U:{1s:\'#7k\',J:\'#6g\'},1s:\'#7e\',J:\'#6g\',1g:{h:\'g-4H\'}},52:{I:{o:3,E:0,J:\'#7d\'},U:{1s:\'#7c\',J:\'#4W\'},1s:\'#7b\',J:\'#4W\',1g:{h:\'g-52\'}},5k:{I:{o:3,E:0,J:\'#7f\'},U:{1s:\'#7g\',J:\'#7j\'},1s:\'#7i\',J:\'#7h\',1g:{h:\'g-5k\'}}}}(82));',62,499,'|||||||self|options||||if|elements|style|tip|qtip|tooltip||function|position||||width|false|show|event|target||content||corner||||this|return|else|hide|radius|css|height|true|border|color|top|when|left|size|interfaces|typeof|length|var|call|api|title|status|attr|coordinates|data|effect||id|div||coords|config|browser|type|fn|object|px|rendered|returned|msie|adjust|canvas|classes|adj|button|center|offset|targetHeight|text|context|my|targetWidth|get|newWidth|background|wrapper|Math|cache|string|url|contentWrapper|null|parseInt|1px|break|finalStyle|getContext|hidden|timers|max|class|bind|mouse|each|find|tips|unbind|ieAdjust|containers|first|rel|command|posOptions|for|inactive|solo|test|case|opts|name|bgiframe|disabled|positionAdjust|right|bottom|imagePos|visible|static|display|min|obj||window|zoom|clearTimeout|updatePosition|hideTarget|borders|betweenCorners|html|add|adapted|path|extend|margin|is|number|dimensions|overflow|styleExtend|children|padding|precedance|90|method|opacity|val|Corner|focus|toLowerCase|jQueryStyle|charAt|toggle|myOffset|afterHide|default|afterShow|atOffset|borderAdjust|elemHeight|elemWidth|at|line|new|styleObj|delay|adjusted|version|font|value|topEdge|document|pBottom|bottomEdge|absolute|mouseover|parsedContent|images|state|defaults|none|arguments|styles|getDimensions|borderTop|destroy|fixed|showTarget|borderBottom|leftEdge|current|replace|pRight|rightEdge|align|arc|solid|aria|index|fillcolor|inactiveEvents|inactiveMethod|fade|ready|elemIndex|delete|styleArray|prepend|image|scrollLeft|scroll|newIndex|scrollTop|floor|behavior|coordsize|topLeft|resize|shape|300|parent|bottomRight|newMargin|VML|stop|active|container|visiblity|remove|disable|pageX|focused|topRight|blanket|positionTip|removeAttribute|createTip|adapt|drawBorder|outerWidth|outerHeight|marginTop|ieStyle|sub|pageY|updateWidth|calculateBorders|ltr|borderCoord|paddingSize|sanitizeStyle|animated|dir|buildStyle|create|paddingCorner|animate|old|sideWidth|jquery|apply|calculateTip|drawTip|user|construct|mouseout|relative|oldattr|updateContent|curIndex|mousemove|setupContent|block|offsetParent|vertWidth|red|bottomLeft|afterLoad|loadedImages|mapName|setTimeout|switch|betweenWidth|hideMethod|vertical|unfocus|showMethod|src|img|ceil|58792E|body|onContentUpdate|onHide||beforeContentLoad|green|inline|beforeContentUpdate|screen|QTip|beforePositionUpdate|prependTo|createBorder|String|createTitle|onPositionUpdate|click|role|onRender|parents|push|undefined|mouseenter|blue|assignEvents|filter|beforeShow|slide|grow|onShow|condition|append|dequeue|queue|addClass|prerender|middle|match|abs|beforeHide|bottomright|onFocus|270|nodeName|reposition|fillStyle|beforeFocus|clearRect|beforeRender|topright|cream|A27D35|topleft|unshift|appendTo|lineTo|in|not|100|beginPath|clone|updateTitle|splice|fill|loadContent|post|beforeDestroy|onDestroy|onContentLoad|beforeTitleUpdate|onTitleUpdate|white|f3f3f3|zIndex|dark|bottomleft|alt|454545|light|auto|stroked|9C2F2F|dblclick|rightcenter|mouseup|mousedown|mouseleave|Right|Left|moveTo|filled|out|endangle|startangle|use|strict|bottomcenter|qtipSelector|leftbottom|topcenter|righttop|leave|eq|rightbottom|0px|labelledby|while|float|borderWidth|xe|leftcenter|marginLeft|search|lefttop|PI|complete|d3d3d3|9px|5px|250|e1e1e1|fontWeight|12px|7px|bold|textAlign|111|relatedTarget|enable|getPosition|removeData|removeAttr|gi|140|trigger|br|cursor|pointer|CDE6AC|b9db8c|A9DB66|F79992|ADD9ED|D0E9F5|4D9FBF|E5F6FE|5E99BD|f28279|CE6F6F|FBF7AA|F0DE7D|F9E98E|E2E2E2|f1f1f1|505050|404040|303030|15000|update|boolean|removeClass|slideUp|fadeOut|area|split|circle|load|usemap|map|slideDown|fadeIn|frameborder|iframe|preventDefault|stopPropagation|tabindex|javascript|webkit|moz|describedby|alpha|poly|rect|borderColor|200|siblings|backgroundColor|updateStyle|normal|swing|10000000em|jQuery'.split('|'),0,{}))
--- a/web/hdabo/static/hdabo/js/jquery.tablednd_0_5.js	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,382 +0,0 @@
-/**
- * TableDnD plug-in for JQuery, allows you to drag and drop table rows
- * You can set up various options to control how the system will work
- * Copyright (c) Denis Howlett <denish@isocra.com>
- * Licensed like jQuery, see http://docs.jquery.com/License.
- *
- * Configuration options:
- * 
- * onDragStyle
- *     This is the style that is assigned to the row during drag. There are limitations to the styles that can be
- *     associated with a row (such as you can't assign a border--well you can, but it won't be
- *     displayed). (So instead consider using onDragClass.) The CSS style to apply is specified as
- *     a map (as used in the jQuery css(...) function).
- * onDropStyle
- *     This is the style that is assigned to the row when it is dropped. As for onDragStyle, there are limitations
- *     to what you can do. Also this replaces the original style, so again consider using onDragClass which
- *     is simply added and then removed on drop.
- * onDragClass
- *     This class is added for the duration of the drag and then removed when the row is dropped. It is more
- *     flexible than using onDragStyle since it can be inherited by the row cells and other content. The default
- *     is class is tDnD_whileDrag. So to use the default, simply customise this CSS class in your
- *     stylesheet.
- * onDrop
- *     Pass a function that will be called when the row is dropped. The function takes 2 parameters: the table
- *     and the row that was dropped. You can work out the new order of the rows by using
- *     table.rows.
- * onDragStart
- *     Pass a function that will be called when the user starts dragging. The function takes 2 parameters: the
- *     table and the row which the user has started to drag.
- * onAllowDrop
- *     Pass a function that will be called as a row is over another row. If the function returns true, allow 
- *     dropping on that row, otherwise not. The function takes 2 parameters: the dragged row and the row under
- *     the cursor. It returns a boolean: true allows the drop, false doesn't allow it.
- * scrollAmount
- *     This is the number of pixels to scroll if the user moves the mouse cursor to the top or bottom of the
- *     window. The page should automatically scroll up or down as appropriate (tested in IE6, IE7, Safari, FF2,
- *     FF3 beta
- * dragHandle
- *     This is the name of a class that you assign to one or more cells in each row that is draggable. If you
- *     specify this class, then you are responsible for setting cursor: move in the CSS and only these cells
- *     will have the drag behaviour. If you do not specify a dragHandle, then you get the old behaviour where
- *     the whole row is draggable.
- * 
- * Other ways to control behaviour:
- *
- * Add class="nodrop" to any rows for which you don't want to allow dropping, and class="nodrag" to any rows
- * that you don't want to be draggable.
- *
- * Inside the onDrop method you can also call $.tableDnD.serialize() this returns a string of the form
- * <tableID>[]=<rowID1>&<tableID>[]=<rowID2> so that you can send this back to the server. The table must have
- * an ID as must all the rows.
- *
- * Other methods:
- *
- * $("...").tableDnDUpdate() 
- * Will update all the matching tables, that is it will reapply the mousedown method to the rows (or handle cells).
- * This is useful if you have updated the table rows using Ajax and you want to make the table draggable again.
- * The table maintains the original configuration (so you don't have to specify it again).
- *
- * $("...").tableDnDSerialize()
- * Will serialize and return the serialized string as above, but for each of the matching tables--so it can be
- * called from anywhere and isn't dependent on the currentTable being set up correctly before calling
- *
- * Known problems:
- * - Auto-scoll has some problems with IE7  (it scrolls even when it shouldn't), work-around: set scrollAmount to 0
- * 
- * Version 0.2: 2008-02-20 First public version
- * Version 0.3: 2008-02-07 Added onDragStart option
- *                         Made the scroll amount configurable (default is 5 as before)
- * Version 0.4: 2008-03-15 Changed the noDrag/noDrop attributes to nodrag/nodrop classes
- *                         Added onAllowDrop to control dropping
- *                         Fixed a bug which meant that you couldn't set the scroll amount in both directions
- *                         Added serialize method
- * Version 0.5: 2008-05-16 Changed so that if you specify a dragHandle class it doesn't make the whole row
- *                         draggable
- *                         Improved the serialize method to use a default (and settable) regular expression.
- *                         Added tableDnDupate() and tableDnDSerialize() to be called when you are outside the table
- */
-jQuery.tableDnD = {
-    /** Keep hold of the current table being dragged */
-    currentTable : null,
-    /** Keep hold of the current drag object if any */
-    dragObject: null,
-    /** The current mouse offset */
-    mouseOffset: null,
-    /** Remember the old value of Y so that we don't do too much processing */
-    oldY: 0,
-
-    /** Actually build the structure */
-    build: function(options) {
-        // Set up the defaults if any
-
-        this.each(function() {
-            // This is bound to each matching table, set up the defaults and override with user options
-            this.tableDnDConfig = jQuery.extend({
-                onDragStyle: null,
-                onDropStyle: null,
-				// Add in the default class for whileDragging
-				onDragClass: "tDnD_whileDrag",
-                onDrop: null,
-                onDragStart: null,
-                scrollAmount: 5,
-				serializeRegexp: /[^\-]*$/, // The regular expression to use to trim row IDs
-				serializeParamName: null, // If you want to specify another parameter name instead of the table ID
-                dragHandle: null // If you give the name of a class here, then only Cells with this class will be draggable
-            }, options || {});
-            // Now make the rows draggable
-            jQuery.tableDnD.makeDraggable(this);
-        });
-
-        // Now we need to capture the mouse up and mouse move event
-        // We can use bind so that we don't interfere with other event handlers
-        jQuery(document)
-            .bind('mousemove', jQuery.tableDnD.mousemove)
-            .bind('mouseup', jQuery.tableDnD.mouseup);
-
-        // Don't break the chain
-        return this;
-    },
-
-    /** This function makes all the rows on the table draggable apart from those marked as "NoDrag" */
-    makeDraggable: function(table) {
-        var config = table.tableDnDConfig;
-		if (table.tableDnDConfig.dragHandle) {
-			// We only need to add the event to the specified cells
-			var cells = jQuery("td."+table.tableDnDConfig.dragHandle, table);
-			cells.each(function() {
-				// The cell is bound to "this"
-                jQuery(this).mousedown(function(ev) {
-                    jQuery.tableDnD.dragObject = this.parentNode;
-                    jQuery.tableDnD.currentTable = table;
-                    jQuery.tableDnD.mouseOffset = jQuery.tableDnD.getMouseOffset(this, ev);
-                    if (config.onDragStart) {
-                        // Call the onDrop method if there is one
-                        config.onDragStart(table, this);
-                    }
-                    return false;
-                });
-			})
-		} else {
-			// For backwards compatibility, we add the event to the whole row
-	        var rows = jQuery("tr", table); // get all the rows as a wrapped set
-	        rows.each(function() {
-				// Iterate through each row, the row is bound to "this"
-				var row = jQuery(this);
-				if (! row.hasClass("nodrag")) {
-	                row.mousedown(function(ev) {
-	                    if (ev.target.tagName == "TD") {
-	                        jQuery.tableDnD.dragObject = this;
-	                        jQuery.tableDnD.currentTable = table;
-	                        jQuery.tableDnD.mouseOffset = jQuery.tableDnD.getMouseOffset(this, ev);
-	                        if (config.onDragStart) {
-	                            // Call the onDrop method if there is one
-	                            config.onDragStart(table, this);
-	                        }
-	                        return false;
-	                    }
-	                }).css("cursor", "move"); // Store the tableDnD object
-				}
-			});
-		}
-	},
-
-	updateTables: function() {
-		this.each(function() {
-			// this is now bound to each matching table
-			if (this.tableDnDConfig) {
-				jQuery.tableDnD.makeDraggable(this);
-			}
-		})
-	},
-
-    /** Get the mouse coordinates from the event (allowing for browser differences) */
-    mouseCoords: function(ev){
-        if(ev.pageX || ev.pageY){
-            return {x:ev.pageX, y:ev.pageY};
-        }
-        return {
-            x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
-            y:ev.clientY + document.body.scrollTop  - document.body.clientTop
-        };
-    },
-
-    /** Given a target element and a mouse event, get the mouse offset from that element.
-        To do this we need the element's position and the mouse position */
-    getMouseOffset: function(target, ev) {
-        ev = ev || window.event;
-
-        var docPos    = this.getPosition(target);
-        var mousePos  = this.mouseCoords(ev);
-        return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
-    },
-
-    /** Get the position of an element by going up the DOM tree and adding up all the offsets */
-    getPosition: function(e){
-        var left = 0;
-        var top  = 0;
-        /** Safari fix -- thanks to Luis Chato for this! */
-        if (e.offsetHeight == 0) {
-            /** Safari 2 doesn't correctly grab the offsetTop of a table row
-            this is detailed here:
-            http://jacob.peargrove.com/blog/2006/technical/table-row-offsettop-bug-in-safari/
-            the solution is likewise noted there, grab the offset of a table cell in the row - the firstChild.
-            note that firefox will return a text node as a first child, so designing a more thorough
-            solution may need to take that into account, for now this seems to work in firefox, safari, ie */
-            e = e.firstChild; // a table cell
-        }
-
-        while (e.offsetParent){
-            left += e.offsetLeft;
-            top  += e.offsetTop;
-            e     = e.offsetParent;
-        }
-
-        left += e.offsetLeft;
-        top  += e.offsetTop;
-
-        return {x:left, y:top};
-    },
-
-    mousemove: function(ev) {
-        if (jQuery.tableDnD.dragObject == null) {
-            return;
-        }
-
-        var dragObj = jQuery(jQuery.tableDnD.dragObject);
-        var config = jQuery.tableDnD.currentTable.tableDnDConfig;
-        var mousePos = jQuery.tableDnD.mouseCoords(ev);
-        var y = mousePos.y - jQuery.tableDnD.mouseOffset.y;
-        //auto scroll the window
-	    var yOffset = window.pageYOffset;
-	 	if (document.all) {
-	        // Windows version
-	        //yOffset=document.body.scrollTop;
-	        if (typeof document.compatMode != 'undefined' &&
-	             document.compatMode != 'BackCompat') {
-	           yOffset = document.documentElement.scrollTop;
-	        }
-	        else if (typeof document.body != 'undefined') {
-	           yOffset=document.body.scrollTop;
-	        }
-
-	    }
-		    
-		if (mousePos.y-yOffset < config.scrollAmount) {
-	    	window.scrollBy(0, -config.scrollAmount);
-	    } else {
-            var windowHeight = window.innerHeight ? window.innerHeight
-                    : document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight;
-            if (windowHeight-(mousePos.y-yOffset) < config.scrollAmount) {
-                window.scrollBy(0, config.scrollAmount);
-            }
-        }
-
-
-        if (y != jQuery.tableDnD.oldY) {
-            // work out if we're going up or down...
-            var movingDown = y > jQuery.tableDnD.oldY;
-            // update the old value
-            jQuery.tableDnD.oldY = y;
-            // update the style to show we're dragging
-			if (config.onDragClass) {
-				dragObj.addClass(config.onDragClass);
-			} else {
-	            dragObj.css(config.onDragStyle);
-			}
-            // If we're over a row then move the dragged row to there so that the user sees the
-            // effect dynamically
-            var currentRow = jQuery.tableDnD.findDropTargetRow(dragObj, y);
-            if (currentRow) {
-                // TODO worry about what happens when there are multiple TBODIES
-                if (movingDown && jQuery.tableDnD.dragObject != currentRow) {
-                    jQuery.tableDnD.dragObject.parentNode.insertBefore(jQuery.tableDnD.dragObject, currentRow.nextSibling);
-                } else if (! movingDown && jQuery.tableDnD.dragObject != currentRow) {
-                    jQuery.tableDnD.dragObject.parentNode.insertBefore(jQuery.tableDnD.dragObject, currentRow);
-                }
-            }
-        }
-
-        return false;
-    },
-
-    /** We're only worried about the y position really, because we can only move rows up and down */
-    findDropTargetRow: function(draggedRow, y) {
-        var rows = jQuery.tableDnD.currentTable.rows;
-        for (var i=0; i<rows.length; i++) {
-            var row = rows[i];
-            var rowY    = this.getPosition(row).y;
-            var rowHeight = parseInt(row.offsetHeight)/2;
-            if (row.offsetHeight == 0) {
-                rowY = this.getPosition(row.firstChild).y;
-                rowHeight = parseInt(row.firstChild.offsetHeight)/2;
-            }
-            // Because we always have to insert before, we need to offset the height a bit
-            if ((y > rowY - rowHeight) && (y < (rowY + rowHeight))) {
-                // that's the row we're over
-				// If it's the same as the current row, ignore it
-				if (row == draggedRow) {return null;}
-                var config = jQuery.tableDnD.currentTable.tableDnDConfig;
-                if (config.onAllowDrop) {
-                    if (config.onAllowDrop(draggedRow, row)) {
-                        return row;
-                    } else {
-                        return null;
-                    }
-                } else {
-					// If a row has nodrop class, then don't allow dropping (inspired by John Tarr and Famic)
-                    var nodrop = jQuery(row).hasClass("nodrop");
-                    if (! nodrop) {
-                        return row;
-                    } else {
-                        return null;
-                    }
-                }
-                return row;
-            }
-        }
-        return null;
-    },
-
-    mouseup: function(e) {
-        if (jQuery.tableDnD.currentTable && jQuery.tableDnD.dragObject) {
-            var droppedRow = jQuery.tableDnD.dragObject;
-            var config = jQuery.tableDnD.currentTable.tableDnDConfig;
-            // If we have a dragObject, then we need to release it,
-            // The row will already have been moved to the right place so we just reset stuff
-			if (config.onDragClass) {
-	            jQuery(droppedRow).removeClass(config.onDragClass);
-			} else {
-	            jQuery(droppedRow).css(config.onDropStyle);
-			}
-            jQuery.tableDnD.dragObject   = null;
-            if (config.onDrop) {
-                // Call the onDrop method if there is one
-                config.onDrop(jQuery.tableDnD.currentTable, droppedRow);
-            }
-            jQuery.tableDnD.currentTable = null; // let go of the table too
-        }
-    },
-
-    serialize: function() {
-        if (jQuery.tableDnD.currentTable) {
-            return jQuery.tableDnD.serializeTable(jQuery.tableDnD.currentTable);
-        } else {
-            return "Error: No Table id set, you need to set an id on your table and every row";
-        }
-    },
-
-	serializeTable: function(table) {
-        var result = "";
-        var tableId = table.id;
-        var rows = table.rows;
-        for (var i=0; i<rows.length; i++) {
-            if (result.length > 0) result += "&";
-            var rowId = rows[i].id;
-            if (rowId && rowId && table.tableDnDConfig && table.tableDnDConfig.serializeRegexp) {
-                rowId = rowId.match(table.tableDnDConfig.serializeRegexp)[0];
-            }
-
-            result += tableId + '[]=' + rowId;
-        }
-        return result;
-	},
-
-	serializeTables: function() {
-        var result = "";
-        this.each(function() {
-			// this is now bound to each matching table
-			result += jQuery.tableDnD.serializeTable(this);
-		});
-        return result;
-    }
-
-}
-
-jQuery.fn.extend(
-	{
-		tableDnD : jQuery.tableDnD.build,
-		tableDnDUpdate : jQuery.tableDnD.updateTables,
-		tableDnDSerialize: jQuery.tableDnD.serializeTables
-	}
-);
\ No newline at end of file
--- a/web/hdabo/static/hdabo/js/jquery.textchange.min.js	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-/*!
- * jQuery TextChange Plugin
- * http://www.zurb.com/playground/jquery-text-change-custom-event
- *
- * Copyright 2010, ZURB
- * Released under the MIT License
- */
- (function(a){a.event.special.textchange={setup:function(){a(this).data("lastValue",this.contentEditable==="true"?a(this).html():a(this).val());a(this).bind("keyup.textchange",a.event.special.textchange.handler);a(this).bind("cut.textchange paste.textchange input.textchange",a.event.special.textchange.delayedHandler)},teardown:function(){a(this).unbind(".textchange")},handler:function(){a.event.special.textchange.triggerIfChanged(a(this))},delayedHandler:function(){var b=a(this);setTimeout(function(){a.event.special.textchange.triggerIfChanged(b)},
- 25)},triggerIfChanged:function(b){var c=b[0].contentEditable==="true"?b.html():b.val();if(c!==b.data("lastValue")){b.trigger("textchange",b.data("lastValue"));b.data("lastValue",c)}}};a.event.special.hastext={setup:function(){a(this).bind("textchange",a.event.special.hastext.handler)},teardown:function(){a(this).unbind("textchange",a.event.special.hastext.handler)},handler:function(b,c){c===""&&c!==a(this).val()&&a(this).trigger("hastext")}};a.event.special.notext={setup:function(){a(this).bind("textchange",
- a.event.special.notext.handler)},teardown:function(){a(this).unbind("textchange",a.event.special.notext.handler)},handler:function(b,c){a(this).val()===""&&a(this).val()!==c&&a(this).trigger("notext")}}})(jQuery);
\ No newline at end of file
--- a/web/hdabo/static/hdabo/js/jquery.tools.min.js	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,116 +0,0 @@
-/*
- * jQuery Tools 1.2.4 - The missing UI library for the Web
- * 
- * [toolbox.flashembed, toolbox.history, toolbox.expose, toolbox.mousewheel, tabs, tabs.slideshow, tooltip, tooltip.slide, tooltip.dynamic, scrollable, scrollable.autoscroll, scrollable.navigator, overlay, overlay.apple, dateinput, rangeinput, validator]
- * 
- * NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE.
- * 
- * http://flowplayer.org/tools/
- * 
- * jquery.event.wheel.js - rev 1 
- * Copyright (c) 2008, Three Dub Media (http://threedubmedia.com)
- * Liscensed under the MIT License (MIT-LICENSE.txt)
- * http://www.opensource.org/licenses/mit-license.php
- * Created: 2008-07-01 | Updated: 2008-07-14
- * 
- * -----
- * 
- * File generated: Wed Aug 18 09:10:10 GMT 2010
- */
-(function(){function f(a,b){if(b)for(var c in b)if(b.hasOwnProperty(c))a[c]=b[c];return a}function l(a,b){var c=[];for(var d in a)if(a.hasOwnProperty(d))c[d]=b(a[d]);return c}function m(a,b,c){if(e.isSupported(b.version))a.innerHTML=e.getHTML(b,c);else if(b.expressInstall&&e.isSupported([6,65]))a.innerHTML=e.getHTML(f(b,{src:b.expressInstall}),{MMredirectURL:location.href,MMplayerType:"PlugIn",MMdoctitle:document.title});else{if(!a.innerHTML.replace(/\s/g,"")){a.innerHTML="<h2>Flash version "+b.version+
-" or greater is required</h2><h3>"+(g[0]>0?"Your version is "+g:"You have no flash plugin installed")+"</h3>"+(a.tagName=="A"?"<p>Click here to download latest version</p>":"<p>Download latest version from <a href='"+k+"'>here</a></p>");if(a.tagName=="A")a.onclick=function(){location.href=k}}if(b.onFail){var d=b.onFail.call(this);if(typeof d=="string")a.innerHTML=d}}if(i)window[b.id]=document.getElementById(b.id);f(this,{getRoot:function(){return a},getOptions:function(){return b},getConf:function(){return c},
-getApi:function(){return a.firstChild}})}var i=document.all,k="http://www.adobe.com/go/getflashplayer",n=typeof jQuery=="function",o=/(\d+)[^\d]+(\d+)[^\d]*(\d*)/,j={width:"100%",height:"100%",id:"_"+(""+Math.random()).slice(9),allowfullscreen:true,allowscriptaccess:"always",quality:"high",version:[3,0],onFail:null,expressInstall:null,w3c:false,cachebusting:false};window.attachEvent&&window.attachEvent("onbeforeunload",function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){}});
-window.flashembed=function(a,b,c){if(typeof a=="string")a=document.getElementById(a.replace("#",""));if(a){if(typeof b=="string")b={src:b};return new m(a,f(f({},j),b),c)}};var e=f(window.flashembed,{conf:j,getVersion:function(){var a,b;try{b=navigator.plugins["Shockwave Flash"].description.slice(16)}catch(c){try{b=(a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"))&&a.GetVariable("$version")}catch(d){try{b=(a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"))&&a.GetVariable("$version")}catch(h){}}}return(b=
-o.exec(b))?[b[1],b[3]]:[0,0]},asString:function(a){if(a===null||a===undefined)return null;var b=typeof a;if(b=="object"&&a.push)b="array";switch(b){case "string":a=a.replace(new RegExp('(["\\\\])',"g"),"\\$1");a=a.replace(/^\s?(\d+\.?\d+)%/,"$1pct");return'"'+a+'"';case "array":return"["+l(a,function(d){return e.asString(d)}).join(",")+"]";case "function":return'"function()"';case "object":b=[];for(var c in a)a.hasOwnProperty(c)&&b.push('"'+c+'":'+e.asString(a[c]));return"{"+b.join(",")+"}"}return String(a).replace(/\s/g,
-" ").replace(/\'/g,'"')},getHTML:function(a,b){a=f({},a);var c='<object width="'+a.width+'" height="'+a.height+'" id="'+a.id+'" name="'+a.id+'"';if(a.cachebusting)a.src+=(a.src.indexOf("?")!=-1?"&":"?")+Math.random();c+=a.w3c||!i?' data="'+a.src+'" type="application/x-shockwave-flash"':' classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"';c+=">";if(a.w3c||i)c+='<param name="movie" value="'+a.src+'" />';a.width=a.height=a.id=a.w3c=a.src=null;a.onFail=a.version=a.expressInstall=null;for(var d in a)if(a[d])c+=
-'<param name="'+d+'" value="'+a[d]+'" />';a="";if(b){for(var h in b)if(b[h]){d=b[h];a+=h+"="+(/function|object/.test(typeof d)?e.asString(d):d)+"&"}a=a.slice(0,-1);c+='<param name="flashvars" value=\''+a+"' />"}c+="</object>";return c},isSupported:function(a){return g[0]>a[0]||g[0]==a[0]&&g[1]>=a[1]}}),g=e.getVersion();if(n){jQuery.tools=jQuery.tools||{version:"1.2.4"};jQuery.tools.flashembed={conf:j};jQuery.fn.flashembed=function(a,b){return this.each(function(){$(this).data("flashembed",flashembed(this,
-a,b))})}}})();
-(function(b){function h(c){if(c){var a=d.contentWindow.document;a.open().close();a.location.hash=c}}var g,d,f,i;b.tools=b.tools||{version:"1.2.4"};b.tools.history={init:function(c){if(!i){if(b.browser.msie&&b.browser.version<"8"){if(!d){d=b("<iframe/>").attr("src","javascript:false;").hide().get(0);b("body").append(d);setInterval(function(){var a=d.contentWindow.document;a=a.location.hash;g!==a&&b.event.trigger("hash",a)},100);h(location.hash||"#")}}else setInterval(function(){var a=location.hash;
-a!==g&&b.event.trigger("hash",a)},100);f=!f?c:f.add(c);c.click(function(a){var e=b(this).attr("href");d&&h(e);if(e.slice(0,1)!="#"){location.href="#"+e;return a.preventDefault()}});i=true}}};b(window).bind("hash",function(c,a){a?f.filter(function(){var e=b(this).attr("href");return e==a||e==a.replace("#","")}).trigger("history",[a]):f.eq(0).trigger("history",[a]);g=a;window.location.hash=g});b.fn.history=function(c){b.tools.history.init(this);return this.bind("history",c)}})(jQuery);
-(function(b){function k(){if(b.browser.msie){var a=b(document).height(),d=b(window).height();return[window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,a-d<20?d:a]}return[b(document).width(),b(document).height()]}function h(a){if(a)return a.call(b.mask)}b.tools=b.tools||{version:"1.2.4"};var l;l=b.tools.expose={conf:{maskId:"exposeMask",loadSpeed:"slow",closeSpeed:"fast",closeOnClick:true,closeOnEsc:true,zIndex:9998,opacity:0.8,startOpacity:0,color:"#fff",onLoad:null,
-onClose:null}};var c,i,e,g,j;b.mask={load:function(a,d){if(e)return this;if(typeof a=="string")a={color:a};a=a||g;g=a=b.extend(b.extend({},l.conf),a);c=b("#"+a.maskId);if(!c.length){c=b("<div/>").attr("id",a.maskId);b("body").append(c)}var m=k();c.css({position:"absolute",top:0,left:0,width:m[0],height:m[1],display:"none",opacity:a.startOpacity,zIndex:a.zIndex});a.color&&c.css("backgroundColor",a.color);if(h(a.onBeforeLoad)===false)return this;a.closeOnEsc&&b(document).bind("keydown.mask",function(f){f.keyCode==
-27&&b.mask.close(f)});a.closeOnClick&&c.bind("click.mask",function(f){b.mask.close(f)});b(window).bind("resize.mask",function(){b.mask.fit()});if(d&&d.length){j=d.eq(0).css("zIndex");b.each(d,function(){var f=b(this);/relative|absolute|fixed/i.test(f.css("position"))||f.css("position","relative")});i=d.css({zIndex:Math.max(a.zIndex+1,j=="auto"?0:j)})}c.css({display:"block"}).fadeTo(a.loadSpeed,a.opacity,function(){b.mask.fit();h(a.onLoad);e="full"});e=true;return this},close:function(){if(e){if(h(g.onBeforeClose)===
-false)return this;c.fadeOut(g.closeSpeed,function(){h(g.onClose);i&&i.css({zIndex:j});e=false});b(document).unbind("keydown.mask");c.unbind("click.mask");b(window).unbind("resize.mask")}return this},fit:function(){if(e){var a=k();c.css({width:a[0],height:a[1]})}},getMask:function(){return c},isLoaded:function(a){return a?e=="full":e},getConf:function(){return g},getExposed:function(){return i}};b.fn.mask=function(a){b.mask.load(a);return this};b.fn.expose=function(a){b.mask.load(a,this);return this}})(jQuery);
-(function(b){function c(a){switch(a.type){case "mousemove":return b.extend(a.data,{clientX:a.clientX,clientY:a.clientY,pageX:a.pageX,pageY:a.pageY});case "DOMMouseScroll":b.extend(a,a.data);a.delta=-a.detail/3;break;case "mousewheel":a.delta=a.wheelDelta/120;break}a.type="wheel";return b.event.handle.call(this,a,a.delta)}b.fn.mousewheel=function(a){return this[a?"bind":"trigger"]("wheel",a)};b.event.special.wheel={setup:function(){b.event.add(this,d,c,{})},teardown:function(){b.event.remove(this,
-d,c)}};var d=!b.browser.mozilla?"mousewheel":"DOMMouseScroll"+(b.browser.version<"1.9"?" mousemove":"")})(jQuery);
-(function(c){function p(d,b,a){var e=this,l=d.add(this),h=d.find(a.tabs),i=b.jquery?b:d.children(b),j;h.length||(h=d.children());i.length||(i=d.parent().find(b));i.length||(i=c(b));c.extend(this,{click:function(f,g){var k=h.eq(f);if(typeof f=="string"&&f.replace("#","")){k=h.filter("[href*="+f.replace("#","")+"]");f=Math.max(h.index(k),0)}if(a.rotate){var n=h.length-1;if(f<0)return e.click(n,g);if(f>n)return e.click(0,g)}if(!k.length){if(j>=0)return e;f=a.initialIndex;k=h.eq(f)}if(f===j)return e;
-g=g||c.Event();g.type="onBeforeClick";l.trigger(g,[f]);if(!g.isDefaultPrevented()){o[a.effect].call(e,f,function(){g.type="onClick";l.trigger(g,[f])});j=f;h.removeClass(a.current);k.addClass(a.current);return e}},getConf:function(){return a},getTabs:function(){return h},getPanes:function(){return i},getCurrentPane:function(){return i.eq(j)},getCurrentTab:function(){return h.eq(j)},getIndex:function(){return j},next:function(){return e.click(j+1)},prev:function(){return e.click(j-1)},destroy:function(){h.unbind(a.event).removeClass(a.current);
-i.find("a[href^=#]").unbind("click.T");return e}});c.each("onBeforeClick,onClick".split(","),function(f,g){c.isFunction(a[g])&&c(e).bind(g,a[g]);e[g]=function(k){k&&c(e).bind(g,k);return e}});if(a.history&&c.fn.history){c.tools.history.init(h);a.event="history"}h.each(function(f){c(this).bind(a.event,function(g){e.click(f,g);return g.preventDefault()})});i.find("a[href^=#]").bind("click.T",function(f){e.click(c(this).attr("href"),f)});if(location.hash&&a.tabs==="a"&&d.find(a.tabs+location.hash).length)e.click(location.hash);
-else if(a.initialIndex===0||a.initialIndex>0)e.click(a.initialIndex)}c.tools=c.tools||{version:"1.2.4"};c.tools.tabs={conf:{tabs:"a",current:"current",onBeforeClick:null,onClick:null,effect:"default",initialIndex:0,event:"click",rotate:false,history:false},addEffect:function(d,b){o[d]=b}};var o={"default":function(d,b){this.getPanes().hide().eq(d).show();b.call()},fade:function(d,b){var a=this.getConf(),e=a.fadeOutSpeed,l=this.getPanes();e?l.fadeOut(e):l.hide();l.eq(d).fadeIn(a.fadeInSpeed,b)},slide:function(d,
-b){this.getPanes().slideUp(200);this.getPanes().eq(d).slideDown(400,b)},ajax:function(d,b){this.getPanes().eq(0).load(this.getTabs().eq(d).attr("href"),b)}},m;c.tools.tabs.addEffect("horizontal",function(d,b){m||(m=this.getPanes().eq(0).width());this.getCurrentPane().animate({width:0},function(){c(this).hide()});this.getPanes().eq(d).animate({width:m},function(){c(this).show();b.call()})});c.fn.tabs=function(d,b){var a=this.data("tabs");if(a){a.destroy();this.removeData("tabs")}if(c.isFunction(b))b=
-{onBeforeClick:b};b=c.extend({},c.tools.tabs.conf,b);this.each(function(){a=new p(c(this),d,b);c(this).data("tabs",a)});return b.api?a:this}})(jQuery);
-(function(d){function r(g,a){function p(f){var e=d(f);return e.length<2?e:g.parent().find(f)}var c=this,j=g.add(this),b=g.data("tabs"),h,m,k,n=false,o=p(a.next).click(function(){b.next()}),l=p(a.prev).click(function(){b.prev()});d.extend(c,{getTabs:function(){return b},getConf:function(){return a},play:function(){if(!h){var f=d.Event("onBeforePlay");j.trigger(f);if(f.isDefaultPrevented())return c;n=false;h=setInterval(b.next,a.interval);j.trigger("onPlay");b.next()}},pause:function(){if(!h&&!k)return c;
-var f=d.Event("onBeforePause");j.trigger(f);if(f.isDefaultPrevented())return c;h=clearInterval(h);k=clearInterval(k);j.trigger("onPause")},stop:function(){c.pause();n=true}});d.each("onBeforePlay,onPlay,onBeforePause,onPause".split(","),function(f,e){d.isFunction(a[e])&&c.bind(e,a[e]);c[e]=function(s){return c.bind(e,s)}});if(a.autopause){var t=b.getTabs().add(o).add(l).add(b.getPanes());t.hover(function(){c.pause();m=clearInterval(m)},function(){n||(m=setTimeout(c.play,a.interval))})}if(a.autoplay)k=
-setTimeout(c.play,a.interval);else c.stop();a.clickable&&b.getPanes().click(function(){b.next()});if(!b.getConf().rotate){var i=a.disabledClass;b.getIndex()||l.addClass(i);b.onBeforeClick(function(f,e){if(e){l.removeClass(i);e==b.getTabs().length-1?o.addClass(i):o.removeClass(i)}else l.addClass(i)})}}var q;q=d.tools.tabs.slideshow={conf:{next:".forward",prev:".backward",disabledClass:"disabled",autoplay:false,autopause:true,interval:3E3,clickable:true,api:false}};d.fn.slideshow=function(g){var a=
-this.data("slideshow");if(a)return a;g=d.extend({},q.conf,g);this.each(function(){a=new r(d(this),g);d(this).data("slideshow",a)});return g.api?a:this}})(jQuery);
-(function(f){function p(a,b,c){var h=c.relative?a.position().top:a.offset().top,e=c.relative?a.position().left:a.offset().left,i=c.position[0];h-=b.outerHeight()-c.offset[0];e+=a.outerWidth()+c.offset[1];var j=b.outerHeight()+a.outerHeight();if(i=="center")h+=j/2;if(i=="bottom")h+=j;i=c.position[1];a=b.outerWidth()+a.outerWidth();if(i=="center")e-=a/2;if(i=="left")e-=a;return{top:h,left:e}}function u(a,b){var c=this,h=a.add(c),e,i=0,j=0,m=a.attr("title"),q=a.attr("data-tooltip"),r=n[b.effect],l,s=
-a.is(":input"),v=s&&a.is(":checkbox, :radio, select, :button, :submit"),t=a.attr("type"),k=b.events[t]||b.events[s?v?"widget":"input":"def"];if(!r)throw'Nonexistent effect "'+b.effect+'"';k=k.split(/,\s*/);if(k.length!=2)throw"Tooltip: bad events configuration for "+t;a.bind(k[0],function(d){clearTimeout(i);if(b.predelay)j=setTimeout(function(){c.show(d)},b.predelay);else c.show(d)}).bind(k[1],function(d){clearTimeout(j);if(b.delay)i=setTimeout(function(){c.hide(d)},b.delay);else c.hide(d)});if(m&&
-b.cancelDefault){a.removeAttr("title");a.data("title",m)}f.extend(c,{show:function(d){if(!e){if(q)e=f(q);else if(m)e=f(b.layout).addClass(b.tipClass).appendTo(document.body).hide().append(m);else if(b.tip)e=f(b.tip).eq(0);else{e=a.next();e.length||(e=a.parent().next())}if(!e.length)throw"Cannot find tooltip for "+a;}if(c.isShown())return c;e.stop(true,true);var g=p(a,e,b);d=d||f.Event();d.type="onBeforeShow";h.trigger(d,[g]);if(d.isDefaultPrevented())return c;g=p(a,e,b);e.css({position:"absolute",
-top:g.top,left:g.left});l=true;r[0].call(c,function(){d.type="onShow";l="full";h.trigger(d)});g=b.events.tooltip.split(/,\s*/);e.bind(g[0],function(){clearTimeout(i);clearTimeout(j)});g[1]&&!a.is("input:not(:checkbox, :radio), textarea")&&e.bind(g[1],function(o){o.relatedTarget!=a[0]&&a.trigger(k[1].split(" ")[0])});return c},hide:function(d){if(!e||!c.isShown())return c;d=d||f.Event();d.type="onBeforeHide";h.trigger(d);if(!d.isDefaultPrevented()){l=false;n[b.effect][1].call(c,function(){d.type="onHide";
-h.trigger(d)});return c}},isShown:function(d){return d?l=="full":l},getConf:function(){return b},getTip:function(){return e},getTrigger:function(){return a}});f.each("onHide,onBeforeShow,onShow,onBeforeHide".split(","),function(d,g){f.isFunction(b[g])&&f(c).bind(g,b[g]);c[g]=function(o){f(c).bind(g,o);return c}})}f.tools=f.tools||{version:"1.2.4"};f.tools.tooltip={conf:{effect:"toggle",fadeOutSpeed:"fast",predelay:0,delay:30,opacity:1,tip:0,position:["top","center"],offset:[0,0],relative:false,cancelDefault:true,
-events:{def:"mouseenter,mouseleave",input:"focus,blur",widget:"focus mouseenter,blur mouseleave",tooltip:"mouseenter,mouseleave"},layout:"<div/>",tipClass:"tooltip"},addEffect:function(a,b,c){n[a]=[b,c]}};var n={toggle:[function(a){var b=this.getConf(),c=this.getTip();b=b.opacity;b<1&&c.css({opacity:b});c.show();a.call()},function(a){this.getTip().hide();a.call()}],fade:[function(a){var b=this.getConf();this.getTip().fadeTo(b.fadeInSpeed,b.opacity,a)},function(a){this.getTip().fadeOut(this.getConf().fadeOutSpeed,
-a)}]};f.fn.tooltip=function(a){var b=this.data("tooltip");if(b)return b;a=f.extend(true,{},f.tools.tooltip.conf,a);if(typeof a.position=="string")a.position=a.position.split(/,?\s/);this.each(function(){b=new u(f(this),a);f(this).data("tooltip",b)});return a.api?b:this}})(jQuery);
-(function(d){var i=d.tools.tooltip;d.extend(i.conf,{direction:"up",bounce:false,slideOffset:10,slideInSpeed:200,slideOutSpeed:200,slideFade:!d.browser.msie});var e={up:["-","top"],down:["+","top"],left:["-","left"],right:["+","left"]};i.addEffect("slide",function(g){var a=this.getConf(),f=this.getTip(),b=a.slideFade?{opacity:a.opacity}:{},c=e[a.direction]||e.up;b[c[1]]=c[0]+"="+a.slideOffset;a.slideFade&&f.css({opacity:0});f.show().animate(b,a.slideInSpeed,g)},function(g){var a=this.getConf(),f=a.slideOffset,
-b=a.slideFade?{opacity:0}:{},c=e[a.direction]||e.up,h=""+c[0];if(a.bounce)h=h=="+"?"-":"+";b[c[1]]=h+"="+f;this.getTip().animate(b,a.slideOutSpeed,function(){d(this).hide();g.call()})})})(jQuery);
-(function(g){function j(a){var c=g(window),d=c.width()+c.scrollLeft(),h=c.height()+c.scrollTop();return[a.offset().top<=c.scrollTop(),d<=a.offset().left+a.width(),h<=a.offset().top+a.height(),c.scrollLeft()>=a.offset().left]}function k(a){for(var c=a.length;c--;)if(a[c])return false;return true}var i=g.tools.tooltip;i.dynamic={conf:{classNames:"top right bottom left"}};g.fn.dynamic=function(a){if(typeof a=="number")a={speed:a};a=g.extend({},i.dynamic.conf,a);var c=a.classNames.split(/\s/),d;this.each(function(){var h=
-g(this).tooltip().onBeforeShow(function(e,f){e=this.getTip();var b=this.getConf();d||(d=[b.position[0],b.position[1],b.offset[0],b.offset[1],g.extend({},b)]);g.extend(b,d[4]);b.position=[d[0],d[1]];b.offset=[d[2],d[3]];e.css({visibility:"hidden",position:"absolute",top:f.top,left:f.left}).show();f=j(e);if(!k(f)){if(f[2]){g.extend(b,a.top);b.position[0]="top";e.addClass(c[0])}if(f[3]){g.extend(b,a.right);b.position[1]="right";e.addClass(c[1])}if(f[0]){g.extend(b,a.bottom);b.position[0]="bottom";e.addClass(c[2])}if(f[1]){g.extend(b,
-a.left);b.position[1]="left";e.addClass(c[3])}if(f[0]||f[2])b.offset[0]*=-1;if(f[1]||f[3])b.offset[1]*=-1}e.css({visibility:"visible"}).hide()});h.onBeforeShow(function(){var e=this.getConf();this.getTip();setTimeout(function(){e.position=[d[0],d[1]];e.offset=[d[2],d[3]]},0)});h.onHide(function(){var e=this.getTip();e.removeClass(a.classNames)});ret=h});return a.api?ret:this}})(jQuery);
-(function(e){function n(f,c){var a=e(c);return a.length<2?a:f.parent().find(c)}function t(f,c){var a=this,l=f.add(a),g=f.children(),k=0,m=c.vertical;j||(j=a);if(g.length>1)g=e(c.items,f);e.extend(a,{getConf:function(){return c},getIndex:function(){return k},getSize:function(){return a.getItems().size()},getNaviButtons:function(){return o.add(p)},getRoot:function(){return f},getItemWrap:function(){return g},getItems:function(){return g.children(c.item).not("."+c.clonedClass)},move:function(b,d){return a.seekTo(k+
-b,d)},next:function(b){return a.move(1,b)},prev:function(b){return a.move(-1,b)},begin:function(b){return a.seekTo(0,b)},end:function(b){return a.seekTo(a.getSize()-1,b)},focus:function(){return j=a},addItem:function(b){b=e(b);if(c.circular){g.children("."+c.clonedClass+":last").before(b);g.children("."+c.clonedClass+":first").replaceWith(b.clone().addClass(c.clonedClass))}else g.append(b);l.trigger("onAddItem",[b]);return a},seekTo:function(b,d,h){b.jquery||(b*=1);if(c.circular&&b===0&&k==-1&&d!==
-0)return a;if(!c.circular&&b<0||b>a.getSize()||b<-1)return a;var i=b;if(b.jquery)b=a.getItems().index(b);else i=a.getItems().eq(b);var q=e.Event("onBeforeSeek");if(!h){l.trigger(q,[b,d]);if(q.isDefaultPrevented()||!i.length)return a}i=m?{top:-i.position().top}:{left:-i.position().left};k=b;j=a;if(d===undefined)d=c.speed;g.animate(i,d,c.easing,h||function(){l.trigger("onSeek",[b])});return a}});e.each(["onBeforeSeek","onSeek","onAddItem"],function(b,d){e.isFunction(c[d])&&e(a).bind(d,c[d]);a[d]=function(h){e(a).bind(d,
-h);return a}});if(c.circular){var r=a.getItems().slice(-1).clone().prependTo(g),s=a.getItems().eq(1).clone().appendTo(g);r.add(s).addClass(c.clonedClass);a.onBeforeSeek(function(b,d,h){if(!b.isDefaultPrevented())if(d==-1){a.seekTo(r,h,function(){a.end(0)});return b.preventDefault()}else d==a.getSize()&&a.seekTo(s,h,function(){a.begin(0)})});a.seekTo(0,0,function(){})}var o=n(f,c.prev).click(function(){a.prev()}),p=n(f,c.next).click(function(){a.next()});!c.circular&&a.getSize()>1&&a.onBeforeSeek(function(b,
-d){setTimeout(function(){if(!b.isDefaultPrevented()){o.toggleClass(c.disabledClass,d<=0);p.toggleClass(c.disabledClass,d>=a.getSize()-1)}},1)});c.mousewheel&&e.fn.mousewheel&&f.mousewheel(function(b,d){if(c.mousewheel){a.move(d<0?1:-1,c.wheelSpeed||50);return false}});c.keyboard&&e(document).bind("keydown.scrollable",function(b){if(!(!c.keyboard||b.altKey||b.ctrlKey||e(b.target).is(":input")))if(!(c.keyboard!="static"&&j!=a)){var d=b.keyCode;if(m&&(d==38||d==40)){a.move(d==38?-1:1);return b.preventDefault()}if(!m&&
-(d==37||d==39)){a.move(d==37?-1:1);return b.preventDefault()}}});c.initialIndex&&a.seekTo(c.initialIndex,0,function(){})}e.tools=e.tools||{version:"1.2.4"};e.tools.scrollable={conf:{activeClass:"active",circular:false,clonedClass:"cloned",disabledClass:"disabled",easing:"swing",initialIndex:0,item:null,items:".items",keyboard:true,mousewheel:false,next:".next",prev:".prev",speed:400,vertical:false,wheelSpeed:0}};var j;e.fn.scrollable=function(f){var c=this.data("scrollable");if(c)return c;f=e.extend({},
-e.tools.scrollable.conf,f);this.each(function(){c=new t(e(this),f);e(this).data("scrollable",c)});return f.api?c:this}})(jQuery);
-(function(c){var g=c.tools.scrollable;g.autoscroll={conf:{autoplay:true,interval:3E3,autopause:true}};c.fn.autoscroll=function(d){if(typeof d=="number")d={interval:d};var b=c.extend({},g.autoscroll.conf,d),h;this.each(function(){var a=c(this).data("scrollable");if(a)h=a;var e,i,f=true;a.play=function(){if(!e){f=false;e=setInterval(function(){a.next()},b.interval);a.next()}};a.pause=function(){e=clearInterval(e)};a.stop=function(){a.pause();f=true};b.autopause&&a.getRoot().add(a.getNaviButtons()).hover(function(){a.pause();
-clearInterval(i)},function(){f||(i=setTimeout(a.play,b.interval))});b.autoplay&&setTimeout(a.play,b.interval)});return b.api?h:this}})(jQuery);
-(function(d){function p(b,g){var h=d(g);return h.length<2?h:b.parent().find(g)}var m=d.tools.scrollable;m.navigator={conf:{navi:".navi",naviItem:null,activeClass:"active",indexed:false,idPrefix:null,history:false}};d.fn.navigator=function(b){if(typeof b=="string")b={navi:b};b=d.extend({},m.navigator.conf,b);var g;this.each(function(){function h(a,c,i){e.seekTo(c);if(j){if(location.hash)location.hash=a.attr("href").replace("#","")}else return i.preventDefault()}function f(){return k.find(b.naviItem||
-"> *")}function n(a){var c=d("<"+(b.naviItem||"a")+"/>").click(function(i){h(d(this),a,i)}).attr("href","#"+a);a===0&&c.addClass(l);b.indexed&&c.text(a+1);b.idPrefix&&c.attr("id",b.idPrefix+a);return c.appendTo(k)}function o(a,c){a=f().eq(c.replace("#",""));a.length||(a=f().filter("[href="+c+"]"));a.click()}var e=d(this).data("scrollable"),k=b.navi.jquery?b.navi:p(e.getRoot(),b.navi),q=e.getNaviButtons(),l=b.activeClass,j=b.history&&d.fn.history;if(e)g=e;e.getNaviButtons=function(){return q.add(k)};
-f().length?f().each(function(a){d(this).click(function(c){h(d(this),a,c)})}):d.each(e.getItems(),function(a){n(a)});e.onBeforeSeek(function(a,c){setTimeout(function(){if(!a.isDefaultPrevented()){var i=f().eq(c);!a.isDefaultPrevented()&&i.length&&f().removeClass(l).eq(c).addClass(l)}},1)});e.onAddItem(function(a,c){c=n(e.getItems().index(c));j&&c.history(o)});j&&f().history(o)});return b.api?g:this}})(jQuery);
-(function(a){function t(d,b){var c=this,i=d.add(c),o=a(window),k,f,m,g=a.tools.expose&&(b.mask||b.expose),n=Math.random().toString().slice(10);if(g){if(typeof g=="string")g={color:g};g.closeOnClick=g.closeOnEsc=false}var p=b.target||d.attr("rel");f=p?a(p):d;if(!f.length)throw"Could not find Overlay: "+p;d&&d.index(f)==-1&&d.click(function(e){c.load(e);return e.preventDefault()});a.extend(c,{load:function(e){if(c.isOpened())return c;var h=q[b.effect];if(!h)throw'Overlay: cannot find effect : "'+b.effect+
-'"';b.oneInstance&&a.each(s,function(){this.close(e)});e=e||a.Event();e.type="onBeforeLoad";i.trigger(e);if(e.isDefaultPrevented())return c;m=true;g&&a(f).expose(g);var j=b.top,r=b.left,u=f.outerWidth({margin:true}),v=f.outerHeight({margin:true});if(typeof j=="string")j=j=="center"?Math.max((o.height()-v)/2,0):parseInt(j,10)/100*o.height();if(r=="center")r=Math.max((o.width()-u)/2,0);h[0].call(c,{top:j,left:r},function(){if(m){e.type="onLoad";i.trigger(e)}});g&&b.closeOnClick&&a.mask.getMask().one("click",
-c.close);b.closeOnClick&&a(document).bind("click."+n,function(l){a(l.target).parents(f).length||c.close(l)});b.closeOnEsc&&a(document).bind("keydown."+n,function(l){l.keyCode==27&&c.close(l)});return c},close:function(e){if(!c.isOpened())return c;e=e||a.Event();e.type="onBeforeClose";i.trigger(e);if(!e.isDefaultPrevented()){m=false;q[b.effect][1].call(c,function(){e.type="onClose";i.trigger(e)});a(document).unbind("click."+n).unbind("keydown."+n);g&&a.mask.close();return c}},getOverlay:function(){return f},
-getTrigger:function(){return d},getClosers:function(){return k},isOpened:function(){return m},getConf:function(){return b}});a.each("onBeforeLoad,onStart,onLoad,onBeforeClose,onClose".split(","),function(e,h){a.isFunction(b[h])&&a(c).bind(h,b[h]);c[h]=function(j){a(c).bind(h,j);return c}});k=f.find(b.close||".close");if(!k.length&&!b.close){k=a('<a class="close"></a>');f.prepend(k)}k.click(function(e){c.close(e)});b.load&&c.load()}a.tools=a.tools||{version:"1.2.4"};a.tools.overlay={addEffect:function(d,
-b,c){q[d]=[b,c]},conf:{close:null,closeOnClick:true,closeOnEsc:true,closeSpeed:"fast",effect:"default",fixed:!a.browser.msie||a.browser.version>6,left:"center",load:false,mask:null,oneInstance:true,speed:"normal",target:null,top:"10%"}};var s=[],q={};a.tools.overlay.addEffect("default",function(d,b){var c=this.getConf(),i=a(window);if(!c.fixed){d.top+=i.scrollTop();d.left+=i.scrollLeft()}d.position=c.fixed?"fixed":"absolute";this.getOverlay().css(d).fadeIn(c.speed,b)},function(d){this.getOverlay().fadeOut(this.getConf().closeSpeed,
-d)});a.fn.overlay=function(d){var b=this.data("overlay");if(b)return b;if(a.isFunction(d))d={onBeforeLoad:d};d=a.extend(true,{},a.tools.overlay.conf,d);this.each(function(){b=new t(a(this),d);s.push(b);a(this).data("overlay",b)});return d.api?b:this}})(jQuery);
-(function(i){function j(b){var d=b.offset();return{top:d.top+b.height()/2,left:d.left+b.width()/2}}var k=i.tools.overlay,f=i(window);i.extend(k.conf,{start:{top:null,left:null},fadeInSpeed:"fast",zIndex:9999});function n(b,d){var a=this.getOverlay(),c=this.getConf(),g=this.getTrigger(),o=this,l=a.outerWidth({margin:true}),h=a.data("img");if(!h){var e=a.css("backgroundImage");if(!e)throw"background-image CSS property not set for overlay";e=e.slice(e.indexOf("(")+1,e.indexOf(")")).replace(/\"/g,"");
-a.css("backgroundImage","none");h=i('<img src="'+e+'"/>');h.css({border:0,display:"none"}).width(l);i("body").append(h);a.data("img",h)}e=c.start.top||Math.round(f.height()/2);var m=c.start.left||Math.round(f.width()/2);if(g){g=j(g);e=g.top;m=g.left}h.css({position:"absolute",top:e,left:m,width:0,zIndex:c.zIndex}).show();b.top+=f.scrollTop();b.left+=f.scrollLeft();b.position="absolute";a.css(b);h.animate({top:a.css("top"),left:a.css("left"),width:l},c.speed,function(){if(c.fixed){b.top-=f.scrollTop();
-b.left-=f.scrollLeft();b.position="fixed";h.add(a).css(b)}a.css("zIndex",c.zIndex+1).fadeIn(c.fadeInSpeed,function(){o.isOpened()&&!i(this).index(a)?d.call():a.hide()})})}function p(b){var d=this.getOverlay().hide(),a=this.getConf(),c=this.getTrigger();d=d.data("img");var g={top:a.start.top,left:a.start.left,width:0};c&&i.extend(g,j(c));a.fixed&&d.css({position:"absolute"}).animate({top:"+="+f.scrollTop(),left:"+="+f.scrollLeft()},0);d.animate(g,a.closeSpeed,b)}k.addEffect("apple",n,p)})(jQuery);
-(function(d){function R(b,c){return 32-(new Date(b,c,32)).getDate()}function S(b,c){b=""+b;for(c=c||2;b.length<c;)b="0"+b;return b}function T(b,c,i){var p=b.getDate(),h=b.getDay(),q=b.getMonth();b=b.getFullYear();var f={d:p,dd:S(p),ddd:B[i].shortDays[h],dddd:B[i].days[h],m:q+1,mm:S(q+1),mmm:B[i].shortMonths[q],mmmm:B[i].months[q],yy:String(b).slice(2),yyyy:b};c=c.replace(X,function(r){return r in f?f[r]:r.slice(1,r.length-1)});return Y.html(c).html()}function y(b){return parseInt(b,10)}function U(b,
-c){return b.getFullYear()===c.getFullYear()&&b.getMonth()==c.getMonth()&&b.getDate()==c.getDate()}function C(b){if(b){if(b.constructor==Date)return b;if(typeof b=="string"){var c=b.split("-");if(c.length==3)return new Date(y(c[0]),y(c[1])-1,y(c[2]));if(!/^-?\d+$/.test(b))return;b=y(b)}c=new Date;c.setDate(c.getDate()+b);return c}}function Z(b,c){function i(a,e,g){m=a;D=a.getFullYear();E=a.getMonth();G=a.getDate();g=g||d.Event("api");g.type="change";H.trigger(g,[a]);if(!g.isDefaultPrevented()){b.val(T(a,
-e.format,e.lang));b.data("date",a);h.hide(g)}}function p(a){a.type="onShow";H.trigger(a);d(document).bind("keydown.d",function(e){if(e.ctrlKey)return true;var g=e.keyCode;if(g==8){b.val("");return h.hide(e)}if(g==27)return h.hide(e);if(d(V).index(g)>=0){if(!v){h.show(e);return e.preventDefault()}var j=d("#"+f.weeks+" a"),s=d("."+f.focus),n=j.index(s);s.removeClass(f.focus);if(g==74||g==40)n+=7;else if(g==75||g==38)n-=7;else if(g==76||g==39)n+=1;else if(g==72||g==37)n-=1;if(n>41){h.addMonth();s=d("#"+
-f.weeks+" a:eq("+(n-42)+")")}else if(n<0){h.addMonth(-1);s=d("#"+f.weeks+" a:eq("+(n+42)+")")}else s=j.eq(n);s.addClass(f.focus);return e.preventDefault()}if(g==34)return h.addMonth();if(g==33)return h.addMonth(-1);if(g==36)return h.today();if(g==13)d(e.target).is("select")||d("."+f.focus).click();return d([16,17,18,9]).index(g)>=0});d(document).bind("click.d",function(e){var g=e.target;if(!d(g).parents("#"+f.root).length&&g!=b[0]&&(!L||g!=L[0]))h.hide(e)})}var h=this,q=new Date,f=c.css,r=B[c.lang],
-k=d("#"+f.root),M=k.find("#"+f.title),L,I,J,D,E,G,m=b.attr("data-value")||c.value||b.val(),o=b.attr("min")||c.min,t=b.attr("max")||c.max,v;if(o===0)o="0";m=C(m)||q;o=C(o||c.yearRange[0]*365);t=C(t||c.yearRange[1]*365);if(!r)throw"Dateinput: invalid language: "+c.lang;if(b.attr("type")=="date"){var N=d("<input/>");d.each("class,disabled,id,maxlength,name,readonly,required,size,style,tabindex,title,value".split(","),function(a,e){N.attr(e,b.attr(e))});b.replaceWith(N);b=N}b.addClass(f.input);var H=
-b.add(h);if(!k.length){k=d("<div><div><a/><div/><a/></div><div><div/><div/></div></div>").hide().css({position:"absolute"}).attr("id",f.root);k.children().eq(0).attr("id",f.head).end().eq(1).attr("id",f.body).children().eq(0).attr("id",f.days).end().eq(1).attr("id",f.weeks).end().end().end().find("a").eq(0).attr("id",f.prev).end().eq(1).attr("id",f.next);M=k.find("#"+f.head).find("div").attr("id",f.title);if(c.selectors){var z=d("<select/>").attr("id",f.month),A=d("<select/>").attr("id",f.year);M.append(z.add(A))}for(var $=
-k.find("#"+f.days),O=0;O<7;O++)$.append(d("<span/>").text(r.shortDays[(O+c.firstDay)%7]));d("body").append(k)}if(c.trigger)L=d("<a/>").attr("href","#").addClass(f.trigger).click(function(a){h.show();return a.preventDefault()}).insertAfter(b);var K=k.find("#"+f.weeks);A=k.find("#"+f.year);z=k.find("#"+f.month);d.extend(h,{show:function(a){if(!(b.is("[readonly]")||v)){a=a||d.Event();a.type="onBeforeShow";H.trigger(a);if(!a.isDefaultPrevented()){d.each(W,function(){this.hide()});v=true;z.unbind("change").change(function(){h.setValue(A.val(),
-d(this).val())});A.unbind("change").change(function(){h.setValue(d(this).val(),z.val())});I=k.find("#"+f.prev).unbind("click").click(function(){I.hasClass(f.disabled)||h.addMonth(-1);return false});J=k.find("#"+f.next).unbind("click").click(function(){J.hasClass(f.disabled)||h.addMonth();return false});h.setValue(m);var e=b.position();k.css({top:e.top+b.outerHeight({margins:true})+c.offset[0],left:e.left+c.offset[1]});if(c.speed)k.show(c.speed,function(){p(a)});else{k.show();p(a)}return h}}},setValue:function(a,
-e,g){var j;if(parseInt(e,10)>=-1){a=y(a);e=y(e);g=y(g);j=new Date(a,e,g)}else{j=a||m;a=j.getFullYear();e=j.getMonth();g=j.getDate()}if(e==-1){e=11;a--}else if(e==12){e=0;a++}if(!v){i(j,c);return h}E=e;D=a;g=new Date(a,e,1-c.firstDay);g=g.getDay();var s=R(a,e),n=R(a,e-1),P;if(c.selectors){z.empty();d.each(r.months,function(w,F){o<new Date(a,w+1,-1)&&t>new Date(a,w,0)&&z.append(d("<option/>").html(F).attr("value",w))});A.empty();j=q.getFullYear();for(var l=j+c.yearRange[0];l<j+c.yearRange[1];l++)o<
-new Date(l+1,-1,0)&&t>new Date(l,0,0)&&A.append(d("<option/>").text(l));z.val(e);A.val(a)}else M.html(r.months[e]+" "+a);K.empty();I.add(J).removeClass(f.disabled);l=!g?-7:0;for(var u,x;l<(!g?35:42);l++){u=d("<a/>");if(l%7===0){P=d("<div/>").addClass(f.week);K.append(P)}if(l<g){u.addClass(f.off);x=n-g+l+1;j=new Date(a,e-1,x)}else if(l>=g+s){u.addClass(f.off);x=l-s-g+1;j=new Date(a,e+1,x)}else{x=l-g+1;j=new Date(a,e,x);if(U(m,j))u.attr("id",f.current).addClass(f.focus);else U(q,j)&&u.attr("id",f.today)}o&&
-j<o&&u.add(I).addClass(f.disabled);t&&j>t&&u.add(J).addClass(f.disabled);u.attr("href","#"+x).text(x).data("date",j);P.append(u)}K.find("a").click(function(w){var F=d(this);if(!F.hasClass(f.disabled)){d("#"+f.current).removeAttr("id");F.attr("id",f.current);i(F.data("date"),c,w)}return false});f.sunday&&K.find(f.week).each(function(){var w=c.firstDay?7-c.firstDay:0;d(this).children().slice(w,w+1).addClass(f.sunday)});return h},setMin:function(a,e){o=C(a);e&&m<o&&h.setValue(o);return h},setMax:function(a,
-e){t=C(a);e&&m>t&&h.setValue(t);return h},today:function(){return h.setValue(q)},addDay:function(a){return this.setValue(D,E,G+(a||1))},addMonth:function(a){return this.setValue(D,E+(a||1),G)},addYear:function(a){return this.setValue(D+(a||1),E,G)},hide:function(a){if(v){a=d.Event();a.type="onHide";H.trigger(a);d(document).unbind("click.d").unbind("keydown.d");if(a.isDefaultPrevented())return;k.hide();v=false}return h},getConf:function(){return c},getInput:function(){return b},getCalendar:function(){return k},
-getValue:function(a){return a?T(m,a,c.lang):m},isOpen:function(){return v}});d.each(["onBeforeShow","onShow","change","onHide"],function(a,e){d.isFunction(c[e])&&d(h).bind(e,c[e]);h[e]=function(g){d(h).bind(e,g);return h}});b.bind("focus click",h.show).keydown(function(a){var e=a.keyCode;if(!v&&d(V).index(e)>=0){h.show(a);return a.preventDefault()}return a.shiftKey||a.ctrlKey||a.altKey||e==9?true:a.preventDefault()});C(b.val())&&i(m,c)}d.tools=d.tools||{version:"1.2.4"};var W=[],Q,V=[75,76,38,39,
-74,72,40,37],B={};Q=d.tools.dateinput={conf:{format:"mm/dd/yy",selectors:false,yearRange:[-5,5],lang:"en",offset:[0,0],speed:0,firstDay:0,min:undefined,max:undefined,trigger:false,css:{prefix:"cal",input:"date",root:0,head:0,title:0,prev:0,next:0,month:0,year:0,days:0,body:0,weeks:0,today:0,current:0,week:0,off:0,sunday:0,focus:0,disabled:0,trigger:0}},localize:function(b,c){d.each(c,function(i,p){c[i]=p.split(",")});B[b]=c}};Q.localize("en",{months:"January,February,March,April,May,June,July,August,September,October,November,December",
-shortMonths:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec",days:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday",shortDays:"Sun,Mon,Tue,Wed,Thu,Fri,Sat"});var X=/d{1,4}|m{1,4}|yy(?:yy)?|"[^"]*"|'[^']*'/g,Y=d("<a/>");d.expr[":"].date=function(b){var c=b.getAttribute("type");return c&&c=="date"||!!d(b).data("dateinput")};d.fn.dateinput=function(b){if(this.data("dateinput"))return this;b=d.extend(true,{},Q.conf,b);d.each(b.css,function(i,p){if(!p&&i!="prefix")b.css[i]=(b.css.prefix||"")+
-(p||i)});var c;this.each(function(){var i=new Z(d(this),b);W.push(i);i=i.getInput().data("dateinput",i);c=c?c.add(i):i});return c?c:this}})(jQuery);
-(function(e){function F(d,a){a=Math.pow(10,a);return Math.round(d*a)/a}function p(d,a){if(a=parseInt(d.css(a),10))return a;return(d=d[0].currentStyle)&&d.width&&parseInt(d.width,10)}function C(d){return(d=d.data("events"))&&d.onSlide}function G(d,a){function h(c,b,f,j){if(f===undefined)f=b/k*z;else if(j)f-=a.min;if(r)f=Math.round(f/r)*r;if(b===undefined||r)b=f*k/z;if(isNaN(f))return g;b=Math.max(0,Math.min(b,k));f=b/k*z;if(j||!n)f+=a.min;if(n)if(j)b=k-b;else f=a.max-f;f=F(f,t);var q=c.type=="click";
-if(D&&l!==undefined&&!q){c.type="onSlide";A.trigger(c,[f,b]);if(c.isDefaultPrevented())return g}j=q?a.speed:0;q=q?function(){c.type="change";A.trigger(c,[f])}:null;if(n){m.animate({top:b},j,q);a.progress&&B.animate({height:k-b+m.width()/2},j)}else{m.animate({left:b},j,q);a.progress&&B.animate({width:b+m.width()/2},j)}l=f;H=b;d.val(f);return g}function s(){if(n=a.vertical||p(i,"height")>p(i,"width")){k=p(i,"height")-p(m,"height");u=i.offset().top+k}else{k=p(i,"width")-p(m,"width");u=i.offset().left}}
-function v(){s();g.setValue(a.value||a.min)}var g=this,o=a.css,i=e("<div><div/><a href='#'/></div>").data("rangeinput",g),n,l,u,k,H;d.before(i);var m=i.addClass(o.slider).find("a").addClass(o.handle),B=i.find("div").addClass(o.progress);e.each("min,max,step,value".split(","),function(c,b){c=d.attr(b);if(parseFloat(c))a[b]=parseFloat(c,10)});var z=a.max-a.min,r=a.step=="any"?0:a.step,t=a.precision;if(t===undefined)try{t=r.toString().split(".")[1].length}catch(I){t=0}if(d.attr("type")=="range"){var w=
-e("<input/>");e.each("class,disabled,id,maxlength,name,readonly,required,size,style,tabindex,title,value".split(","),function(c,b){w.attr(b,d.attr(b))});w.val(a.value);d.replaceWith(w);d=w}d.addClass(o.input);var A=e(g).add(d),D=true;e.extend(g,{getValue:function(){return l},setValue:function(c,b){return h(b||e.Event("api"),undefined,c,true)},getConf:function(){return a},getProgress:function(){return B},getHandle:function(){return m},getInput:function(){return d},step:function(c,b){b=b||e.Event();
-var f=a.step=="any"?1:a.step;g.setValue(l+f*(c||1),b)},stepUp:function(c){return g.step(c||1)},stepDown:function(c){return g.step(-c||-1)}});e.each("onSlide,change".split(","),function(c,b){e.isFunction(a[b])&&e(g).bind(b,a[b]);g[b]=function(f){e(g).bind(b,f);return g}});m.drag({drag:false}).bind("dragStart",function(){D=C(e(g))||C(d)}).bind("drag",function(c,b,f){if(d.is(":disabled"))return false;h(c,n?b:f)}).bind("dragEnd",function(c){if(!c.isDefaultPrevented()){c.type="change";A.trigger(c,[l])}}).click(function(c){return c.preventDefault()});
-i.click(function(c){if(d.is(":disabled")||c.target==m[0])return c.preventDefault();s();var b=m.width()/2;h(c,n?k-u-b+c.pageY:c.pageX-u-b)});a.keyboard&&d.keydown(function(c){if(!d.attr("readonly")){var b=c.keyCode,f=e([75,76,38,33,39]).index(b)!=-1,j=e([74,72,40,34,37]).index(b)!=-1;if((f||j)&&!(c.shiftKey||c.altKey||c.ctrlKey)){if(f)g.step(b==33?10:1,c);else if(j)g.step(b==34?-10:-1,c);return c.preventDefault()}}});d.blur(function(c){var b=e(this).val();b!==l&&g.setValue(b,c)});e.extend(d[0],{stepUp:g.stepUp,
-stepDown:g.stepDown});v();k||e(window).load(v)}e.tools=e.tools||{version:"1.2.4"};var E;E=e.tools.rangeinput={conf:{min:0,max:100,step:"any",steps:0,value:0,precision:undefined,vertical:0,keyboard:true,progress:false,speed:100,css:{input:"range",slider:"slider",progress:"progress",handle:"handle"}}};var x,y;e.fn.drag=function(d){document.ondragstart=function(){return false};d=e.extend({x:true,y:true,drag:true},d);x=x||e(document).bind("mousedown mouseup",function(a){var h=e(a.target);if(a.type=="mousedown"&&
-h.data("drag")){var s=h.position(),v=a.pageX-s.left,g=a.pageY-s.top,o=true;x.bind("mousemove.drag",function(i){var n=i.pageX-v;i=i.pageY-g;var l={};if(d.x)l.left=n;if(d.y)l.top=i;if(o){h.trigger("dragStart");o=false}d.drag&&h.css(l);h.trigger("drag",[i,n]);y=h});a.preventDefault()}else try{y&&y.trigger("dragEnd")}finally{x.unbind("mousemove.drag");y=null}});return this.data("drag",true)};e.expr[":"].range=function(d){var a=d.getAttribute("type");return a&&a=="range"||!!e(d).filter("input").data("rangeinput")};
-e.fn.rangeinput=function(d){if(this.data("rangeinput"))return this;d=e.extend(true,{},E.conf,d);var a;this.each(function(){var h=new G(e(this),e.extend(true,{},d));h=h.getInput().data("rangeinput",h);a=a?a.add(h):h});return a?a:this}})(jQuery);
-(function(e){function t(a,b,c){var k=a.offset().top,f=a.offset().left,l=c.position.split(/,?\s+/),p=l[0];l=l[1];k-=b.outerHeight()-c.offset[0];f+=a.outerWidth()+c.offset[1];c=b.outerHeight()+a.outerHeight();if(p=="center")k+=c/2;if(p=="bottom")k+=c;a=a.outerWidth();if(l=="center")f-=(a+b.outerWidth())/2;if(l=="left")f-=a;return{top:k,left:f}}function x(a){function b(){return this.getAttribute("type")==a}b.key="[type="+a+"]";return b}function u(a,b,c){function k(g,d,j){if(!(!c.grouped&&g.length)){var h;
-if(j===false||e.isArray(j)){h=i.messages[d.key||d]||i.messages["*"];h=h[c.lang]||i.messages["*"].en;(d=h.match(/\$\d/g))&&e.isArray(j)&&e.each(d,function(n){h=h.replace(this,j[n])})}else h=j[c.lang]||j;g.push(h)}}var f=this,l=b.add(f);a=a.not(":button, :image, :reset, :submit");e.extend(f,{getConf:function(){return c},getForm:function(){return b},getInputs:function(){return a},reflow:function(){a.each(function(){var g=e(this),d=g.data("msg.el");if(d){g=t(g,d,c);d.css({top:g.top,left:g.left})}});return f},
-invalidate:function(g,d){if(!d){var j=[];e.each(g,function(h,n){h=a.filter("[name='"+h+"']");if(h.length){h.trigger("OI",[n]);j.push({input:h,messages:[n]})}});g=j;d=e.Event()}d.type="onFail";l.trigger(d,[g]);d.isDefaultPrevented()||r[c.effect][0].call(f,g,d);return f},reset:function(g){g=g||a;g.removeClass(c.errorClass).each(function(){var d=e(this).data("msg.el");if(d){d.remove();e(this).data("msg.el",null)}}).unbind(c.errorInputEvent||"");return f},destroy:function(){b.unbind(c.formEvent).unbind("reset.V");
-a.unbind(c.inputEvent||"").unbind("change.V");return f.reset()},checkValidity:function(g,d){g=g||a;g=g.not(":disabled");if(!g.length)return true;d=d||e.Event();d.type="onBeforeValidate";l.trigger(d,[g]);if(d.isDefaultPrevented())return d.result;var j=[],h=c.errorInputEvent+".v";g.not(":radio:not(:checked)").each(function(){var q=[],m=e(this).unbind(h).data("messages",q);e.each(v,function(){var o=this,s=o[0];if(m.filter(s).length){o=o[1].call(f,m,m.val());if(o!==true){d.type="onBeforeFail";l.trigger(d,
-[m,s]);if(d.isDefaultPrevented())return false;var w=m.attr(c.messageAttr);if(w){q=[w];return false}else k(q,s,o)}}});if(q.length){j.push({input:m,messages:q});m.trigger("OI",[q]);c.errorInputEvent&&m.bind(h,function(o){f.checkValidity(m,o)})}if(c.singleError&&j.length)return false});var n=r[c.effect];if(!n)throw'Validator: cannot find effect "'+c.effect+'"';if(j.length){f.invalidate(j,d);return false}else{n[1].call(f,g,d);d.type="onSuccess";l.trigger(d,[g]);g.unbind(h)}return true}});e.each("onBeforeValidate,onBeforeFail,onFail,onSuccess".split(","),
-function(g,d){e.isFunction(c[d])&&e(f).bind(d,c[d]);f[d]=function(j){e(f).bind(d,j);return f}});c.formEvent&&b.bind(c.formEvent,function(g){if(!f.checkValidity(null,g))return g.preventDefault()});b.bind("reset.V",function(){f.reset()});a[0]&&a[0].validity&&a.each(function(){this.oninvalid=function(){return false}});if(b[0])b[0].checkValidity=f.checkValidity;c.inputEvent&&a.bind(c.inputEvent,function(g){f.checkValidity(e(this),g)});a.filter(":checkbox, select").filter("[required]").bind("change.V",
-function(g){var d=e(this);if(this.checked||d.is("select")&&e(this).val())r[c.effect][1].call(f,d,g)});var p=a.filter(":radio").change(function(g){f.checkValidity(p,g)});e(window).resize(function(){f.reflow()})}e.tools=e.tools||{version:"1.2.4"};var y=/\[type=([a-z]+)\]/,z=/^-?[0-9]*(\.[0-9]+)?$/,A=/^([a-z0-9_\.\-\+]+)@([\da-z\.\-]+)\.([a-z\.]{2,6})$/i,B=/^(https?:\/\/)?[\da-z\.\-]+\.[a-z\.]{2,6}[#\?\/\w \.\-=]*$/i,i;i=e.tools.validator={conf:{grouped:false,effect:"default",errorClass:"invalid",inputEvent:null,
-errorInputEvent:"keyup",formEvent:"submit",lang:"en",message:"<div/>",messageAttr:"data-message",messageClass:"error",offset:[0,0],position:"center right",singleError:false,speed:"normal"},messages:{"*":{en:"Please correct this value"}},localize:function(a,b){e.each(b,function(c,k){i.messages[c]=i.messages[c]||{};i.messages[c][a]=k})},localizeFn:function(a,b){i.messages[a]=i.messages[a]||{};e.extend(i.messages[a],b)},fn:function(a,b,c){if(e.isFunction(b))c=b;else{if(typeof b=="string")b={en:b};this.messages[a.key||
-a]=b}if(b=y.exec(a))a=x(b[1]);v.push([a,c])},addEffect:function(a,b,c){r[a]=[b,c]}};var v=[],r={"default":[function(a){var b=this.getConf();e.each(a,function(c,k){c=k.input;c.addClass(b.errorClass);var f=c.data("msg.el");if(!f){f=e(b.message).addClass(b.messageClass).appendTo(document.body);c.data("msg.el",f)}f.css({visibility:"hidden",display:"none"}).find("span").remove();e.each(k.messages,function(l,p){e("<span/>").html(p).appendTo(f)});f.outerWidth()==f.parent().width()&&f.add(f.find("p")).css({display:"inline"});
-k=t(c,f,b);f.css({visibility:"visible",position:"absolute",top:k.top,left:k.left}).fadeIn(b.speed)})},function(a){var b=this.getConf();a.removeClass(b.errorClass).each(function(){var c=e(this).data("msg.el");c&&c.css({visibility:"hidden"})})}]};e.each("email,url,number".split(","),function(a,b){e.expr[":"][b]=function(c){return c.getAttribute("type")===b}});e.fn.oninvalid=function(a){return this[a?"bind":"trigger"]("OI",a)};i.fn(":email","Please enter a valid email address",function(a,b){return!b||
-A.test(b)});i.fn(":url","Please enter a valid URL",function(a,b){return!b||B.test(b)});i.fn(":number","Please enter a numeric value.",function(a,b){return z.test(b)});i.fn("[max]","Please enter a value smaller than $1",function(a,b){if(b===""||e.tools.dateinput&&a.is(":date"))return true;a=a.attr("max");return parseFloat(b)<=parseFloat(a)?true:[a]});i.fn("[min]","Please enter a value larger than $1",function(a,b){if(b===""||e.tools.dateinput&&a.is(":date"))return true;a=a.attr("min");return parseFloat(b)>=
-parseFloat(a)?true:[a]});i.fn("[required]","Please complete this mandatory field.",function(a,b){if(a.is(":checkbox"))return a.is(":checked");return!!b});i.fn("[pattern]",function(a){var b=new RegExp("^"+a.attr("pattern")+"$");return b.test(a.val())});e.fn.validator=function(a){var b=this.data("validator");if(b){b.destroy();this.removeData("validator")}a=e.extend(true,{},i.conf,a);if(this.is("form"))return this.each(function(){var c=e(this);b=new u(c.find(":input"),c,a);c.data("validator",b)});else{b=
-new u(this,this.eq(0).closest("form"),a);return this.data("validator",b)}}})(jQuery);
--- a/web/hdabo/static/hdabo/js/jquery.validate.js	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1131 +0,0 @@
-/*
- * jQuery validation plug-in 1.5.5
- *
- * http://bassistance.de/jquery-plugins/jquery-plugin-validation/
- * http://docs.jquery.com/Plugins/Validation
- *
- * Copyright (c) 2006 - 2008 Jörn Zaefferer
- *
- * $Id: jquery.validate.js 6403 2009-06-17 14:27:16Z joern.zaefferer $
- *
- * Dual licensed under the MIT and GPL licenses:
- *   http://www.opensource.org/licenses/mit-license.php
- *   http://www.gnu.org/licenses/gpl.html
- */
-
-(function($) {
-
-$.extend($.fn, {
-	// http://docs.jquery.com/Plugins/Validation/validate
-	validate: function( options ) {
-
-		// if nothing is selected, return nothing; can't chain anyway
-		if (!this.length) {
-			options && options.debug && window.console && console.warn( "nothing selected, can't validate, returning nothing" );
-			return;
-		}
-
-		// check if a validator for this form was already created
-		var validator = $.data(this[0], 'validator');
-		if ( validator ) {
-			return validator;
-		}
-		
-		validator = new $.validator( options, this[0] );
-		$.data(this[0], 'validator', validator); 
-		
-		if ( validator.settings.onsubmit ) {
-		
-			// allow suppresing validation by adding a cancel class to the submit button
-			this.find("input, button").filter(".cancel").click(function() {
-				validator.cancelSubmit = true;
-			});
-			
-			// when a submitHandler is used, capture the submitting button
-			if (validator.settings.submitHandler) {
-				this.find("input, button").filter(":submit").click(function() {
-					validator.submitButton = this;
-				});
-			}
-		
-			// validate the form on submit
-			this.submit( function( event ) {
-				if ( validator.settings.debug )
-					// prevent form submit to be able to see console output
-					event.preventDefault();
-					
-				function handle() {
-					if ( validator.settings.submitHandler ) {
-						if (validator.submitButton) {
-							// insert a hidden input as a replacement for the missing submit button
-							var hidden = $("<input type='hidden'/>").attr("name", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm);
-						}
-						validator.settings.submitHandler.call( validator, validator.currentForm );
-						if (validator.submitButton) {
-							// and clean up afterwards; thanks to no-block-scope, hidden can be referenced
-							hidden.remove();
-						}
-						return false;
-					}
-					return true;
-				}
-					
-				// prevent submit for invalid forms or custom submit handlers
-				if ( validator.cancelSubmit ) {
-					validator.cancelSubmit = false;
-					return handle();
-				}
-				if ( validator.form() ) {
-					if ( validator.pendingRequest ) {
-						validator.formSubmitted = true;
-						return false;
-					}
-					return handle();
-				} else {
-					validator.focusInvalid();
-					return false;
-				}
-			});
-		}
-		
-		return validator;
-	},
-	// http://docs.jquery.com/Plugins/Validation/valid
-	valid: function() {
-        if ( $(this[0]).is('form')) {
-            return this.validate().form();
-        } else {
-            var valid = true;
-            var validator = $(this[0].form).validate();
-            this.each(function() {
-				valid &= validator.element(this);
-            });
-            return valid;
-        }
-    },
-	// attributes: space seperated list of attributes to retrieve and remove
-	removeAttrs: function(attributes) {
-		var result = {},
-			$element = this;
-		$.each(attributes.split(/\s/), function(index, value) {
-			result[value] = $element.attr(value);
-			$element.removeAttr(value);
-		});
-		return result;
-	},
-	// http://docs.jquery.com/Plugins/Validation/rules
-	rules: function(command, argument) {
-		var element = this[0];
-		
-		if (command) {
-			var settings = $.data(element.form, 'validator').settings;
-			var staticRules = settings.rules;
-			var existingRules = $.validator.staticRules(element);
-			switch(command) {
-			case "add":
-				$.extend(existingRules, $.validator.normalizeRule(argument));
-				staticRules[element.name] = existingRules;
-				if (argument.messages)
-					settings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages );
-				break;
-			case "remove":
-				if (!argument) {
-					delete staticRules[element.name];
-					return existingRules;
-				}
-				var filtered = {};
-				$.each(argument.split(/\s/), function(index, method) {
-					filtered[method] = existingRules[method];
-					delete existingRules[method];
-				});
-				return filtered;
-			}
-		}
-		
-		var data = $.validator.normalizeRules(
-		$.extend(
-			{},
-			$.validator.metadataRules(element),
-			$.validator.classRules(element),
-			$.validator.attributeRules(element),
-			$.validator.staticRules(element)
-		), element);
-		
-		// make sure required is at front
-		if (data.required) {
-			var param = data.required;
-			delete data.required;
-			data = $.extend({required: param}, data);
-		}
-		
-		return data;
-	}
-});
-
-// Custom selectors
-$.extend($.expr[":"], {
-	// http://docs.jquery.com/Plugins/Validation/blank
-	blank: function(a) {return !$.trim(a.value);},
-	// http://docs.jquery.com/Plugins/Validation/filled
-	filled: function(a) {return !!$.trim(a.value);},
-	// http://docs.jquery.com/Plugins/Validation/unchecked
-	unchecked: function(a) {return !a.checked;}
-});
-
-// constructor for validator
-$.validator = function( options, form ) {
-	this.settings = $.extend( {}, $.validator.defaults, options );
-	this.currentForm = form;
-	this.init();
-};
-
-$.validator.format = function(source, params) {
-	if ( arguments.length == 1 ) 
-		return function() {
-			var args = $.makeArray(arguments);
-			args.unshift(source);
-			return $.validator.format.apply( this, args );
-		};
-	if ( arguments.length > 2 && params.constructor != Array  ) {
-		params = $.makeArray(arguments).slice(1);
-	}
-	if ( params.constructor != Array ) {
-		params = [ params ];
-	}
-	$.each(params, function(i, n) {
-		source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n);
-	});
-	return source;
-};
-
-$.extend($.validator, {
-	
-	defaults: {
-		messages: {},
-		groups: {},
-		rules: {},
-		errorClass: "error",
-		validClass: "valid",
-		errorElement: "label",
-		focusInvalid: true,
-		errorContainer: $( [] ),
-		errorLabelContainer: $( [] ),
-		onsubmit: true,
-		ignore: [],
-		ignoreTitle: false,
-		onfocusin: function(element) {
-			this.lastActive = element;
-				
-			// hide error label and remove error class on focus if enabled
-			if ( this.settings.focusCleanup && !this.blockFocusCleanup ) {
-				this.settings.unhighlight && this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );
-				this.errorsFor(element).hide();
-			}
-		},
-		onfocusout: function(element) {
-			if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {
-				this.element(element);
-			}
-		},
-		onkeyup: function(element) {
-			if ( element.name in this.submitted || element == this.lastElement ) {
-				this.element(element);
-			}
-		},
-		onclick: function(element) {
-			if ( element.name in this.submitted )
-				this.element(element);
-		},
-		highlight: function( element, errorClass, validClass ) {
-			$(element).addClass(errorClass).removeClass(validClass);
-		},
-		unhighlight: function( element, errorClass, validClass ) {
-			$(element).removeClass(errorClass).addClass(validClass);
-		}
-	},
-
-	// http://docs.jquery.com/Plugins/Validation/Validator/setDefaults
-	setDefaults: function(settings) {
-		$.extend( $.validator.defaults, settings );
-	},
-
-	messages: {
-		required: "This field is required.",
-		remote: "Please fix this field.",
-		email: "Please enter a valid email address.",
-		url: "Please enter a valid URL.",
-		date: "Please enter a valid date.",
-		dateISO: "Please enter a valid date (ISO).",
-		dateDE: "Bitte geben Sie ein gültiges Datum ein.",
-		number: "Please enter a valid number.",
-		numberDE: "Bitte geben Sie eine Nummer ein.",
-		digits: "Please enter only digits",
-		creditcard: "Please enter a valid credit card number.",
-		equalTo: "Please enter the same value again.",
-		accept: "Please enter a value with a valid extension.",
-		maxlength: $.validator.format("Please enter no more than {0} characters."),
-		minlength: $.validator.format("Please enter at least {0} characters."),
-		rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."),
-		range: $.validator.format("Please enter a value between {0} and {1}."),
-		max: $.validator.format("Please enter a value less than or equal to {0}."),
-		min: $.validator.format("Please enter a value greater than or equal to {0}.")
-	},
-	
-	autoCreateRanges: false,
-	
-	prototype: {
-		
-		init: function() {
-			this.labelContainer = $(this.settings.errorLabelContainer);
-			this.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm);
-			this.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer );
-			this.submitted = {};
-			this.valueCache = {};
-			this.pendingRequest = 0;
-			this.pending = {};
-			this.invalid = {};
-			this.reset();
-			
-			var groups = (this.groups = {});
-			$.each(this.settings.groups, function(key, value) {
-				$.each(value.split(/\s/), function(index, name) {
-					groups[name] = key;
-				});
-			});
-			var rules = this.settings.rules;
-			$.each(rules, function(key, value) {
-				rules[key] = $.validator.normalizeRule(value);
-			});
-			
-			function delegate(event) {
-				var validator = $.data(this[0].form, "validator");
-				validator.settings["on" + event.type] && validator.settings["on" + event.type].call(validator, this[0] );
-			}
-			$(this.currentForm)
-				.delegate("focusin focusout keyup", ":text, :password, :file, select, textarea", delegate)
-				.delegate("click", ":radio, :checkbox", delegate);
-
-			if (this.settings.invalidHandler)
-				$(this.currentForm).bind("invalid-form.validate", this.settings.invalidHandler);
-		},
-
-		// http://docs.jquery.com/Plugins/Validation/Validator/form
-		form: function() {
-			this.checkForm();
-			$.extend(this.submitted, this.errorMap);
-			this.invalid = $.extend({}, this.errorMap);
-			if (!this.valid())
-				$(this.currentForm).triggerHandler("invalid-form", [this]);
-			this.showErrors();
-			return this.valid();
-		},
-		
-		checkForm: function() {
-			this.prepareForm();
-			for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {
-				this.check( elements[i] );
-			}
-			return this.valid(); 
-		},
-		
-		// http://docs.jquery.com/Plugins/Validation/Validator/element
-		element: function( element ) {
-			element = this.clean( element );
-			this.lastElement = element;
-			this.prepareElement( element );
-			this.currentElements = $(element);
-			var result = this.check( element );
-			if ( result ) {
-				delete this.invalid[element.name];
-			} else {
-				this.invalid[element.name] = true;
-			}
-			if ( !this.numberOfInvalids() ) {
-				// Hide error containers on last error
-				this.toHide = this.toHide.add( this.containers );
-			}
-			this.showErrors();
-			return result;
-		},
-
-		// http://docs.jquery.com/Plugins/Validation/Validator/showErrors
-		showErrors: function(errors) {
-			if(errors) {
-				// add items to error list and map
-				$.extend( this.errorMap, errors );
-				this.errorList = [];
-				for ( var name in errors ) {
-					this.errorList.push({
-						message: errors[name],
-						element: this.findByName(name)[0]
-					});
-				}
-				// remove items from success list
-				this.successList = $.grep( this.successList, function(element) {
-					return !(element.name in errors);
-				});
-			}
-			this.settings.showErrors
-				? this.settings.showErrors.call( this, this.errorMap, this.errorList )
-				: this.defaultShowErrors();
-		},
-		
-		// http://docs.jquery.com/Plugins/Validation/Validator/resetForm
-		resetForm: function() {
-			if ( $.fn.resetForm )
-				$( this.currentForm ).resetForm();
-			this.submitted = {};
-			this.prepareForm();
-			this.hideErrors();
-			this.elements().removeClass( this.settings.errorClass );
-		},
-		
-		numberOfInvalids: function() {
-			return this.objectLength(this.invalid);
-		},
-		
-		objectLength: function( obj ) {
-			var count = 0;
-			for ( var i in obj )
-				count++;
-			return count;
-		},
-		
-		hideErrors: function() {
-			this.addWrapper( this.toHide ).hide();
-		},
-		
-		valid: function() {
-			return this.size() == 0;
-		},
-		
-		size: function() {
-			return this.errorList.length;
-		},
-		
-		focusInvalid: function() {
-			if( this.settings.focusInvalid ) {
-				try {
-					$(this.findLastActive() || this.errorList.length && this.errorList[0].element || []).filter(":visible").focus();
-				} catch(e) {
-					// ignore IE throwing errors when focusing hidden elements
-				}
-			}
-		},
-		
-		findLastActive: function() {
-			var lastActive = this.lastActive;
-			return lastActive && $.grep(this.errorList, function(n) {
-				return n.element.name == lastActive.name;
-			}).length == 1 && lastActive;
-		},
-		
-		elements: function() {
-			var validator = this,
-				rulesCache = {};
-			
-			// select all valid inputs inside the form (no submit or reset buttons)
-			// workaround $Query([]).add until http://dev.jquery.com/ticket/2114 is solved
-			return $([]).add(this.currentForm.elements)
-			.filter(":input")
-			.not(":submit, :reset, :image, [disabled]")
-			.not( this.settings.ignore )
-			.filter(function() {
-				!this.name && validator.settings.debug && window.console && console.error( "%o has no name assigned", this);
-			
-				// select only the first element for each name, and only those with rules specified
-				if ( this.name in rulesCache || !validator.objectLength($(this).rules()) )
-					return false;
-				
-				rulesCache[this.name] = true;
-				return true;
-			});
-		},
-		
-		clean: function( selector ) {
-			return $( selector )[0];
-		},
-		
-		errors: function() {
-			return $( this.settings.errorElement + "." + this.settings.errorClass, this.errorContext );
-		},
-		
-		reset: function() {
-			this.successList = [];
-			this.errorList = [];
-			this.errorMap = {};
-			this.toShow = $([]);
-			this.toHide = $([]);
-			this.formSubmitted = false;
-			this.currentElements = $([]);
-		},
-		
-		prepareForm: function() {
-			this.reset();
-			this.toHide = this.errors().add( this.containers );
-		},
-		
-		prepareElement: function( element ) {
-			this.reset();
-			this.toHide = this.errorsFor(element);
-		},
-	
-		check: function( element ) {
-			element = this.clean( element );
-			
-			// if radio/checkbox, validate first element in group instead
-			if (this.checkable(element)) {
-				element = this.findByName( element.name )[0];
-			}
-			
-			var rules = $(element).rules();
-			var dependencyMismatch = false;
-			for( method in rules ) {
-				var rule = { method: method, parameters: rules[method] };
-				try {
-					var result = $.validator.methods[method].call( this, element.value.replace(/\r/g, ""), element, rule.parameters );
-					
-					// if a method indicates that the field is optional and therefore valid,
-					// don't mark it as valid when there are no other rules
-					if ( result == "dependency-mismatch" ) {
-						dependencyMismatch = true;
-						continue;
-					}
-					dependencyMismatch = false;
-					
-					if ( result == "pending" ) {
-						this.toHide = this.toHide.not( this.errorsFor(element) );
-						return;
-					}
-					
-					if( !result ) {
-						this.formatAndAdd( element, rule );
-						return false;
-					}
-				} catch(e) {
-					this.settings.debug && window.console && console.log("exception occured when checking element " + element.id
-						 + ", check the '" + rule.method + "' method");
-					throw e;
-				}
-			}
-			if (dependencyMismatch)
-				return;
-			if ( this.objectLength(rules) )
-				this.successList.push(element);
-			return true;
-		},
-		
-		// return the custom message for the given element and validation method
-		// specified in the element's "messages" metadata
-		customMetaMessage: function(element, method) {
-			if (!$.metadata)
-				return;
-			
-			var meta = this.settings.meta
-				? $(element).metadata()[this.settings.meta]
-				: $(element).metadata();
-			
-			return meta && meta.messages && meta.messages[method];
-		},
-		
-		// return the custom message for the given element name and validation method
-		customMessage: function( name, method ) {
-			var m = this.settings.messages[name];
-			return m && (m.constructor == String
-				? m
-				: m[method]);
-		},
-		
-		// return the first defined argument, allowing empty strings
-		findDefined: function() {
-			for(var i = 0; i < arguments.length; i++) {
-				if (arguments[i] !== undefined)
-					return arguments[i];
-			}
-			return undefined;
-		},
-		
-		defaultMessage: function( element, method) {
-			return this.findDefined(
-				this.customMessage( element.name, method ),
-				this.customMetaMessage( element, method ),
-				// title is never undefined, so handle empty string as undefined
-				!this.settings.ignoreTitle && element.title || undefined,
-				$.validator.messages[method],
-				"<strong>Warning: No message defined for " + element.name + "</strong>"
-			);
-		},
-		
-		formatAndAdd: function( element, rule ) {
-			var message = this.defaultMessage( element, rule.method );
-			if ( typeof message == "function" ) 
-				message = message.call(this, rule.parameters, element);
-			this.errorList.push({
-				message: message,
-				element: element
-			});
-			this.errorMap[element.name] = message;
-			this.submitted[element.name] = message;
-		},
-		
-		addWrapper: function(toToggle) {
-			if ( this.settings.wrapper )
-				toToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );
-			return toToggle;
-		},
-		
-		defaultShowErrors: function() {
-			for ( var i = 0; this.errorList[i]; i++ ) {
-				var error = this.errorList[i];
-				this.settings.highlight && this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );
-				this.showLabel( error.element, error.message );
-			}
-			if( this.errorList.length ) {
-				this.toShow = this.toShow.add( this.containers );
-			}
-			if (this.settings.success) {
-				for ( var i = 0; this.successList[i]; i++ ) {
-					this.showLabel( this.successList[i] );
-				}
-			}
-			if (this.settings.unhighlight) {
-				for ( var i = 0, elements = this.validElements(); elements[i]; i++ ) {
-					this.settings.unhighlight.call( this, elements[i], this.settings.errorClass, this.settings.validClass );
-				}
-			}
-			this.toHide = this.toHide.not( this.toShow );
-			this.hideErrors();
-			this.addWrapper( this.toShow ).show();
-		},
-		
-		validElements: function() {
-			return this.currentElements.not(this.invalidElements());
-		},
-		
-		invalidElements: function() {
-			return $(this.errorList).map(function() {
-				return this.element;
-			});
-		},
-		
-		showLabel: function(element, message) {
-			var label = this.errorsFor( element );
-			if ( label.length ) {
-				// refresh error/success class
-				label.removeClass().addClass( this.settings.errorClass );
-			
-				// check if we have a generated label, replace the message then
-				label.attr("generated") && label.html(message);
-			} else {
-				// create label
-				label = $("<" + this.settings.errorElement + "/>")
-					.attr({"for":  this.idOrName(element), generated: true})
-					.addClass(this.settings.errorClass)
-					.html(message || "");
-				if ( this.settings.wrapper ) {
-					// make sure the element is visible, even in IE
-					// actually showing the wrapped element is handled elsewhere
-					label = label.hide().show().wrap("<" + this.settings.wrapper + "/>").parent();
-				}
-				if ( !this.labelContainer.append(label).length )
-					this.settings.errorPlacement
-						? this.settings.errorPlacement(label, $(element) )
-						: label.insertAfter(element);
-			}
-			if ( !message && this.settings.success ) {
-				label.text("");
-				typeof this.settings.success == "string"
-					? label.addClass( this.settings.success )
-					: this.settings.success( label );
-			}
-			this.toShow = this.toShow.add(label);
-		},
-		
-		errorsFor: function(element) {
-			return this.errors().filter("[for='" + this.idOrName(element) + "']");
-		},
-		
-		idOrName: function(element) {
-			return this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name);
-		},
-
-		checkable: function( element ) {
-			return /radio|checkbox/i.test(element.type);
-		},
-		
-		findByName: function( name ) {
-			// select by name and filter by form for performance over form.find("[name=...]")
-			var form = this.currentForm;
-			return $(document.getElementsByName(name)).map(function(index, element) {
-				return element.form == form && element.name == name && element  || null;
-			});
-		},
-		
-		getLength: function(value, element) {
-			switch( element.nodeName.toLowerCase() ) {
-			case 'select':
-				return $("option:selected", element).length;
-			case 'input':
-				if( this.checkable( element) )
-					return this.findByName(element.name).filter(':checked').length;
-			}
-			return value.length;
-		},
-	
-		depend: function(param, element) {
-			return this.dependTypes[typeof param]
-				? this.dependTypes[typeof param](param, element)
-				: true;
-		},
-	
-		dependTypes: {
-			"boolean": function(param, element) {
-				return param;
-			},
-			"string": function(param, element) {
-				return !!$(param, element.form).length;
-			},
-			"function": function(param, element) {
-				return param(element);
-			}
-		},
-		
-		optional: function(element) {
-			return !$.validator.methods.required.call(this, $.trim(element.value), element) && "dependency-mismatch";
-		},
-		
-		startRequest: function(element) {
-			if (!this.pending[element.name]) {
-				this.pendingRequest++;
-				this.pending[element.name] = true;
-			}
-		},
-		
-		stopRequest: function(element, valid) {
-			this.pendingRequest--;
-			// sometimes synchronization fails, make sure pendingRequest is never < 0
-			if (this.pendingRequest < 0)
-				this.pendingRequest = 0;
-			delete this.pending[element.name];
-			if ( valid && this.pendingRequest == 0 && this.formSubmitted && this.form() ) {
-				$(this.currentForm).submit();
-			} else if (!valid && this.pendingRequest == 0 && this.formSubmitted) {
-				$(this.currentForm).triggerHandler("invalid-form", [this]);
-			}
-		},
-		
-		previousValue: function(element) {
-			return $.data(element, "previousValue") || $.data(element, "previousValue", previous = {
-				old: null,
-				valid: true,
-				message: this.defaultMessage( element, "remote" )
-			});
-		}
-		
-	},
-	
-	classRuleSettings: {
-		required: {required: true},
-		email: {email: true},
-		url: {url: true},
-		date: {date: true},
-		dateISO: {dateISO: true},
-		dateDE: {dateDE: true},
-		number: {number: true},
-		numberDE: {numberDE: true},
-		digits: {digits: true},
-		creditcard: {creditcard: true}
-	},
-	
-	addClassRules: function(className, rules) {
-		className.constructor == String ?
-			this.classRuleSettings[className] = rules :
-			$.extend(this.classRuleSettings, className);
-	},
-	
-	classRules: function(element) {
-		var rules = {};
-		var classes = $(element).attr('class');
-		classes && $.each(classes.split(' '), function() {
-			if (this in $.validator.classRuleSettings) {
-				$.extend(rules, $.validator.classRuleSettings[this]);
-			}
-		});
-		return rules;
-	},
-	
-	attributeRules: function(element) {
-		var rules = {};
-		var $element = $(element);
-		
-		for (method in $.validator.methods) {
-			var value = $element.attr(method);
-			if (value) {
-				rules[method] = value;
-			}
-		}
-		
-		// maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs
-		if (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) {
-			delete rules.maxlength;
-		}
-		
-		return rules;
-	},
-	
-	metadataRules: function(element) {
-		if (!$.metadata) return {};
-		
-		var meta = $.data(element.form, 'validator').settings.meta;
-		return meta ?
-			$(element).metadata()[meta] :
-			$(element).metadata();
-	},
-	
-	staticRules: function(element) {
-		var rules = {};
-		var validator = $.data(element.form, 'validator');
-		if (validator.settings.rules) {
-			rules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {};
-		}
-		return rules;
-	},
-	
-	normalizeRules: function(rules, element) {
-		// handle dependency check
-		$.each(rules, function(prop, val) {
-			// ignore rule when param is explicitly false, eg. required:false
-			if (val === false) {
-				delete rules[prop];
-				return;
-			}
-			if (val.param || val.depends) {
-				var keepRule = true;
-				switch (typeof val.depends) {
-					case "string":
-						keepRule = !!$(val.depends, element.form).length;
-						break;
-					case "function":
-						keepRule = val.depends.call(element, element);
-						break;
-				}
-				if (keepRule) {
-					rules[prop] = val.param !== undefined ? val.param : true;
-				} else {
-					delete rules[prop];
-				}
-			}
-		});
-		
-		// evaluate parameters
-		$.each(rules, function(rule, parameter) {
-			rules[rule] = $.isFunction(parameter) ? parameter(element) : parameter;
-		});
-		
-		// clean number parameters
-		$.each(['minlength', 'maxlength', 'min', 'max'], function() {
-			if (rules[this]) {
-				rules[this] = Number(rules[this]);
-			}
-		});
-		$.each(['rangelength', 'range'], function() {
-			if (rules[this]) {
-				rules[this] = [Number(rules[this][0]), Number(rules[this][1])];
-			}
-		});
-		
-		if ($.validator.autoCreateRanges) {
-			// auto-create ranges
-			if (rules.min && rules.max) {
-				rules.range = [rules.min, rules.max];
-				delete rules.min;
-				delete rules.max;
-			}
-			if (rules.minlength && rules.maxlength) {
-				rules.rangelength = [rules.minlength, rules.maxlength];
-				delete rules.minlength;
-				delete rules.maxlength;
-			}
-		}
-		
-		// To support custom messages in metadata ignore rule methods titled "messages"
-		if (rules.messages) {
-			delete rules.messages
-		}
-		
-		return rules;
-	},
-	
-	// Converts a simple string to a {string: true} rule, e.g., "required" to {required:true}
-	normalizeRule: function(data) {
-		if( typeof data == "string" ) {
-			var transformed = {};
-			$.each(data.split(/\s/), function() {
-				transformed[this] = true;
-			});
-			data = transformed;
-		}
-		return data;
-	},
-	
-	// http://docs.jquery.com/Plugins/Validation/Validator/addMethod
-	addMethod: function(name, method, message) {
-		$.validator.methods[name] = method;
-		$.validator.messages[name] = message || $.validator.messages[name];
-		if (method.length < 3) {
-			$.validator.addClassRules(name, $.validator.normalizeRule(name));
-		}
-	},
-
-	methods: {
-
-		// http://docs.jquery.com/Plugins/Validation/Methods/required
-		required: function(value, element, param) {
-			// check if dependency is met
-			if ( !this.depend(param, element) )
-				return "dependency-mismatch";
-			switch( element.nodeName.toLowerCase() ) {
-			case 'select':
-				var options = $("option:selected", element);
-				return options.length > 0 && ( element.type == "select-multiple" || ($.browser.msie && !(options[0].attributes['value'].specified) ? options[0].text : options[0].value).length > 0);
-			case 'input':
-				if ( this.checkable(element) )
-					return this.getLength(value, element) > 0;
-			default:
-				return $.trim(value).length > 0;
-			}
-		},
-		
-		// http://docs.jquery.com/Plugins/Validation/Methods/remote
-		remote: function(value, element, param) {
-			if ( this.optional(element) )
-				return "dependency-mismatch";
-			
-			var previous = this.previousValue(element);
-			
-			if (!this.settings.messages[element.name] )
-				this.settings.messages[element.name] = {};
-			this.settings.messages[element.name].remote = typeof previous.message == "function" ? previous.message(value) : previous.message;
-			
-			param = typeof param == "string" && {url:param} || param; 
-			
-			if ( previous.old !== value ) {
-				previous.old = value;
-				var validator = this;
-				this.startRequest(element);
-				var data = {};
-				data[element.name] = value;
-				$.ajax($.extend(true, {
-					url: param,
-					mode: "abort",
-					port: "validate" + element.name,
-					dataType: "json",
-					data: data,
-					success: function(response) {
-						var valid = response === true;
-						if ( valid ) {
-							var submitted = validator.formSubmitted;
-							validator.prepareElement(element);
-							validator.formSubmitted = submitted;
-							validator.successList.push(element);
-							validator.showErrors();
-						} else {
-							var errors = {};
-							errors[element.name] = previous.message = response || validator.defaultMessage( element, "remote" );
-							validator.showErrors(errors);
-						}
-						previous.valid = valid;
-						validator.stopRequest(element, valid);
-					}
-				}, param));
-				return "pending";
-			} else if( this.pending[element.name] ) {
-				return "pending";
-			}
-			return previous.valid;
-		},
-
-		// http://docs.jquery.com/Plugins/Validation/Methods/minlength
-		minlength: function(value, element, param) {
-			return this.optional(element) || this.getLength($.trim(value), element) >= param;
-		},
-		
-		// http://docs.jquery.com/Plugins/Validation/Methods/maxlength
-		maxlength: function(value, element, param) {
-			return this.optional(element) || this.getLength($.trim(value), element) <= param;
-		},
-		
-		// http://docs.jquery.com/Plugins/Validation/Methods/rangelength
-		rangelength: function(value, element, param) {
-			var length = this.getLength($.trim(value), element);
-			return this.optional(element) || ( length >= param[0] && length <= param[1] );
-		},
-		
-		// http://docs.jquery.com/Plugins/Validation/Methods/min
-		min: function( value, element, param ) {
-			return this.optional(element) || value >= param;
-		},
-		
-		// http://docs.jquery.com/Plugins/Validation/Methods/max
-		max: function( value, element, param ) {
-			return this.optional(element) || value <= param;
-		},
-		
-		// http://docs.jquery.com/Plugins/Validation/Methods/range
-		range: function( value, element, param ) {
-			return this.optional(element) || ( value >= param[0] && value <= param[1] );
-		},
-		
-		// http://docs.jquery.com/Plugins/Validation/Methods/email
-		email: function(value, element) {
-			// contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
-			return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);
-		},
-	
-		// http://docs.jquery.com/Plugins/Validation/Methods/url
-		url: function(value, element) {
-			// contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/
-			return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);
-		},
-        
-		// http://docs.jquery.com/Plugins/Validation/Methods/date
-		date: function(value, element) {
-			return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
-		},
-	
-		// http://docs.jquery.com/Plugins/Validation/Methods/dateISO
-		dateISO: function(value, element) {
-			return this.optional(element) || /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value);
-		},
-	
-		// http://docs.jquery.com/Plugins/Validation/Methods/dateDE
-		dateDE: function(value, element) {
-			return this.optional(element) || /^\d\d?\.\d\d?\.\d\d\d?\d?$/.test(value);
-		},
-	
-		// http://docs.jquery.com/Plugins/Validation/Methods/number
-		number: function(value, element) {
-			return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);
-		},
-	
-		// http://docs.jquery.com/Plugins/Validation/Methods/numberDE
-		numberDE: function(value, element) {
-			return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value);
-		},
-		
-		// http://docs.jquery.com/Plugins/Validation/Methods/digits
-		digits: function(value, element) {
-			return this.optional(element) || /^\d+$/.test(value);
-		},
-		
-		// http://docs.jquery.com/Plugins/Validation/Methods/creditcard
-		// based on http://en.wikipedia.org/wiki/Luhn
-		creditcard: function(value, element) {
-			if ( this.optional(element) )
-				return "dependency-mismatch";
-			// accept only digits and dashes
-			if (/[^0-9-]+/.test(value))
-				return false;
-			var nCheck = 0,
-				nDigit = 0,
-				bEven = false;
-
-			value = value.replace(/\D/g, "");
-
-			for (n = value.length - 1; n >= 0; n--) {
-				var cDigit = value.charAt(n);
-				var nDigit = parseInt(cDigit, 10);
-				if (bEven) {
-					if ((nDigit *= 2) > 9)
-						nDigit -= 9;
-				}
-				nCheck += nDigit;
-				bEven = !bEven;
-			}
-
-			return (nCheck % 10) == 0;
-		},
-		
-		// http://docs.jquery.com/Plugins/Validation/Methods/accept
-		accept: function(value, element, param) {
-			param = typeof param == "string" ? param.replace(/,/g, '|') : "png|jpe?g|gif";
-			return this.optional(element) || value.match(new RegExp(".(" + param + ")$", "i")); 
-		},
-		
-		// http://docs.jquery.com/Plugins/Validation/Methods/equalTo
-		equalTo: function(value, element, param) {
-			return value == $(param).val();
-		}
-		
-	}
-	
-});
-
-// deprecated, use $.validator.format instead
-$.format = $.validator.format;
-
-})(jQuery);
-
-// ajax mode: abort
-// usage: $.ajax({ mode: "abort"[, port: "uniqueport"]});
-// if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort() 
-;(function($) {
-	var ajax = $.ajax;
-	var pendingRequests = {};
-	$.ajax = function(settings) {
-		// create settings for compatibility with ajaxSetup
-		settings = $.extend(settings, $.extend({}, $.ajaxSettings, settings));
-		var port = settings.port;
-		if (settings.mode == "abort") {
-			if ( pendingRequests[port] ) {
-				pendingRequests[port].abort();
-			}
-			return (pendingRequests[port] = ajax.apply(this, arguments));
-		}
-		return ajax.apply(this, arguments);
-	};
-})(jQuery);
-
-// provides cross-browser focusin and focusout events
-// IE has native support, in other browsers, use event caputuring (neither bubbles)
-
-// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation
-// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target 
-
-// provides triggerEvent(type: String, target: Element) to trigger delegated events
-;(function($) {
-	$.each({
-		focus: 'focusin',
-		blur: 'focusout'	
-	}, function( original, fix ){
-		$.event.special[fix] = {
-			setup:function() {
-				if ( $.browser.msie ) return false;
-				this.addEventListener( original, $.event.special[fix].handler, true );
-			},
-			teardown:function() {
-				if ( $.browser.msie ) return false;
-				this.removeEventListener( original,
-				$.event.special[fix].handler, true );
-			},
-			handler: function(e) {
-				arguments[0] = $.event.fix(e);
-				arguments[0].type = fix;
-				return $.event.handle.apply(this, arguments);
-			}
-		};
-	});
-	$.extend($.fn, {
-		delegate: function(type, delegate, handler) {
-			return this.bind(type, function(event) {
-				var target = $(event.target);
-				if (target.is(delegate)) {
-					return handler.apply(target, arguments);
-				}
-			});
-		},
-		triggerEvent: function(type, target) {
-			return this.triggerHandler(type, [$.event.fix({ type: type, target: target })]);
-		}
-	})
-})(jQuery);
--- a/web/hdabo/templates/all_tags.html	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,101 +0,0 @@
-{% extends "hdabo_base.html" %}
-    {% block title %}HDA - BO : Tous les tags{% endblock %}
-
-    {% block js_import %}
-    {{block.super}}
-    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery-ui.min.js"></script>
-    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.jeditable.js"></script>
-    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.tablednd_0_5.js"></script>
-    {% endblock %}
-    
-    {% block js_declaration %}
-    {{block.super}}
-    <script type="text/javascript">
-    
-    var global_csrf_token = "{{ csrf_token }}";
-    var static_url = "{{STATIC_URL}}";
-    var tag_up_down_url = "{% url hdabo.views.tag_up_down %}";
-    var remove_tag_from_list_url = "{% url hdabo.views.remove_tag_from_list %}";
-    var modify_tag_url = "{% url hdabo.views.modify_tag %}";
-    var reset_wp_info_url = "{% url hdabo.views.reset_wikipedia_info %}";
-    var add_tag_url = "{% url hdabo.views.add_tag %}";
-    var remove_wp_link_url = "{% url hdabo.views.remove_wp_link %}";
-    var update_tag_alias_url = "{% url hdabo.views.update_tag_alias %}";
-    var update_tag_category_url = "{% url hdabo.views.update_tag_category %}";
-    var categories_list = '{{categories|safe}}';
-    
-    $(document).ready(function(){
-        init_tags_events();
-    });
-    </script>
-    {% endblock %}
-
-    {% block css_import %}
-    {{block.super}}
-    <link rel="stylesheet" href="{{STATIC_URL}}hdabo/css/smoothness/jquery-ui-1.8.13.custom.css" type="text/css"/>
-    {% endblock %}
-
-    {% block css_declaration %}
-    {{block.super}}
-    <style type="text/css">
-    .ui-autocomplete {
-        max-height: 100px;
-        overflow-y: auto;
-        /* prevent horizontal scrollbar */
-        overflow-x: hidden;
-        /* add padding to account for vertical scrollbar */
-        padding-right: 20px;
-    }
-    </style>
-    {% endblock %}
-    
-    
-    {% block content %}
-    {{block.super}}
-    <form method="POST" action="{% url hdabo.views.all_tags %}">
-    {% csrf_token %}
-    <p>Chercher : 
-    {% for s in search_def %}
-    <a href="{% url hdabo.views.all_tags num_page=1, nb_by_page=nb_by_page, sort=sort, searched=s.1 %}">{{s.0}}</a>
-    {% endfor %}
-    <input type="text" name="searched" value="{% if searched %}{{searched}}{% endif %}" id="searched" />
-    </p>
-    <p>Tags {{ current_page.start_index }} à {{ current_page.end_index }} sur {{ nb_total }}</p>
-    <div id="count_nav_top"><p>
-        {% if searched and searched != "" %}
-            <a href="{% url hdabo.views.all_tags num_page=1, nb_by_page=nb_by_page, sort=sort, searched=searched %}">&lt;&lt;</a>&nbsp;&nbsp;
-            <a href="{% url hdabo.views.all_tags num_page=prev_page, nb_by_page=nb_by_page, sort=sort, searched=searched %}">&lt;</a>&nbsp;&nbsp;
-            {{ num_page }}/{{ last_page }}&nbsp;&nbsp;
-            <a href="{% url hdabo.views.all_tags num_page=next_page, nb_by_page=nb_by_page, sort=sort, searched=searched %}">&gt;</a>&nbsp;&nbsp;
-            <a href="{% url hdabo.views.all_tags num_page=last_page, nb_by_page=nb_by_page, sort=sort, searched=searched %}">&gt;&gt;</a></p>
-        {% else %}
-            <a href="{% url hdabo.views.all_tags num_page=1, nb_by_page=nb_by_page, sort=sort %}">&lt;&lt;</a>&nbsp;&nbsp;
-            <a href="{% url hdabo.views.all_tags num_page=prev_page, nb_by_page=nb_by_page, sort=sort %}">&lt;</a>&nbsp;&nbsp;
-            {{ num_page }}/{{ last_page }}&nbsp;&nbsp;
-            <a href="{% url hdabo.views.all_tags num_page=next_page, nb_by_page=nb_by_page, sort=sort %}">&gt;</a>&nbsp;&nbsp;
-            <a href="{% url hdabo.views.all_tags num_page=last_page, nb_by_page=nb_by_page, sort=sort %}">&gt;&gt;</a>
-        {% endif %}</p>
-    </div>
-    <input type="hidden" name="num_page" value="{{num_page}}" id="num_page" />
-    <input type="hidden" name="nb_by_page" value="{{nb_by_page}}" id="nb_by_page" />
-    <input type="hidden" name="searched_str" value="{% if searched %}{{searched}}{% endif %}" id="searched_str" />
-    <input type="hidden" name="sort" value="{% if sort %}{{sort}}{% endif %}" id="sort" />
-    <div id="tag_table_container">
-    {% include "partial/all_tags_table.html" %}
-    </div>
-    <div id="count_nav_bottom"><p>
-        {% if searched and searched != "" %}
-            <a href="{% url hdabo.views.all_tags num_page=1, nb_by_page=nb_by_page, sort=sort, searched=searched %}">&lt;&lt;</a>&nbsp;&nbsp;
-            <a href="{% url hdabo.views.all_tags num_page=prev_page, nb_by_page=nb_by_page, sort=sort, searched=searched %}">&lt;</a>&nbsp;&nbsp;
-            {{ num_page }}/{{ last_page }}&nbsp;&nbsp;
-            <a href="{% url hdabo.views.all_tags num_page=next_page, nb_by_page=nb_by_page, sort=sort, searched=searched %}">&gt;</a>&nbsp;&nbsp;
-            <a href="{% url hdabo.views.all_tags num_page=last_page, nb_by_page=nb_by_page, sort=sort, searched=searched %}">&gt;&gt;</a></p>
-        {% else %}
-            <a href="{% url hdabo.views.all_tags num_page=1, nb_by_page=nb_by_page, sort=sort %}">&lt;&lt;</a>&nbsp;&nbsp;
-            <a href="{% url hdabo.views.all_tags num_page=prev_page, nb_by_page=nb_by_page, sort=sort %}">&lt;</a>&nbsp;&nbsp;
-            {{ num_page }}/{{ last_page }}&nbsp;&nbsp;
-            <a href="{% url hdabo.views.all_tags num_page=next_page, nb_by_page=nb_by_page, sort=sort %}">&gt;</a>&nbsp;&nbsp;
-            <a href="{% url hdabo.views.all_tags num_page=last_page, nb_by_page=nb_by_page, sort=sort %}">&gt;&gt;</a>
-        {% endif %}</p>
-    </div>
-    {% endblock %}
--- a/web/hdabo/templates/generic_sheet.html	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-{% extends "hdabo_base.html" %}
-    {% block title %}HDA - BO : Fiches pour {{ orga_name }}{% endblock %}
-
-    {% block js_import %}
-    {{block.super}}
-    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.tablednd_0_5.js"></script>
-    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery-ui.min.js"></script>
-    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.jeditable.js"></script>
-    {% endblock %}
-    
-    {% block js_declaration %}
-    {{block.super}}
-    {% if valid != "2" %}
-    <script type="text/javascript">
-    
-    var global_csrf_token = "{{ csrf_token }}";
-    var static_url = "{{STATIC_URL}}";
-    var tag_up_down_url = "{% url hdabo.views.tag_up_down %}";
-    var remove_tag_from_list_url = "{% url hdabo.views.remove_tag_from_list %}";
-    var modify_tag_url = "{% url hdabo.views.modify_tag_datasheet %}";
-    var reset_wp_info_url = "{% url hdabo.views.reset_wikipedia_info %}";
-    var reorder_tag_datasheet_url = "{% url hdabo.views.reorder_tag_datasheet %}";
-    var add_tag_url = "{% url hdabo.views.add_tag %}";
-    var remove_wp_link_url = "{% url hdabo.views.remove_wp_link %}";
-    var validate_datasheet_url = "{% url hdabo.views.validate_datasheet %}";
-    var update_tag_alias_url = "{% url hdabo.views.update_tag_alias %}";
-    var update_tag_category_url = "{% url hdabo.views.update_tag_category %}";
-    var categories_list = '{{categories|safe}}';
-    
-    $(document).ready(function(){
-        init_tags_events();
-        init_datasheet_events();
-    });
-    </script>
-    {% endif %}
-    {% endblock %}
-
-    {% block css_import %}
-    {{block.super}}
-    <link rel="stylesheet" href="{{STATIC_URL}}hdabo/css/smoothness/jquery-ui-1.8.13.custom.css" type="text/css"/>
-    {% endblock %}
-
-    {% block css_declaration %}
-    {{block.super}}
-    <style type="text/css">
-    .ui-autocomplete {
-        max-height: 100px;
-        overflow-y: auto;
-        /* prevent horizontal scrollbar */
-        overflow-x: hidden;
-        /* add padding to account for vertical scrollbar */
-        padding-right: 20px;
-    }
-    </style>
-    {% endblock %}
-    
-    
-    {% block content %}
-    {{block.super}}
-    <p>
-    {% if tag %} Fiche(s) concernées par le tag <b>{{ tag.label }}</b>
-    {% else %} Fiche(s) {% if valid %}<b>validées</b>{% else %}<b>non validées</b>{% endif %} pour l'organisation <b>{{ orga_name }}</b>
-    {% endif %} : {{nb_sheets}} fiche(s)</p>
-    <div id="count_nav_top">
-        <p><a href="{% url hdabo.views.display_datasheet ds_id=zero_id %}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index=0">&lt;&lt;</a>&nbsp;&nbsp;
-           <a href="{% url hdabo.views.display_datasheet ds_id=prev_id%}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index={{prev_index}}">&lt;</a>&nbsp;&nbsp;
-           {{displayed_index}}/{{nb_sheets}}&nbsp;&nbsp;
-           <a href="{% url hdabo.views.display_datasheet ds_id=next_id%}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index={{next_index}}">&gt;</a>&nbsp;&nbsp;
-           <a href="{% url hdabo.views.display_datasheet ds_id=last_id%}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index={{last_index}}">&gt;&gt;</a></p>
-    </div>
-    <table>
-    <tr class="imageline {% cycle 'hdabosimpleevenline' 'hdabosimpleoddline' %}"><td>
-    {% include "partial/one_sheet.html" %}
-    </td></tr>
-    </table>
-    <div id="count_nav_bottom">
-        <p><a href="{% url hdabo.views.display_datasheet ds_id=zero_id %}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index=0">&lt;&lt;</a>&nbsp;&nbsp;
-           <a href="{% url hdabo.views.display_datasheet ds_id=prev_id%}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index={{prev_index}}">&lt;</a>&nbsp;&nbsp;
-           {{displayed_index}}/{{nb_sheets}}&nbsp;&nbsp;
-           <a href="{% url hdabo.views.display_datasheet ds_id=next_id%}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index={{next_index}}">&gt;</a>&nbsp;&nbsp;
-           <a href="{% url hdabo.views.display_datasheet ds_id=last_id%}?{% if tag %}tag={{tag.id}}{% endif %}&nb_sheets={{nb_sheets}}&index={{last_index}}">&gt;&gt;</a></p>
-    </div>
-    {% endblock %}
--- a/web/hdabo/templates/hdabo_base.html	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-{% load i18n %}
-{% comment %}{% load logintag %}{% endcomment %}
-{% comment %}{% load navigation %}{% endcomment %}
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{{LANGUAGE_CODE}}" lang="{{LANGUAGE_CODE}}">
-<head>
-{% block head %}
-	<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
-    <meta http-equiv="content-language" content="{{LANGUAGE_CODE}}" />
-    <link rel="SHORTCUT ICON" href="{{STATIC_URL}}hdabo/img/favicon.ico" />
-    <title>{% block title %}HDA-BO{% endblock %}</title>
-    {% block js_import %}
-    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/hdabo.js"></script>
-    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.min.js"></script>
-    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.nyroModal.min.js"></script>
-    <!--[if IE 6]>
-    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.nyroModal-ie6.min.js"></script>
-    <![endif]-->
-    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.qtip.min.js"></script>
-    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.validate.js" ></script>
-    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.textchange.min.js" ></script>
-    {% endblock %}
-    
-    {% block css_declaration %}
-    <style type="text/css">
-		.rounded {
-			behavior:url("{{STATIC_URL}}hdabo/css/border-radius.htc");
-		}
-	</style>
-	{% endblock %}
-    
-    {% block css_import %}
-    
-    <link rel="stylesheet" href="{{STATIC_URL}}hdabo/css/style.css" type="text/css"/>
-    <link rel="stylesheet" href="{{STATIC_URL}}hdabo/css/nyroModal.css" type="text/css"/>
-    {% endblock %}
-    
-    {% block js_declaration %}
-    {% endblock %}
-    
-{% endblock %}
-</head>
-<body>
-{% block body %}
-<div class="container">
-<div id="header">      
-    {% block header %}
-    <div id="header_left">
-    	<p><a href="{% url hdabo.views.home %}">HDA<span class="hda_blue">BO</span></a></p>
-    </div>
-    {% endblock %}
-</div>
-<div id="content" class="span-24 last">
-    <div id="toolbar">
-    {% block toolbar %}
-    {% if user.is_authenticated %}
-    <ul><li><a href="{% url hdabo.views.home %}">Home</a></li>
-    <li><a href="{% url hdabo.views.all_tags %}">Tous les tags</a></li>
-    <li><a href="{% url haystack_search %}">Recherche</a></li>
-    <li><span style="float:right;">{{user.username}}&nbsp;|&nbsp;<a href="{% url django.contrib.auth.views.logout_then_login %}" >Se déconnecter</a>{% if user.is_staff %}&nbsp;|&nbsp;<a href="{% url admin:index %}" >admin</a>{% endif %}</span></li>
-    </ul>
-    {% endif %}
-    {% endblock %}
-    </div>
-    <div id="inner_content">
-    {% block content %}
-    {% endblock %}
-    </div>
-</div>
-<div id="footer" class="span-24 last">
-    {% block footer %}
-    <div class="footer_img">
-    <a href="http://www.iri.centrepompidou.fr" target="_blank"><img src="{{STATIC_URL}}hdabo/img/logo_IRI_footer.png" alt="Logo IRI" /></a>
-    </div>
-    <div style="float: right; text-align: right;" class="small" id="copyright_version">
-        <div>©2011 <a style="text-decoration: none; color: #4F5155;" href="http://www.iri.centrepompidou.fr" target="_blank">IRI</a></div>
-        <div id="versionwrapper"><span class="version" id="version">{{VERSION}}</span></div>
-    </div>
-    {% endblock %}
-</div>
-</div>
-{% endblock %}
-</body>
-</html>
--- a/web/hdabo/templates/list_for_orga.html	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-{% extends "hdabo_base.html" %}
-    {% block title %}HDA - BO : Fiches pour {{ orga_name }}{% endblock %}
-
-    {% block js_import %}
-    {{block.super}}
-    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.tablednd_0_5.js"></script>
-    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery-ui.min.js"></script>
-    <script type="text/javascript" src="{{STATIC_URL}}hdabo/js/jquery.jeditable.js"></script>
-    {% endblock %}
-    
-    {% block js_declaration %}
-    {{block.super}}
-    {% if valid != "2" %}
-    <script type="text/javascript">
-    
-    var global_csrf_token = "{{ csrf_token }}";
-    var static_url = "{{STATIC_URL}}";
-    var tag_up_down_url = "{% url hdabo.views.tag_up_down %}";
-    var remove_tag_from_list_url = "{% url hdabo.views.remove_tag_from_list %}";
-    var modify_tag_url = "{% url hdabo.views.modify_tag_datasheet %}";
-    var reset_wp_info_url = "{% url hdabo.views.reset_wikipedia_info %}";
-    var add_tag_url = "{% url hdabo.views.add_tag %}";
-    var remove_wp_link_url = "{% url hdabo.views.remove_wp_link %}";
-    var validate_datasheet_url = "{% url hdabo.views.validate_datasheet %}";
-    var update_tag_alias_url = "{% url hdabo.views.update_tag_alias %}";
-    var update_tag_category_url = "{% url hdabo.views.update_tag_category %}";
-    var categories_list = '{{categories|safe}}';
-    
-    $(document).ready(function(){
-        init_tags_events();
-        init_datasheet_events();
-    });
-    </script>
-    {% endif %}
-    {% endblock %}
-
-    {% block css_import %}
-    {{block.super}}
-    <link rel="stylesheet" href="{{STATIC_URL}}hdabo/css/smoothness/jquery-ui-1.8.13.custom.css" type="text/css"/>
-    {% endblock %}
-
-    {% block css_declaration %}
-    {{block.super}}
-    <style type="text/css">
-    .ui-autocomplete {
-        max-height: 100px;
-        overflow-y: auto;
-        /* prevent horizontal scrollbar */
-        overflow-x: hidden;
-        /* add padding to account for vertical scrollbar */
-        padding-right: 20px;
-    }
-    </style>
-    {% endblock %}
-    
-    
-    {% block content %}
-    {{block.super}}
-    <p>Fiche(s) {% if valid == "1" %}<b>validées</b>{% else %}{% if valid != "2" %}<b>non validées</b>{% endif %}{% endif %}
-    pour l'organisation <b>{{ orga_name }}</b> : {{nb_sheets}} fiche(s)</p>
-    {% if valid != "2" %}
-    <div id="count_nav_top">
-        <p><a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=0 %}">&lt;&lt;</a>&nbsp;&nbsp;
-           <a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=prev_index %}">&lt;</a>&nbsp;&nbsp;
-           {{displayed_index}}/{{nb_sheets}}&nbsp;&nbsp;
-           <a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=next_index %}">&gt;</a>&nbsp;&nbsp;
-           <a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=last_index %}">&gt;&gt;</a></p>
-    </div>
-    {% endif %}
-    <table>
-    {% for ds in datasheets %}
-    <tr class="imageline {% cycle 'hdabosimpleevenline' 'hdabosimpleoddline' %}"><td>
-    {% include "partial/one_sheet.html" %}
-    </td></tr>
-    {% endfor %}
-    </table>
-    {% if valid != "2" %}
-    <div id="count_nav_bottom">
-        <p><a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=0 %}">&lt;&lt;</a>&nbsp;&nbsp;
-           <a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=prev_index %}">&lt;</a>&nbsp;&nbsp;
-           {{displayed_index}}/{{nb_sheets}}&nbsp;&nbsp;
-           <a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=next_index %}">&gt;</a>&nbsp;&nbsp;
-           <a href="{% url hdabo.views.list_for_orga orga_id=orga_id, valid=valid, start_index=last_index %}">&gt;&gt;</a></p>
-    </div>
-    {% endif %}
-    {% endblock %}
--- a/web/hdabo/templates/organisation_list.html	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-{% extends "hdabo_base.html" %}
-    {% block title %}HDA-BO : Liste des organisations{% endblock %}
-    
-    {% block content %}
-    {{block.super}}
-    <p>Afficher les fiches non validées pour les lieux suivants :</p>
-    <table>
-    <tr>
-        <th class="contenttitle">Nom</th>
-        <th class="contenttitle">Fiches non validées</th>
-        <th class="contenttitle">Fiches validées</th>
-        <th class="contenttitle">Toutes les fiches</th>
-    </tr>
-    {% for item in organisations %}
-    <tr class="imageline {% cycle 'hdabooddline' 'hdaboevenline'%}">
-        <td class="contenttitle">{{ item.organisation.name|default:"_" }} (<a href="{{item.organisation.website}}" target="_blank">lien</a>)</td>
-        <td class="contenttitle">
-        {% if item.nb_unval > 0 %}
-        <a class="contenttitlelink" href="{% url hdabo.views.display_datasheet ds_id=item.first_id_unval %}">{{item.nb_unval}}</a>
-        {% else %}0{% endif %}</td>
-        <td class="contenttitle">
-        {% if item.nb_val > 0 %}
-        <a class="contenttitlelink" href="{% url hdabo.views.display_datasheet ds_id=item.first_id_val %}">{{item.nb_val}}</a>
-        {% else %}0{% endif %}</td>
-        <td class="contenttitle">
-        {% if item.nb_all > 0 %}
-        <a class="contenttitlelink" href="{% url hdabo.views.list_for_orga orga_id=item.organisation.id valid=2 %}">{{item.nb_all}}</a>
-        {% else %}0{% endif %}</td>
-    </tr>
-    {% endfor %}
-    </table>
-    {% endblock %}
--- a/web/hdabo/templates/partial/all_tags_table.html	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-{% block tag_table %}
-	<table id="all_tags_table">
-    <tr><th>id</th>
-        <th>
-        {% if sort|slice:"1:" != "lab" %}
- 	        {% if searched and searched != "" %}
-	            <a href="{% url hdabo.views.all_tags num_page='1', nb_by_page=nb_by_page, sort='+lab', searched=searched %}">label</a>
-	        {% else %}
-	            <a href="{% url hdabo.views.all_tags num_page='1', nb_by_page=nb_by_page, sort='+lab' %}">label</a>
-	        {% endif %}
-        {% else %}label &nbsp;{% if searched and searched != "" %}<a href="{% url hdabo.views.all_tags  num_page='1', nb_by_page=nb_by_page, sort=reverse_sort, searched=searched %}">{% else %}<a href="{% url hdabo.views.all_tags  num_page='1', nb_by_page=nb_by_page, sort=reverse_sort %}">{% endif %}<img src="{{STATIC_URL}}hdabo/img/sort-{% if sort|first == '+' %}asc{% else %}desc{% endif %}.png"/></a>{% endif %}
-        </th>
-        <th>original_label</th>
-        <th class="text_centered">Lien W</th>
-        <th class="text_centered">Lien D</th>
-        <th>Catégorie</th>
-        <th class="large_25 text_centered">Supprimer<br/>le lien W</th>
-        <th>Alias</th>
-        <th class="text_centered">Nb de<br/>fiches</th>
-        <th>
-        {% if sort|slice:"1:" != "pop" %}
- 	        {% if searched and searched != "" %}
-	            <a href="{% url hdabo.views.all_tags num_page='1', nb_by_page=nb_by_page, sort='+pop', searched=searched %}">Popularité</a>
-	        {% else %}
-	            <a href="{% url hdabo.views.all_tags num_page='1', nb_by_page=nb_by_page, sort='+pop' %}">Popularité</a>
-	        {% endif %}
-        {% else %}Popularité &nbsp;{% if searched and searched != "" %}<a href="{% url hdabo.views.all_tags  num_page='1', nb_by_page=nb_by_page, sort=reverse_sort, searched=searched %}">{% else %}<a href="{% url hdabo.views.all_tags  num_page='1', nb_by_page=nb_by_page, sort=reverse_sort %}">{% endif %}<img src="{{STATIC_URL}}hdabo/img/sort-{% if sort|first == '+' %}asc{% else %}desc{% endif %}.png"/></a>{% endif %}
-        </th></tr>
-    {% for tag in tags %}
-    <tr class="imageline {% cycle 'hdabooddline' 'hdaboevenline' %}">
-        <td class="reset_wp_info">{{tag.id}}</td>
-        <td class="{{tag.url_status_text}} wikipediatag" id="{{tag.id}}" >{{tag.label}}</td>
-        <td>{{tag.original_label}}</td>
-        <td class="text_centered">
-            {% if tag.wikipedia_url and tag.wikipedia_url != ""  %}
-            <a href="{{tag.wikipedia_url}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/arrow_right.png" ></a>
-            {% else %}
-            <a href="http://fr.wikipedia.org/w/index.php?search={{tag.label}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/wikipedia_search.png" ></a>
-            {% endif %}
-        </td>
-        <td class="text_centered">
-            {% if tag.dbpedia_uri and tag.dbpedia_uri != ""  %}
-            <a href="{{tag.dbpedia_uri}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/arrow_green_right.png" ></a>
-            {% else %}
-            &nbsp;
-            {% endif %}
-        </td>
-        <td class="tag_category" id="{{tag.id}}">{% if tag.category %}{{ tag.category }}{% endif %}</td>
-        <td class="text_centered"><img src="{{STATIC_URL}}hdabo/img/red_cross.png" class="remove_wp_link" id="{{tag.id}}" alt="{{tag.label}}" /></td>
-        <td class="tag_alias" id="{{tag.id}}" >{% if tag.alias %}{{tag.alias}}{% endif %}</td>
-        <td class="text_centered">
-        {% if tag.num_ds > 0 %}
-        	<a href="{% url hdabo.views.display_datasheet %}?tag={{tag.id}}" >{{tag.num_ds}}</a>
-		{% else %}
-            {{tag.num_ds}}
-        {% endif %}
-        </td>
-        <td class="text_centered">{{tag.popularity}}</td></tr>
-    {% endfor %}
-    </table>
-{% endblock %}
--- a/web/hdabo/templates/partial/one_sheet.html	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-{% block one_sheet %}
-<div class="complete_sheet">
-    <div class="left_sheet">
-        <p><b>id hda</b><br/>{{ds.hda_id}}</p>
-        <p><b>Titre</b><br><span class="sheet_title">{{ds.title}}</span></p>
-        <p><b>Description</b><br/>{{ds.description}}</p>
-        <p><b>Url</b><br/><a href="{{ds.url}}" target="_blank">{{ds.url}}</a></p>
-        <p><b>Domaine artistique</b><br/>{{ds.domains_text}}</p>
-        <p><b>Périodes Primaire</b><br/>{{ds.primary_periods_text}}</p>
-        <p><b>Périodes Collège</b><br/>{{ds.college_periods_text}}</p>
-        <p><b>Périodes Lycée</b><br/>{{ds.highschool_periods_text}}</p>
-        <p><b>Liste de référence du primaire</b><br/>{{ds.primary_themes_text}}</p>
-        <p><b>Thèmes Collège</b><br/>{{ds.college_themes_text}}</p>
-        <p><b>Thèmes Lycée</b><br/>{{ds.highschool_themes_text}}</p>
-        <p><b>Ville</b><br/>{{ds.town_text}}</p>
-        <p><b>Format</b><br/>{{ds.format}}</p>
-        <table><tr><th>Date de création</th><th>Date de modification</th></tr>
-        <tr><td>{{ds.original_creation_date|date:"d/m/Y"}}</td><td>{{ds.modification_datetime|date:"d/m/Y"}}</td></tr></table>
-        {# <p><b>original_modification_date</b><br/>{{ds.original_modification_date|date:"d/m/Y"}}</p> #}
-    </div>
-    <div class="right_sheet">
-        <div id="tags_commands" style="float:left;width: 100%" >
-	        <div style="float:left;"><input type="radio" name="gr_validated{{ds.hda_id}}" id="not_validated" value="not_validated" {% if not ds.validated %}checked{% endif %} {% if valid == "2" %}disabled{% endif %} />En cours
-	        <input type="radio" name="gr_validated{{ds.hda_id}}" id="validated" value="validated" {% if ds.validated %}checked{% endif %} {% if valid == "2" %}disabled{% endif %} />Validé
-	        {% if ds.validated %}
-	        par {{ds.validator.username}} le {{ds.validation_date|date:"d/m/Y"}}
-	        {% endif %}
-	        </div>
-	        {% if valid != "2" %}
-	        <div style="float:right;" id="tags_actions">
-	          <span>Trier les tags : <input type="image" src="{{STATIC_URL}}hdabo/img/sort-descending.png" width="16" height="16" name="trier" id="tags_sort" /></span>
-	          <span>Ajouter un tag : <input type="text" name="wp_search" id="wp_search" size="35" /> <span id="ok_search" class="hand_cursor"><b>OK</b></span></span>
-	        </div>
-	        {% endif %}
-	        {% csrf_token %}
-	        <input type="hidden" name="datasheet_id" value="{{ds.hda_id}}" id="datasheet_id" />
-        </div>
-        <div id="tag_table_container" style="float:left; width: 100%">
-        {% include "partial/tag_table.html" %}
-        </div>
-    </div>
-</div>
-{% endblock %}
--- a/web/hdabo/templates/partial/tag_table.html	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-{% block tag_table %}
-	<table id="tag_table"><tr class="nodrop nodrag">
-        {% if ordered_tags %}<th>#</th>{% endif %}
-        {% if valid != "2" and ordered_tags %}
-        <th><img src="{{STATIC_URL}}hdabo/img/arrow_up_down.png"/></th>
-        {% endif %}
-        <th>id</th>
-        <th>label</th>
-        {% comment %}<th>original_label</th>{% endcomment %}
-        <th class="text_centered">Lien W</th>
-        <th class="text_centered">pLien W</th>
-        <th class="text_centered">Lien D</th>
-        <th>Catégorie</th>
-        {% if ordered_tags %}<th class="large_25 text_centered">Supprimer<br/>le lien W</th>{% endif %}
-        <th>Alias</th>
-        {% if ordered_tags %}<th class="large_25 text_centered">Retirer le tag</th>{% endif %}</tr>
-    {% if ordered_tags %}
-    	{# ordered_tags is a list of TaggedSheet #}
-        {% for t in ordered_tags %}
-            <tr class="imageline {% cycle 'hdabooddline' 'hdaboevenline' %}" id="{{forloop.counter}}">
-            <td>{{forloop.counter}}</td>
-            {% if valid != "2" %}
-            <td class="updown_td text_centered"><img src="{{STATIC_URL}}hdabo/img/arrow_up_down.png" class="updown" alt="updown" id={{t.tag.id}} pos="{{forloop.counter0}}"></td>
-            {% endif %}
-            <td>{{t.tag.id}}</td>
-            <td class="{{t.tag.url_status_text}} wikipediatag" id="{{t.tag.id}}" >{{t.tag.label}}</td>
-            {% comment %}<td>{{t.tag.original_label}}</td>{% endcomment %}
-            <td class="text_centered">
-	            {% if t.tag.wikipedia_url and t.tag.wikipedia_url != ""  %}
-	            <a href="{{t.tag.wikipedia_url}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/arrow_right.png" ></a>
-	            {% else %}
-	            <a href="http://fr.wikipedia.org/w/index.php?search={{t.tag.label}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/wikipedia_search.png" ></a>
-	            {% endif %}
-	        </td>
-	        <td class="text_centered">
-                {% if t.wikipedia_revision_id  %}
-                <a href="{{t.wikipedia_verion_permalink}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/clock_arrow.png" ></a>
-                {% else %}
-                &nbsp;
-                {% endif %}
-	        </td>
-	        <td class="text_centered">
-	            {% if t.tag.dbpedia_uri and t.tag.dbpedia_uri != ""  %}
-	            <a href="{{t.tag.dbpedia_uri}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/arrow_green_right.png" ></a>
-	            {% else %}
-	            &nbsp;
-	            {% endif %}
-            </td>
-            <td class="tag_category" id="{{t.tag.id}}">{% if t.tag.category %}{{ t.tag.category }}{% endif %}</td>
-            <td class="text_centered"><img src="{{STATIC_URL}}hdabo/img/red_cross.png" class="remove_wp_link" id="{{t.tag.id}}" alt="{{t.tag.label}}" /></td>
-            <td>{% if t.tag.alias %}{{t.tag.alias}}{% endif %}</td>
-            <td class="text_centered"><img src="{{STATIC_URL}}hdabo/img/tag_remove.png" class="remove_tag_from_list" id="{{t.tag.id}}" alt="{{t.tag.label}}" /></td></tr>
-        {% endfor %}
-    {% else %}
-    	{# ds is a DataSheet #}
-        {% for t in ds.tags.all %}
-            <tr class="imageline {% cycle 'hdabooddline' 'hdaboevenline' %}">
-            <td>{{t.id}}</td>
-            <td class="{{t.url_status_text}}">{{t.label}}</td>
-            {% comment %}<td>{{t.original_label}}</td>{% endcomment %}
-            <td class="text_centered">
-	            {% if t.wikipedia_url and t.wikipedia_url != ""  %}
-	            <a href="{{t.wikipedia_url}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/arrow_right.png" ></a>
-	            {% else %}
-	            <a href="http://fr.wikipedia.org/w/index.php?search={{t.label}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/wikipedia_search.png" ></a>
-	            {% endif %}
-	        </td>
-	        <td class="text_centered">
-                {% if t.wikipedia_revision_id  %}
-                <a href="{{t.wikipedia_verion_permalink}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/clock_arrow.png" ></a>
-                {% else %}
-                &nbsp;
-                {% endif %}
-            </td>	        
-	        <td class="text_centered">
-                {% if t.dbpedia_uri and t.dbpedia_uri != ""  %}
-                <a href="{{t.dbpedia_uri}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/arrow_green_right.png" ></a>
-                {% else %}
-                &nbsp;
-                {% endif %}
-            </td>
-            <td>{% if t.category %}{{ t.category }}{% endif %}</td>
-            <td>{% if t.alias %}{{ t.alias }}{% endif %}</td></tr>
-        {% endfor %}
-    {% endif %}
-    </table>
-{% endblock %}
--- a/web/hdabo/templates/registration/login.html	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-{% extends "hdabo_base.html" %}
-{% load i18n %}
-    {% block content %}
-    {{block.super}}
-    {% if form.errors %}
-        <p class="error">{% trans "Sorry, that's not a valid username or password." %}</p>
-    {% endif %}
-       <div class="span-24 last">
-         <form action="" method='post' id="login-form">
-             <div id="loginform_div" class="span-12">
-             {% csrf_token %}
-             <input type="hidden" name="next" value="{{ next }}" />
-             <div id="login_fields_list">
-             <table>
-             {{form.as_table}}
-             </table>
-             </div>
-             <div>
-                 <a href="{% url django.contrib.auth.views.password_reset  %}" >{% trans "Forget password?" %}</a>
-             </div>
-             <div id="submitcontent-buttons-login" class="span-24 last">
-                 <button class="button"type="submit" value="login">{% trans "login" %}</button>
-             </div>
-             </div>
-         </form>
-     </div> 
-    {% endblock %}
-    
\ No newline at end of file
--- a/web/hdabo/templates/search/indexes/hdabo/datasheet_text.txt	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-{{ object.title }}
-{{ object.description }}
-{{ object.tags_text }}
-
--- a/web/hdabo/templates/search/search.html	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-{% extends 'hdabo_base.html' %}
-
-{% block content %}
-    <h2>Recherche</h2>
-    
-    <div id="search_form">
-    <form method="get" action=".">
-        <table>
-            <tr>
-                <th><label for="id_q">Recherche&nbsp:</label></th>
-                <td><input type="text" name="q" id="id_q" value="{{query}}"></td>
-            </tr>            
-            <tr>
-                <td>&nbsp;</td>
-                <td>
-                    <input type="submit" value="Rechercher">
-                </td>
-            </tr>
-        </table>
-     </form>
-     </div>
-    <div id="search_results">
-        {% if query %}
-            <h3>Résultats</h3>
-            <div id="page_number">Page {{page.number}}/{{paginator.num_pages}}</div>
-            <table id="search_result">
-            {% for result in page.object_list %}
-                <tr>
-                    <th class="result_counter">{{forloop.counter0|add:page.start_index}}.</th>
-	                <td>
-	                    <a href="{{ result.object.get_absolute_url }}" class="result_link" >{{ result.object.title }}</a>
-	                </td>
-                </tr>
-            
-            {% empty %}
-                <tr><td>Pas de résultats.</td></tr>
-            {% endfor %}
-            </table>
-
-            {% if page.has_previous or page.has_next %}
-                <div id="search_prev_next">                    
-                    {% if page.has_previous %}<a href="?q={{ query }}&amp;page={{ page.previous_page_number }}">{% endif %}&laquo; Prec.{% if page.has_previous %}</a>{% endif %}
-                    |
-                    {% if page.has_next %}<a href="?q={{ query }}&amp;page={{ page.next_page_number }}">{% endif %}Suiv. &raquo;{% if page.has_next %}</a>{% endif %}
-                </div>
-            {% endif %}
-        {% endif %}
-    </div>
-
-{% endblock %}
\ No newline at end of file
--- a/web/hdabo/tests/__init__.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-from hdabo.tests.models import DatasheetTest
-
-#from hdabo.tests.sortedm2mfield import TestSortedFormField, TestSortedManyToManyField, TestStringReference
\ No newline at end of file
--- a/web/hdabo/tests/models.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from django.test import TestCase
-from hdabo.models import Datasheet
-
-
-class DatasheetTest(TestCase):
-    fixtures = ['datasheet_10']
-    
-    def setUp(self):
-        self.datasheet_instance = Datasheet.objects.get(hda_id='1608')
-    
-    def test_domains_text(self):
-        domains_text = self.datasheet_instance.domains_text
-        self.assertEqual(u"Arts du quotidien; Arts du visuel", domains_text)
-
-    def test_domains_list(self):
-        domains_list = self.datasheet_instance.domains_list
-        self.assertListEqual([u"Arts du quotidien", u"Arts du visuel"], domains_list)
-    
-    def test_tags_text(self):
-        tags_text = [s.strip() for s in self.datasheet_instance.tags_text.split(";")]
-        tags_text.sort()
-        self.assertListEqual(tags_text, [u'XIXe s.', u'XVIIIe s.', u'XVIIe s.', u'XVIe s.', u'affichage', u'affiche', u'afficheur', u'aménagement urbain', u'colonne Morris', u'mobilier urbain', u'ordonnance de François Ier', u'publicité'], "Tags list does not match")
--- a/web/hdabo/urls.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-from django.conf.urls.defaults import patterns, include, url
-from django.contrib import admin
-from django.contrib.auth import urls as auth_url
-
-
-# Uncomment the next two lines to enable the admin:
-admin.autodiscover()
-
-urlpatterns = patterns('',
-    # Examples:
-    # url(r'^$', 'hdabo.views.home', name='home'),
-    # url(r'^hdabo/', include('hdabo.foo.urls')),
-
-    # Uncomment the admin/doc line below to enable admin documentation:
-    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
-
-    # Uncomment the next line to enable the admin:
-    url(r'^accounts/', include(auth_url)),
-    url(r'^logout/', 'django.contrib.auth.views.logout_then_login'),
-    url(r'^admin/', include(admin.site.urls)),
-    url(r'^search/', include('haystack.urls')),
-    url(r'^$', 'hdabo.views.home', name='home'),
-    url(r'^list/(?P<orga_id>[\w-]+)$', 'hdabo.views.list_for_orga', name='list_for_orga'),
-    url(r'^list/(?P<orga_id>[\w-]+)/(?P<valid>[\w-]+)/$', 'hdabo.views.list_for_orga', name='list_for_orga'),
-    url(r'^list/(?P<orga_id>[\w-]+)/(?P<valid>[\w-]+)/(?P<start_index>[\w-]+)/$', 'hdabo.views.list_for_orga', name='list_for_orga'),
-    url(r'^list/(?P<orga_id>[\w-]+)/(?P<valid>[\w-]+)/(?P<start_index>[\w-]+)/(?P<length>[\w-]+)/$', 'hdabo.views.list_for_orga', name='list_for_orga'),
-    url(r'^data$', 'hdabo.views.display_datasheet', name='display_datasheet'),
-    url(r'^data/(?P<ds_id>[\w-]+)$', 'hdabo.views.display_datasheet', name='display_datasheet'),
-    url(r'^tagupdown$', 'hdabo.views.tag_up_down'),
-    url(r'^removetagfromlist$', 'hdabo.views.remove_tag_from_list'),
-    url(r'^modifytag$', 'hdabo.views.modify_tag'),
-    url(r'^modifytagds$', 'hdabo.views.modify_tag_datasheet'),
-    url(r'^resetwpinfo$', 'hdabo.views.reset_wikipedia_info'),
-    url(r'^addtag$', 'hdabo.views.add_tag'),
-    url(r'^removewplink$', 'hdabo.views.remove_wp_link'),
-    url(r'^alltags/?$', 'hdabo.views.all_tags'),
-    url(r'^alltags/(?P<num_page>[\w-]+)/?$', 'hdabo.views.all_tags'),
-    url(r'^alltags/(?P<num_page>[\w-]+)/(?P<nb_by_page>[\w-]+)/?$', 'hdabo.views.all_tags'),
-    url(r'^alltags/(?P<num_page>[\w-]+)/(?P<nb_by_page>[\w-]+)/(?P<sort>[+-][\w]+)/?$', 'hdabo.views.all_tags'),
-    url(r'^alltags/(?P<num_page>[\w-]+)/(?P<nb_by_page>[\w-]+)/(?P<sort>[+-][\w]+)/(?P<searched>.*)/?$', 'hdabo.views.all_tags'),
-    url(r'^validatedatasheet$', 'hdabo.views.validate_datasheet'),
-    url(r'^validatedatasheet/(?P<ds_id>[\w-]+)$', 'hdabo.views.validate_datasheet'),
-    url(r'^validatedatasheet/(?P<ds_id>[\w-]+)/(?P<valid>[\w-]+)/$', 'hdabo.views.validate_datasheet'),
-    url(r'^updatetagalias$', 'hdabo.views.update_tag_alias'),
-    url(r'^updatetagcategory$', 'hdabo.views.update_tag_category'),
-    url(r'^ordertagsdatasheet$', 'hdabo.views.reorder_tag_datasheet'),
-)
--- a/web/hdabo/utils.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,374 +0,0 @@
-# -*- coding: utf-8 -*-
-import collections
-import unicodedata
-import sys
-import math
-import codecs
-
-###
-# allow to declare a property as a decorator
-###
-def Property(func):
-    return property(**func())
-
-
-## {{{ http://code.activestate.com/recipes/576694/ (r7)
-
-KEY, PREV, NEXT = range(3)
-
-class OrderedSet(collections.MutableSet):
-
-    def __init__(self, iterable=None):
-        self.end = end = [] 
-        end += [None, end, end]         # sentinel node for doubly linked list
-        self.map = {}                   # key --> [key, prev, next]
-        if iterable is not None:
-            self |= iterable
-
-    def __len__(self):
-        return len(self.map)
-
-    def __contains__(self, key):
-        return key in self.map
-
-    def add(self, key):
-        if key not in self.map:
-            end = self.end
-            curr = end[PREV]
-            curr[NEXT] = end[PREV] = self.map[key] = [key, curr, end]
-
-    def discard(self, key):
-        if key in self.map:        
-            key, prev, next = self.map.pop(key)
-            prev[NEXT] = next
-            next[PREV] = prev
-
-    def __iter__(self):
-        end = self.end
-        curr = end[NEXT]
-        while curr is not end:
-            yield curr[KEY]
-            curr = curr[NEXT]
-
-    def __reversed__(self):
-        end = self.end
-        curr = end[PREV]
-        while curr is not end:
-            yield curr[KEY]
-            curr = curr[PREV]
-
-    def pop(self, last=True):
-        if not self:
-            raise KeyError('set is empty')
-        key = next(reversed(self)) if last else next(iter(self))
-        self.discard(key)
-        return key
-
-    def __repr__(self):
-        if not self:
-            return '%s()' % (self.__class__.__name__,)
-        return '%s(%r)' % (self.__class__.__name__, list(self))
-
-    def __eq__(self, other):
-        if isinstance(other, OrderedSet):
-            return len(self) == len(other) and list(self) == list(other)
-        return set(self) == set(other)
-
-    def __del__(self):
-        self.clear()                    # remove circular references
-
-            
-## end of http://code.activestate.com/recipes/576694/ }}}
-
-
-## {{{ http://code.activestate.com/recipes/576693/ (r9)
-# Backport of OrderedDict() class that runs on Python 2.4, 2.5, 2.6, 2.7 and pypy.
-# Passes Python2.7's test suite and incorporates all the latest updates.
-
-try:
-    from thread import get_ident as _get_ident
-except ImportError:
-    from dummy_thread import get_ident as _get_ident
-
-try:
-    from _abcoll import KeysView, ValuesView, ItemsView
-except ImportError:
-    pass
-
-
-class OrderedDict(dict):
-    'Dictionary that remembers insertion order'
-    # An inherited dict maps keys to values.
-    # The inherited dict provides __getitem__, __len__, __contains__, and get.
-    # The remaining methods are order-aware.
-    # Big-O running times for all methods are the same as for regular dictionaries.
-
-    # The internal self.__map dictionary maps keys to links in a doubly linked list.
-    # The circular doubly linked list starts and ends with a sentinel element.
-    # The sentinel element never gets deleted (this simplifies the algorithm).
-    # Each link is stored as a list of length three:  [PREV, NEXT, KEY].
-
-    def __init__(self, *args, **kwds):
-        '''Initialize an ordered dictionary.  Signature is the same as for
-        regular dictionaries, but keyword arguments are not recommended
-        because their insertion order is arbitrary.
-
-        '''
-        if len(args) > 1:
-            raise TypeError('expected at most 1 arguments, got %d' % len(args))
-        try:
-            self.__root
-        except AttributeError:
-            self.__root = root = []                     # sentinel node
-            root[:] = [root, root, None]
-            self.__map = {}
-        self.__update(*args, **kwds)
-
-    def __setitem__(self, key, value, dict_setitem=dict.__setitem__):
-        'od.__setitem__(i, y) <==> od[i]=y'
-        # Setting a new item creates a new link which goes at the end of the linked
-        # list, and the inherited dictionary is updated with the new key/value pair.
-        if key not in self:
-            root = self.__root
-            last = root[0]
-            last[1] = root[0] = self.__map[key] = [last, root, key]
-        dict_setitem(self, key, value)
-
-    def __delitem__(self, key, dict_delitem=dict.__delitem__):
-        'od.__delitem__(y) <==> del od[y]'
-        # Deleting an existing item uses self.__map to find the link which is
-        # then removed by updating the links in the predecessor and successor nodes.
-        dict_delitem(self, key)
-        link_prev, link_next, key = self.__map.pop(key)
-        link_prev[1] = link_next
-        link_next[0] = link_prev
-
-    def __iter__(self):
-        'od.__iter__() <==> iter(od)'
-        root = self.__root
-        curr = root[1]
-        while curr is not root:
-            yield curr[2]
-            curr = curr[1]
-
-    def __reversed__(self):
-        'od.__reversed__() <==> reversed(od)'
-        root = self.__root
-        curr = root[0]
-        while curr is not root:
-            yield curr[2]
-            curr = curr[0]
-
-    def clear(self):
-        'od.clear() -> None.  Remove all items from od.'
-        try:
-            for node in self.__map.itervalues():
-                del node[:]
-            root = self.__root
-            root[:] = [root, root, None]
-            self.__map.clear()
-        except AttributeError:
-            pass
-        dict.clear(self)
-
-    def popitem(self, last=True):
-        '''od.popitem() -> (k, v), return and remove a (key, value) pair.
-        Pairs are returned in LIFO order if last is true or FIFO order if false.
-
-        '''
-        if not self:
-            raise KeyError('dictionary is empty')
-        root = self.__root
-        if last:
-            link = root[0]
-            link_prev = link[0]
-            link_prev[1] = root
-            root[0] = link_prev
-        else:
-            link = root[1]
-            link_next = link[1]
-            root[1] = link_next
-            link_next[0] = root
-        key = link[2]
-        del self.__map[key]
-        value = dict.pop(self, key)
-        return key, value
-
-    # -- the following methods do not depend on the internal structure --
-
-    def keys(self):
-        'od.keys() -> list of keys in od'
-        return list(self)
-
-    def values(self):
-        'od.values() -> list of values in od'
-        return [self[key] for key in self]
-
-    def items(self):
-        'od.items() -> list of (key, value) pairs in od'
-        return [(key, self[key]) for key in self]
-
-    def iterkeys(self):
-        'od.iterkeys() -> an iterator over the keys in od'
-        return iter(self)
-
-    def itervalues(self):
-        'od.itervalues -> an iterator over the values in od'
-        for k in self:
-            yield self[k]
-
-    def iteritems(self):
-        'od.iteritems -> an iterator over the (key, value) items in od'
-        for k in self:
-            yield (k, self[k])
-
-    def update(*args, **kwds): #@NoSelf
-        '''od.update(E, **F) -> None.  Update od from dict/iterable E and F.
-
-        If E is a dict instance, does:           for k in E: od[k] = E[k]
-        If E has a .keys() method, does:         for k in E.keys(): od[k] = E[k]
-        Or if E is an iterable of items, does:   for k, v in E: od[k] = v
-        In either case, this is followed by:     for k, v in F.items(): od[k] = v
-
-        '''
-        if len(args) > 2:
-            raise TypeError('update() takes at most 2 positional '
-                            'arguments (%d given)' % (len(args),))
-        elif not args:
-            raise TypeError('update() takes at least 1 argument (0 given)')
-        self = args[0]
-        # Make progressively weaker assumptions about "other"
-        other = ()
-        if len(args) == 2:
-            other = args[1]
-        if isinstance(other, dict):
-            for key in other:
-                self[key] = other[key]
-        elif hasattr(other, 'keys'):
-            for key in other.keys():
-                self[key] = other[key]
-        else:
-            for key, value in other:
-                self[key] = value
-        for key, value in kwds.items():
-            self[key] = value
-
-    __update = update  # let subclasses override update without breaking __init__
-
-    __marker = object()
-
-    def pop(self, key, default=__marker):
-        '''od.pop(k[,d]) -> v, remove specified key and return the corresponding value.
-        If key is not found, d is returned if given, otherwise KeyError is raised.
-
-        '''
-        if key in self:
-            result = self[key]
-            del self[key]
-            return result
-        if default is self.__marker:
-            raise KeyError(key)
-        return default
-
-    def setdefault(self, key, default=None):
-        'od.setdefault(k[,d]) -> od.get(k,d), also set od[k]=d if k not in od'
-        if key in self:
-            return self[key]
-        self[key] = default
-        return default
-
-    def __repr__(self, _repr_running={}):
-        'od.__repr__() <==> repr(od)'
-        call_key = id(self), _get_ident()
-        if call_key in _repr_running:
-            return '...'
-        _repr_running[call_key] = 1
-        try:
-            if not self:
-                return '%s()' % (self.__class__.__name__,)
-            return '%s(%r)' % (self.__class__.__name__, self.items())
-        finally:
-            del _repr_running[call_key]
-
-    def __reduce__(self):
-        'Return state information for pickling'
-        items = [[k, self[k]] for k in self]
-        inst_dict = vars(self).copy()
-        for k in vars(OrderedDict()):
-            inst_dict.pop(k, None)
-        if inst_dict:
-            return (self.__class__, (items,), inst_dict)
-        return self.__class__, (items,)
-
-    def copy(self):
-        'od.copy() -> a shallow copy of od'
-        return self.__class__(self)
-
-    @classmethod
-    def fromkeys(cls, iterable, value=None):
-        '''OD.fromkeys(S[, v]) -> New ordered dictionary with keys from S
-        and values equal to v (which defaults to None).
-
-        '''
-        d = cls()
-        for key in iterable:
-            d[key] = value
-        return d
-
-    def __eq__(self, other):
-        '''od.__eq__(y) <==> od==y.  Comparison to another OD is order-sensitive
-        while comparison to a regular mapping is order-insensitive.
-
-        '''
-        if isinstance(other, OrderedDict):
-            return len(self) == len(other) and self.items() == other.items()
-        return dict.__eq__(self, other)
-
-    def __ne__(self, other):
-        return not self == other
-
-    # -- the following methods are only used in Python 2.7 --
-
-    def viewkeys(self):
-        "od.viewkeys() -> a set-like object providing a view on od's keys"
-        return KeysView(self)
-
-    def viewvalues(self):
-        "od.viewvalues() -> an object providing a view on od's values"
-        return ValuesView(self)
-
-    def viewitems(self):
-        "od.viewitems() -> a set-like object providing a view on od's items"
-        return ItemsView(self)
-## end of http://code.activestate.com/recipes/576693/ }}}
-
-def remove_accents(str):
-    nkfd_form = unicodedata.normalize('NFKD', unicode(str))
-    return u"".join([c for c in nkfd_form if not unicodedata.combining(c)])
-
-def normalize(str):
-    return remove_accents(str).lower().replace(u"œ",u"oe")
-
-def show_progress(current_line, total_line, label, width, writer=None):
-
-    if writer is None:
-        writer = sys.stdout
-        if sys.stdout.encoding is not None:
-            writer = codecs.getwriter(sys.stdout.encoding)(sys.stdout)
-
-    percent = (float(current_line) / float(total_line)) * 100.0
-
-    marks = math.floor(width * (percent / 100.0))
-    spaces = math.floor(width - marks)
-
-    loader = u'[' + (u'=' * int(marks)) + (u' ' * int(spaces)) + u']'
-        
-    s = u"%s %3d%% %*d/%d - %*s\r" % (loader, percent, len(str(total_line)), current_line, total_line, width, label[:width])
-    
-    writer.write(s) #takes the header into account
-    if percent >= 100:
-        writer.write("\n")
-    writer.flush()
-    
-    return writer
-
--- a/web/hdabo/views.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,580 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from django.conf import settings
-from django.contrib.auth.decorators import login_required #@UnusedImport
-from django.core.paginator import Paginator
-from django.db import connection
-from django.db.models import Max, Count, Min
-from django.http import HttpResponseBadRequest
-from django.shortcuts import render_to_response, redirect
-from django.template import RequestContext
-from django.utils.http import urlquote
-from haystack.constants import DJANGO_ID
-from haystack.query import SearchQuerySet
-from hdabo.utils import OrderedDict, remove_accents, normalize
-from hdabo.wp_utils import (normalize_tag, query_wikipedia_title,
-    get_or_create_tag, process_tag, reorder_datasheet_tags)
-from models import Datasheet, Organisation, Tag, TagCategory, TaggedSheet
-from wikitools import wiki
-import django.utils.simplejson as json
-import re
-
-
-@login_required
-def home(request):
-    
-    orgas = Organisation.objects.all().order_by('name')
-
-    org_list = []
-    all_ds_mapping = dict([(res['organisation'], res['nb_all']) for res in Datasheet.objects.values("organisation").annotate(nb_all=Count("organisation"))])
-    validated_ds_mapping = dict([(res['organisation'], [res['nb_val'], res['first_id_val']]) for res in Datasheet.objects.filter(validated=True).values("organisation").annotate(nb_val=Count("organisation")).annotate(first_id_val=Min("id"))])
-    unvalidated_ds_mapping = dict([(res['organisation'], [res['nb_unval'], res['first_id_unval']]) for res in Datasheet.objects.filter(validated=False).values("organisation").annotate(nb_unval=Count("organisation")).annotate(first_id_unval=Min("id"))])
-    # We get the hda_id from the id
-    val_hda_ids = dict([(res.id, res.hda_id) for res in Datasheet.objects.filter(id__in=[v[1] for v in validated_ds_mapping.values()]).only("id", "hda_id")])
-    unval_hda_ids = dict([(res.id, res.hda_id) for res in Datasheet.objects.filter(id__in=[v[1] for v in unvalidated_ds_mapping.values()]).only("id", "hda_id")])
-    
-    for orga in orgas :
-        nb_all = all_ds_mapping.get(orga.id, 0)
-        duo_val = validated_ds_mapping.get(orga.id, [0, None])
-        nb_val = duo_val[0]
-        first_id_val = val_hda_ids.get(duo_val[1], None)
-        duo_unval = unvalidated_ds_mapping.get(orga.id, [0, None])
-        nb_unval = duo_unval[0]
-        first_id_unval = unval_hda_ids.get(duo_unval[1], None)
-        org_list.append({'organisation':orga, 'nb_all':nb_all, 'nb_val':nb_val, 'first_id_val':first_id_val, 'nb_unval':nb_unval, 'first_id_unval':first_id_unval})
-    
-    return render_to_response("organisation_list.html",
-                              {'organisations':org_list},
-                              context_instance=RequestContext(request))
-
-
-@login_required
-def display_datasheet(request, ds_id=None):
-    
-    if ds_id :
-        ds = Datasheet.objects.get(hda_id=ds_id)
-    
-    # In this function the context is given by the get parameters.
-    if "index" in request.GET :
-        try:
-            index = int(request.GET["index"])
-        except :
-            index = 0
-    else :
-        index = 0
-    if "nb_sheets" in request.GET :
-        try:
-            nb_sheets = int(request.GET["nb_sheets"])
-        except :
-            nb_sheets = None
-    else :
-        nb_sheets = None
-    # If there is tag parameter, it means that we display all the ds tagged by one particular tag
-    tag = None
-    if "tag" in request.GET :
-        tag = Tag.objects.get(id=int(request.GET["tag"]))
-        datasheets_qs = Datasheet.objects.filter(tags__in=[tag]).order_by("organisation__name", "original_creation_date").select_related("format")
-        # If tag is set and if ds_id is None, it means that we have to display the first ds
-        if not ds_id :
-            index = 0
-            ds = datasheets_qs[0]
-    else :
-        # The current list depends on the ds's validation state
-        datasheets_qs = Datasheet.objects.filter(organisation=ds.organisation).filter(validated=ds.validated).order_by("id").select_related("format")
-    # We calculate the number of sheets if necessary
-    if not nb_sheets :
-        nb_sheets = datasheets_qs.count()
-    
-    # We get only the prev/current/next sheets
-    if nb_sheets > 1 :
-        if index == 0 :
-            select_qs = datasheets_qs[:2]
-            prev_index = 0
-            prev_id = select_qs[0].hda_id
-            next_index = 1
-            next_id = select_qs[1].hda_id
-        elif index == (nb_sheets - 1) :
-            select_qs = datasheets_qs[nb_sheets - 2:]
-            prev_index = nb_sheets - 2
-            prev_id = select_qs[0].hda_id
-            next_index = nb_sheets - 1
-            next_id = select_qs[1].hda_id
-        else :
-            select_qs = datasheets_qs[index - 1:index + 2]
-            prev_index = index - 1
-            prev_id = select_qs[0].hda_id
-            next_index = index + 1
-            next_id = select_qs[2].hda_id
-    else :
-        prev_index = next_index = 0
-        prev_id = next_id = datasheets_qs[0].hda_id
-    
-    # We get the ORDERED tags if we display one sheet (case valid = 0 and 1)
-    ordered_tags = TaggedSheet.objects.filter(datasheet=ds).select_related("tag").order_by('order')
-    
-    displayed_index = index + 1;
-    zero_id = datasheets_qs[0].hda_id
-    last_index = max(nb_sheets - 1, 0)
-    last_id = datasheets_qs[last_index].hda_id
-    
-    return render_to_response("generic_sheet.html",
-                              {'ds':ds, 'orga_name':ds.organisation.name,
-                               'nb_sheets':nb_sheets, 'ordered_tags':ordered_tags,
-                               'zero_id':zero_id, 'prev_index':prev_index, 'prev_id':prev_id,
-                               'next_index':next_index, 'next_id':next_id,
-                               'last_index':last_index, 'last_id':last_id,
-                               'displayed_index':displayed_index, 'tag':tag, 'valid':ds.validated,
-                               'categories':json.dumps(get_categories())},
-                              context_instance=RequestContext(request))
-
-
-@login_required
-def list_for_orga(request, orga_id=None, valid=None, start_index=None):
-    
-    orga = Organisation.objects.get(id=orga_id)
-    orga_name = orga.name
-    
-    if start_index :
-        try:
-            start_index = int(start_index)
-        except :
-            start_index = 0
-    else :
-        start_index = 0
-    
-    # If valid = 0, we search unvalidated sheets
-    # If valid = 1, we search validated sheets
-    # If valid = 2, we search AND DISPLAY all sheets
-    datasheets_qs = Datasheet.objects.filter(organisation=orga).order_by("id").select_related("format")
-    
-    if valid == "1" :
-        # We count all the validated sheets
-        datasheets_qs = datasheets_qs.filter(validated=True)
-        # And select the current one
-        datasheets = [datasheets_qs[start_index]]
-    elif valid != "2":
-        valid = "0"
-        # We count all the validated sheets
-        datasheets_qs = datasheets_qs.filter(validated=False)
-        # And select the current one
-        datasheets = [datasheets_qs[start_index]]
-    else:
-        datasheets = datasheets_qs
-
-    nb_sheets = datasheets_qs.count()
-    
-    # We get the ORDERED tags if we display one sheet (case valid = 0 and 1)
-    ordered_tags = None
-    if valid != "2" :
-        ordered_tags = TaggedSheet.objects.filter(datasheet=datasheets[0]).select_related("tag").order_by('order')
-    
-    displayed_index = start_index + 1;
-    prev_index = max(start_index - 1, 0);
-    next_index = min(nb_sheets - 1, start_index + 1);
-    last_index = max(nb_sheets - 1, 0);
-    
-    return render_to_response("list_for_orga.html",
-                              {'datasheets':datasheets, 'orga_name':orga_name,
-                               'nb_sheets':nb_sheets, 'orga_id':orga_id, 'ordered_tags':ordered_tags,
-                               'prev_index':prev_index, 'next_index':next_index, 'last_index':last_index,
-                               'start_index':start_index, 'displayed_index':displayed_index, 'valid':valid,
-                               'categories':json.dumps(get_categories())},
-                              context_instance=RequestContext(request))
-
-
-@login_required
-def all_tags(request, num_page=None, nb_by_page=None, sort="+pop", searched=None):
-    
-    # If the view is asked after a form sent with post vars, it means that searched is a post var.
-    if u"searched" in request.POST :
-        searched = request.POST["searched"]
-        nb_by_page = settings.PAGINATION_DEFAULT_NB_BY_PAGE
-        num_page = 1
-    
-    # Get paginator and current page 
-    current_page, p, num_page, nb_by_page = get_current_page(num_page, nb_by_page, sort, searched)
-    
-    prev_page = max(num_page - 1, 1)
-    next_page = min(num_page + 1, p.num_pages)
-    last_page = p.num_pages
-    
-    
-    cursor = connection.cursor() #@UndefinedVariable
-    fl_list = []
-    try:
-        cursor.execute("select upper(substring(normalized_label from 1 for 1)) as fl from hdabo_tag group by fl order by fl;")
-    
-        for row in cursor:
-            new_char = remove_accents(row[0])
-            if new_char not in fl_list:
-                fl_list.append(new_char)
-    finally:
-        cursor.close()
-    
-    search_def = tuple([(c, urlquote(c + settings.SEARCH_STAR_CHARACTER)) for c in fl_list])
-    reverse_sort = ("-" if sort[0] == "+" else "+") + sort[1:]
-        
-    return render_to_response("all_tags.html",
-                              {'nb_total':p.count, 'tags':current_page.object_list, 'current_page':current_page,
-                               'prev_page':prev_page, 'next_page':next_page, 'last_page':last_page,
-                               'num_page':num_page, 'nb_by_page':nb_by_page, 'searched':searched,
-                               'categories':json.dumps(get_categories()),
-                               'search_def':search_def, 'sort':sort, 'reverse_sort': reverse_sort},
-                              context_instance=RequestContext(request))
-    
-
-@login_required
-def tag_up_down(request):
-    ds_id = request.POST["datasheet_id"]
-    # post vars new_order and old_order indicate the position (from 1) of the tag in the list.
-    # NB : it is different from the TagSheet.order in the database.
-    new_order = int(request.POST["new_order"]) - 1
-    old_order = int(request.POST["old_order"]) - 1
-    # First we get the datasheet's TaggedSheets (list to force evaluation)
-    ordered_tags = list(TaggedSheet.objects.filter(datasheet__hda_id=ds_id).order_by('order'))
-    # We change the moved TaggedSheets's order
-    new_ts_order = ordered_tags[new_order].order
-    moved_ts = ordered_tags[old_order]
-    moved_ts.order = new_ts_order
-    moved_ts.save()
-    # We move the TaggedSheets's order
-    if new_order > old_order :
-        # And we decrease the other ones
-        for i in range(old_order + 1, new_order + 1) :
-            ts = ordered_tags[i]
-            ts.order = ts.order - 1
-            ts.save()
-    else :
-        # And we increase the other ones
-        for i in range(new_order, old_order) :
-            ts = ordered_tags[i]
-            ts.order = ts.order + 1
-            ts.save()
-    ds = Datasheet.objects.get(hda_id=ds_id)
-    ds.manual_order = True
-    ds.save()
-    
-    return get_tag_table(request=request, ds_id=ds_id, valid=0)
-
-
-@login_required
-def get_tag_table(request=None, ds_id=None, valid=None):
-    
-    ordered_tags = TaggedSheet.objects.filter(datasheet__hda_id=ds_id).order_by('order')
-    
-    return render_to_response("partial/tag_table.html",
-                              {'ordered_tags':ordered_tags, 'valid':valid},
-                              context_instance=RequestContext(request))
-
-
-@login_required
-def get_all_tags_table(request, num_page=None, nb_by_page=None, sort="+pop", searched=None):
-    
-    current_page, p, num_page, nb_by_page = get_current_page(num_page, nb_by_page, sort, searched) #@UnusedVariable
-    reverse_sort = ("-" if sort[0] == "+" else "+") + sort[1:] 
-    
-    return render_to_response("partial/all_tags_table.html",
-                              {'tags':current_page.object_list, 'nb_by_page':nb_by_page, 'searched':searched, 'sort': sort, 'reverse_sort': reverse_sort},
-                              context_instance=RequestContext(request))
-
-
-def get_current_page(num_page=None, nb_by_page=None, sort="+pop", searched=None):
-    
-    base_queryset = Tag.objects
-    
-    if searched and searched != "" :
-        searched = normalize(searched.strip())
-        regex = "^%s$" % (re.escape(searched).replace(re.escape(settings.SEARCH_STAR_CHARACTER), ".*"))
-        base_queryset = base_queryset.filter(normalized_label__iregex=regex)
-
-    alltags = base_queryset.annotate(num_ds=Count('datasheet'))
-    
-    alltags = {
-        "+lab" : alltags.order_by('normalized_label', 'label'),
-        "-lab" : alltags.order_by('-normalized_label', '-label'),
-        "+pop" : alltags.order_by('-popularity', '-num_ds', 'normalized_label', 'label'),
-        "-pop" : alltags.order_by('popularity', 'num_ds', '-normalized_label', '-label'),
-    }.get(sort, alltags.order_by('-popularity', '-num_ds', 'normalized_label', 'label'))
-    
-    
-    # We build the paginator for the requested list
-    if nb_by_page :
-        try:
-            nb_by_page = int(nb_by_page)
-        except :
-            nb_by_page = settings.PAGINATION_DEFAULT_NB_BY_PAGE
-    else :
-        nb_by_page = settings.PAGINATION_DEFAULT_NB_BY_PAGE
-    if num_page :
-        try:
-            num_page = int(num_page)
-        except :
-            num_page = 1
-    else :
-        num_page = 1
-    p = Paginator(alltags, nb_by_page)
-    
-    #use the much simpler base query to have the count
-    p._count = base_queryset.count()
-    current_page = p.page(num_page)
-    
-    return current_page, p, num_page, nb_by_page
-
-
-@login_required
-def remove_tag_from_list(request=None):
-    
-    ds_id = request.POST["datasheet_id"]
-    tag_id = request.POST["tag_id"]
-    # First we get the datasheet's TaggedSheets
-    ds_tags = TaggedSheet.objects.filter(datasheet__hda_id=ds_id)
-    # We get the current TaggedSheet and we delete it
-    ts = ds_tags.filter(tag=Tag.objects.filter(id=tag_id))[0]
-    ts.delete()
-    
-    ds = Datasheet.objects.get(hda_id=ds_id)
-    ds.manual_order = True
-    ds.save()
-
-    return get_tag_table(request=request, ds_id=ds_id, valid=0)
-
-
-@login_required
-def modify_tag(request):
-
-    tag_id = request.POST["id"]
-    tag_label = request.POST["value"]
-        
-    tag = Tag.objects.get(id=tag_id)
-    
-    if tag.label != tag_label:
-
-        tag.label = tag_label
-        
-        site = wiki.Wiki(settings.WIKIPEDIA_API_URL) #@UndefinedVariable
-        wp_res = query_wikipedia_title(site, label=tag_label)
-        status, url, pageid, dbpedia_uri, revision_id = (wp_res['status'], wp_res['wikipedia_url'], wp_res['pageid'], wp_res["dbpedia_uri"], wp_res['revision_id'])
-
-        if status is not None:
-            tag.url_status = status
-
-        old_pageid = tag.wikipedia_pageid
-        
-        tag.wikipedia_url = url
-        tag.wikipedia_pageid = pageid            
-        tag.dbpedia_uri = dbpedia_uri 
-            
-        try:
-            tag.save()
-        except:
-            return  HttpResponseBadRequest(json.dumps({'error': 'duplicate_tag', 'message': u"Le tag %s (%s) existe déjà." % (tag_label, tag.original_label)}), mimetype="application/json")
-        
-        if old_pageid != pageid:
-            TaggedSheet.objects.filter(tag=tag).update(wikipedia_revision_id=revision_id)
-    
-    return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"], sort=request.POST["sort"], searched=request.POST["searched"])
-
-
-@login_required
-def modify_tag_datasheet(request):
-
-    tag_id = request.POST["id"]
-    tag_label = request.POST["value"]
-    ds_id = request.POST["datasheet_id"]
-        
-    tag = Tag.objects.get(id=tag_id)
-    
-    ds = Datasheet.objects.get(hda_id=ds_id)
-        
-    if tag.label != tag_label:
-        
-        if tag_label.lower() in [t.label.lower() for t in ds.tags.all()]:
-            return  HttpResponseBadRequest(json.dumps({'error': 'duplicate_tag', 'message': u"Le tag %s existe déjà pour cette fiche." % (tag_label)}), mimetype="application/json")
-
-        tag, revision_id, created = get_or_create_tag(tag_label) #@UnusedVariable
-
-        ts = TaggedSheet.objects.get(tag=tag_id, datasheet__hda_id=ds_id)
-        ts.tag = tag
-        ts.wikipedia_revision_id = revision_id
-        kwargs = {DJANGO_ID + "__exact": unicode(ds_id)}
-        results = SearchQuerySet().filter(title=tag_label).filter_or(description=tag_label).filter(**kwargs)
-        if len(results) > 0:
-            ts.index_note = results[0].score        
-
-        ts.save()
-        
-        ds.manual_order = True
-        ds.save()        
-    
-    return get_tag_table(request=request, ds_id=ds_id, valid=0)
-
-
-
-@login_required
-def reset_wikipedia_info(request):
-    # 2 cases : 
-    # - ordered tag for one datasheet : POST["datasheet_id"] is not null
-    # - all tags list : POST["datasheet_id"] is null and POST["num_page"] and POST["nb_by_page"] are not null
-    tag_id = request.POST["tag_id"]
-    
-    tag = Tag.objects.get(id=tag_id)
-    site = wiki.Wiki(settings.WIKIPEDIA_API_URL) #@UndefinedVariable
-    
-    tag.label = normalize_tag(tag.original_label)
-    
-    #reset tag info
-    tag.wikipedia_url = None
-    tag.wikipedia_pageid = None
-    
-    try:
-        process_tag(site, tag)
-    except:
-        return HttpResponseBadRequest(json.dumps({'error': 'duplicate_tag', 'message': u"La version sémantisée du tag %s (%s) existe déjà." % (tag.label, tag.original_label)}), mimetype="application/json")
-
-    
-    
-    if u"datasheet_id" in request.POST :
-        return get_tag_table(request=request, ds_id=request.POST["datasheet_id"], valid=0)
-    else :
-        return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"], sort=request.POST["sort"], searched=request.POST["searched"])
-
-
-@login_required
-def add_tag(request=None):
-    
-    ds_id = request.POST["datasheet_id"]
-    tag_label = request.POST["value"]
-    
-    ds = Datasheet.objects.get(hda_id=ds_id)
-    if tag_label.lower() in [t.label.lower() for t in ds.tags.all()]:
-        return  HttpResponseBadRequest(json.dumps({'error': 'duplicate_tag', 'message': u"Le tag %s existe déjà pour cette fiche." % (tag_label)}), mimetype="application/json")
-
-
-    tag, revision_id, created = get_or_create_tag(tag_label)    
-    # We put the tag at the bottom of the datasheet's tag list 
-    # if the tag is created or if the tag is not in the list
-    
-    list_ts = TaggedSheet.objects.filter(datasheet=ds)
-    if created or list_ts.filter(tag=tag).count() == 0 :
-        new_order = list_ts.aggregate(Max('order'))['order__max'] + 1
-        ts = TaggedSheet.objects.create(datasheet=ds, tag=tag, original_order=new_order, order=new_order, wikipedia_revision_id=revision_id)
-        ts.save()
-        ds.manual_order = True
-        ds.save()
-    
-    return get_tag_table(request=request, ds_id=ds_id, valid=0)
-
-
-@login_required
-def remove_wp_link(request=None):
-    # 2 cases : 
-    # - ordered tag for one datasheet : POST["datasheet_id"] is not null
-    # - all tags list : POST["datasheet_id"] is null and POST["num_page"] and POST["nb_by_page"] are not null
-    tag_id = request.POST["tag_id"]
-    tag = Tag.objects.get(id=tag_id)
-
-    
-    if u"datasheet_id" in request.POST :
-        #create another tag almost identical, without the W info
-        new_tag, created = Tag.objects.get_or_create(label=tag.label, original_label=tag.original_label, url_status=Tag.TAG_URL_STATUS_DICT['null_result'], #@UnusedVariable
-                                            defaults={'label':tag.label, 'original_label': tag.original_label, 'url_status':Tag.TAG_URL_STATUS_DICT['null_result'], 'wikipedia_url': None, 'wikipedia_pageid': None, 'dbpedia_uri': None, 'category':tag.category, 'alias':tag.alias, 'popularity':tag.popularity})
-        
-        TaggedSheet.objects.filter(tag=tag, datasheet__hda_id=request.POST["datasheet_id"]).update(tag=new_tag, wikipedia_revision_id=None)
-        
-    else:
-        
-        if Tag.objects.filter(label=tag.label, original_label=tag.original_label, url_status=Tag.TAG_URL_STATUS_DICT['null_result']).count() > 0:
-            return HttpResponseBadRequest(json.dumps({'error': 'duplicate_tag', 'message': u"La version désémantisée du tag %s (%s) existe déjà." % (tag.label, tag.original_label)}), mimetype="application/json")
-        tag.wikipedia_url = None
-        tag.wikipedia_pageid = None
-        tag.dbpedia_uri = None
-        tag.url_status = Tag.TAG_URL_STATUS_DICT['null_result']
-        tag.save()
-    
-        TaggedSheet.objects.filter(tag=tag).update(wikipedia_revision_id=None)
-    
-    if u"datasheet_id" in request.POST :
-        return get_tag_table(request=request, ds_id=request.POST["datasheet_id"], valid=0)
-    else :
-        return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"], sort=request.POST["sort"], searched=request.POST["searched"])
-
-
-@login_required
-def validate_datasheet(request=None, ds_id=None, valid=None):
-    # We set if valid is true of false, function of the url parameters
-    if valid == "1" or valid == "true" or not valid :
-        valid = True
-    else :
-        valid = False
-    # We validate or unvalidate the requester datasheet
-    
-    if request.user.is_authenticated():
-        user = request.user
-    else:
-        user = None
-    
-    ds = Datasheet.objects.get(hda_id=ds_id)
-    if valid :
-        ds.validate(user)
-    else :
-        ds.unvalidate()
-    ds.save()
-    
-    # If there are still some unvalidated/validated ds for the ds's orga, we display the first one
-    same_organisation_ds = Datasheet.objects.filter(organisation=ds.organisation).filter(validated=not valid)
-    if len(same_organisation_ds) > 0 :
-        return redirect('display_datasheet', ds_id=same_organisation_ds[0].hda_id)
-    else :
-        return redirect('home')
-    
-
-@login_required
-def update_tag_alias(request):
-    # 2 cases : 
-    # - ordered tag for one datasheet : POST["datasheet_id"] is not null
-    # - all tags list : POST["datasheet_id"] is null and POST["num_page"] and POST["nb_by_page"] are not null
-    tag_id = request.POST["id"]
-    tag_alias = request.POST["value"]
-    tag = Tag.objects.get(id=tag_id)
-    tag.alias = tag_alias
-    tag.save()
-    
-    if u"datasheet_id" in request.POST :
-        return get_tag_table(request=request, ds_id=request.POST["datasheet_id"], valid=0)
-    else :
-        return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"], sort=request.POST["sort"], searched=request.POST["searched"])
-    
-
-def get_categories():
-    # List of categories in an OrderedDict
-    categories = OrderedDict({"":""})
-    for c in TagCategory.objects.order_by('label') :
-        categories.update({c.label:c.label})
-    return categories
-    
-
-@login_required
-def update_tag_category(request):
-    
-    tag_id = request.POST["id"]
-    cat = request.POST["value"]
-    tag = Tag.objects.get(id=tag_id)
-    if cat and cat != "" :
-        tag.category = TagCategory.objects.get(label=cat)
-    else :
-        tag.category = None
-    tag.save()
-    
-    if u"datasheet_id" in request.POST :
-        return get_tag_table(request=request, ds_id=request.POST["datasheet_id"], valid=0)
-    else :
-        return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"], sort=request.POST["sort"], searched=request.POST["searched"])
-    
-@login_required
-def reorder_tag_datasheet(request):
-    
-    ds_id = request.REQUEST['datasheet_id']
-    ds = Datasheet.objects.get(hda_id=ds_id)
-    reorder_datasheet_tags(ds)
-    
-    return get_tag_table(request=request, ds_id=ds_id, valid=0)
--- a/web/hdabo/wp_utils.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,222 +0,0 @@
-# -*- coding: utf-8 -*-
-from django.conf import settings
-from django.utils.http import urlquote
-from haystack.constants import DJANGO_ID
-from haystack.query import SearchQuerySet
-from hdabo.models import Tag, TaggedSheet
-from wikitools import api, wiki
-
-
-def normalize_tag(tag):
-    if len(tag) == 0:
-        return tag
-    tag = tag.strip()
-    tag = tag.replace("_", " ")
-    tag = " ".join(tag.split())
-    tag = tag[0].upper() + tag[1:]
-    return tag
-
-def urlize_for_wikipedia(label):
-    return urlquote(label.replace(" ", "_"))
-
-
-def __is_homonymie(page_dict):
-    for cat in page_dict.get(u"categories", []):
-        if u'Catégorie:Homonymie' in cat.get(u"title", u"") or u'Category:Disambiguation pages' in cat.get(u"title", u""):
-            return True
-    return False
-
-
-def query_wikipedia_title(site, label=None, pageid=None):
-    
-    params = {'action':'query', 'prop':'info|categories|langlinks', 'inprop':'url', 'lllimit':'500', 'cllimit':'500', 'rvprop':'ids'}
-        
-    if label:
-        params['titles'] = label
-    else:
-        params['pageids'] = pageid
-    wpquery = api.APIRequest(site, params) #@UndefinedVariable
-    
-    response = wpquery.query()
-    original_response = response
-    def return_null_result():
-        return { 'new_label': None, 'alternative_label': None, 'status': Tag.TAG_URL_STATUS_DICT["null_result"], 'wikipedia_url': None, 'pageid': None, 'alternative_wikipedia_url': None, 'alternative_pageid': None, 'dbpedia_uri': None, 'revision_id': None, 'response': response }
-    
-
-    query_dict = response['query']
-    # get page if multiple pages or none -> return Tag.null_result
-    pages = query_dict.get("pages", {})
-    if len(pages) > 1 or len(pages) == 0:
-        return return_null_result()
-    
-    page = pages.values()[0]
-    
-    if u"invalid" in page or u"missing" in page:
-        return return_null_result()
-
-    url = page.get(u'fullurl', None)
-    pageid = page.get(u'pageid', None)
-    new_label = page[u'title']
-    alternative_label = None
-    alternative_url = None
-    alternative_pageid = None
-    
-    if __is_homonymie(page):
-        status = Tag.TAG_URL_STATUS_DICT["homonyme"]
-    elif u"redirect" in page:
-        status = Tag.TAG_URL_STATUS_DICT["redirection"]
-    else:
-        status = Tag.TAG_URL_STATUS_DICT["match"]
-    
-    if status == Tag.TAG_URL_STATUS_DICT["redirection"]:
-        params['redirects'] = True
-        wpquery = api.APIRequest(site, params) #@UndefinedVariable    
-        response = wpquery.query()
-        query_dict = response['query']
-        pages = query_dict.get("pages", {})
-        #we know that we have at least one answer        
-        if len(pages) > 1 or len(pages) == 0:
-            return return_null_result()
-        page = pages.values()[0]
-        alternative_label = page.get('title', None)
-        alternative_url = page.get('fullurl', None)
-        alternative_pageid = page.get('pageid',None)
-        
-
-    revision_id = page.get('lastrevid', None)
-    
-    #process language to extract the english label
-    english_label = None
-    
-    if status == Tag.TAG_URL_STATUS_DICT['match'] or status == Tag.TAG_URL_STATUS_DICT['redirection']:
-        lang_links = page.get('langlinks', [])
-        for lang_info_dict in lang_links:
-            if lang_info_dict['lang'] == "en":
-                english_label = lang_info_dict["*"]
-                break
-    
-    if english_label and "#" not in english_label:
-        dbpedia_uri = settings.DBPEDIA_URI_TEMPLATE % (urlize_for_wikipedia(english_label))
-    else:
-        dbpedia_uri = None
-            
-
-    return { 'new_label': new_label, 'alternative_label': alternative_label, 'status': status, 'wikipedia_url': url, 'pageid': pageid, 'alternative_wikipedia_url': alternative_url, 'alternative_pageid': alternative_pageid, 'dbpedia_uri': dbpedia_uri, 'revision_id': revision_id, 'response': original_response }
-
-
-
-def get_or_create_tag(tag_label):
-    
-    tag_label_normalized = normalize_tag(tag_label)
-    # We get the wikipedia references for the tag_label
-    # We get or create the tag object
-    
-    tag = None
-    for t in Tag.objects.filter(label__iexact=tag_label_normalized):
-        if tag is None or t.url_status != Tag.TAG_URL_STATUS_DICT['null_result']:
-            tag = t
-            if tag.url_status != Tag.TAG_URL_STATUS_DICT['null_result']:
-                break
- 
-    if tag is None:
-        tag = Tag(label=tag_label_normalized, original_label=tag_label)
-        created = True
-    else:
-        created = False
-    
-    site = wiki.Wiki(settings.WIKIPEDIA_API_URL) #@UndefinedVariable
-
-    if created:
-        wp_res = query_wikipedia_title(site, label=tag_label_normalized)
-        new_label = wp_res['new_label']
-        alternative_label= wp_res['alternative_label']
-        status = wp_res['status']
-        url = wp_res['wikipedia_url']
-        alternative_url = wp_res['alternative_wikipedia_url']
-        pageid = wp_res['pageid']
-        alternative_pageid = wp_res['alternative_pageid']
-        dbpedia_uri = wp_res["dbpedia_uri"]
-        wikipedia_revision_id = wp_res['revision_id']
-
-    
-        # We save the datas
-        if new_label is not None:
-            tag.label = new_label
-        if status is not None:
-            tag.url_status = status
-        tag.alternative_label = alternative_label
-        tag.alternative_wikipedia_url = alternative_url
-        tag.alternative_wikipedia_pageid = alternative_pageid
-        tag.wikipedia_url = url            
-        tag.wikipedia_pageid = pageid
-        tag.dbpedia_uri = dbpedia_uri 
-
-        tag.save()
-        
-    elif tag.wikipedia_pageid:
-        wp_res = query_wikipedia_title(site, pageid=tag.wikipedia_pageid)
-        wikipedia_revision_id = wp_res['revision_id']
-    else:
-        wikipedia_revision_id = None
-        
-        
-    return tag, wikipedia_revision_id, created
-
-def process_tag(site, tag, verbosity=0):
-    
-    wp_res = query_wikipedia_title(site, label=tag.label)
-    new_label = wp_res['new_label']
-    alternative_label= wp_res['alternative_label']
-    status =  wp_res['status']
-    url = wp_res['wikipedia_url']
-    alternative_url = wp_res['alternative_wikipedia_url']
-    pageid = wp_res['pageid']
-    alternative_pageid = wp_res['alternative_pageid']
-    response = wp_res['response']
-    dbpedia_uri =  wp_res["dbpedia_uri"]
-    revision_id = wp_res["revision_id"]
-    
-    if verbosity >= 2 :
-        print "response from query to %s with parameters %s :" % (site.apibase, repr(new_label))
-        print repr(response)
-    
-    prev_wikipedia_pageid = tag.wikipedia_pageid
-    
-    if new_label is not None:
-        tag.label = new_label
-    if status is not None:
-        tag.url_status = status
-    tag.wikipedia_url = url
-    tag.wikipedia_pageid = pageid
-    tag.dbpedia_uri = dbpedia_uri
-    tag.alternative_label = alternative_label
-    tag.alternative_wikipedia_url = alternative_url
-    tag.alternative_wikipedia_pageid = alternative_pageid
-        
-    tag.save()
-    
-    if prev_wikipedia_pageid != pageid:
-        TaggedSheet.objects.filter(tag=tag).update(wikipedia_revision_id=revision_id)
-
-
-def reorder_datasheet_tags(ds):
-    ts_list = []
-    for ts in ds.taggedsheet_set.all():
-        ts.index_note = 0
-        kwargs = {DJANGO_ID + "__exact": unicode(ds.pk)}
-
-        results = SearchQuerySet().filter(title=ts.tag.label).filter_or(description=ts.tag.label).filter(**kwargs)
-        if len(results) > 0:
-            ts.index_note += results[0].score
-            ts.save()
-
-        ts_list.append(ts)
-    ts_list.sort(key=lambda t: (-t.index_note, t.order))
-    for k, ts in enumerate(ts_list):
-        ts.order = k + 1
-        ts.save()
-    if ds.manual_order:
-        ds.manual_order = False
-        ds.save()
-
-    
--- a/web/hdalab/.htaccess.mod_wsgi.tmpl	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-
-SetEnv DJANGO_SETTINGS_MODULE hdalab.settings
-SetEnv PROJECT_PATH /Users/ymh/dev/workspace/hdabo/web
-SetEnv PYTHON_PATH /Users/ymh/dev/workspace/hdabo/virtualenv/web/env/hdabo/lib/python2.6/site-packages:/Applications/Dev/eclipse/plugins/org.python.pydev.debug_2.2.0.2011062419/pysrc/
-SetEnv PYDEV_DEBUG False
-
-Options ExecCGI FollowSymLinks
-SetHandler wsgi-script
-
-#if defined in global definition
-#defined with WSGIDaemonProcess 
-#WSGIProcessGroup platform
-
-RewriteEngine On
-RewriteCond %{REQUEST_FILENAME} !-f
-RewriteRule ^(.*)$ /~ymh/hdabo/hdalab/modwsgi.wsgi/$1 [QSA,PT,L]
-
-Header set Pragma "no-cache"
-Header set Cache-Control "no-cache"
-Header set Expires "-1"
--- a/web/hdalab/README.txt	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-== Inclusion géographique ==
-
-La migration 0007_geographic_inclusion crée les tables nécessaires
-
-Pour récupérer les informations d'inclusion géographique de DBpedia (nécessite le package python SparqlWrapper)
-    python manage.py query_geo_inclusion
-
-== Traitement du fichier countries.geo.json ==
-
-Le fichier a été téléchargé sur https://github.com/johan/world.geo.json/
-Afin de faire correspondre les labels des pays aux tags sémantisés, on applique le script
-    python manage.py geojson_transform <chemin/nom_du_fichier.geo.json>
-pour rajouter ces informations dans le fichier
-
-== Import des données Insee ==
-
-La migration 0008_datasheet_insee crée les tables nécessaires
-
-Il faut d'abord importer les fichiers donnant les coordonnées géographiques par code Insee dans la base.
-Le fichier data/villes.csv a été téléchargé sur http://www.pillot.fr/cartographe/fic_villes.php
-Il manque dans ce fichier quelques villes et les codes INSEE pour Paris, Marseille et Lyon n'incluent pas les arrondissements
-Les communes manquantes se trouvent dans additional_cities.csv
-Pour importer chacun de ces fichiers :
-    python manage.py import_insee_csv <chemin/nom_du_fichier.csv>
-
-Il faut ensuite importer les fichiers donnant la correspondance entre notices HDA (référencées par leur identifiant hda_id) et codes INSEE
-Celles-ci sont fournies dans un fichier Excel donné par Bertrand, que j'ai converti en CSV et corrigé. Il s'agit de data/hda_insee.csv
-Pour importer ce fichier:
-    python manage.py import_insee_hda_csv <chemin/nom_du_fichier.csv>
-    
-    
-=== Migration hdabo -> hdalab ===
-
-0) appliquer les migrations south
-1) lancement de la commande query_wikipedia_category
-2) lancement de la commande fill_tag_years
-3) lancement de la commande query_wikipedia
-4) lancement de la commande query_geo_inclusion
-5) lancement de la commande geo_json_transform
-6) lancement de la commande import_insee_csv
-7) lancement de la commande import_hda_insee_csv
-8) lancement de la commande query_category_inclusion
-
-Toutes ces actions sont echaînées dans la commande import_hdabo_db
-
-
-
--- a/web/hdalab/__init__.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-# -*- coding: utf-8 -*-
-VERSION = (2, 22, 0, "final", 0)
-
-
-def get_version():
-    version = '%s.%s' % (VERSION[0], VERSION[1])
-    if VERSION[2]:
-        version = '%s.%s' % (version, VERSION[2])
-    if VERSION[3:] == ('alpha', 0):
-        version = '%s pre-alpha' % version
-    else:
-        if VERSION[3] != 'final':
-            version = '%s %s %s' % (version, VERSION[3], VERSION[4])
-    return version
-
-
-__version__ = get_version()
--- a/web/hdalab/config.py.tmpl	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Jan 26, 2012
-
-@author: ymh
-'''
-import os
-
-DEBUG = True
-TEMPLATE_DEBUG = DEBUG
-
-ADMINS = (
-    # ('Your Name', 'your_email@example.com'),
-)
-
-MANAGERS = ADMINS
-
-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.
-    }
-}
-
-BASE_DIR = os.path.dirname(os.path.abspath(__file__)).rstrip("/") + "/"
-BASE_URL = '/~ymh/hdabo/'
-WEB_URL = 'http://localhost'
-
-LOCALE_PATHS = ( os.path.join(BASE_DIR, 'locale',), )
-
-# Absolute filesystem path to the directory that will hold user-uploaded files.
-# Example: "/home/media/media.lawrence.com/media/"
-MEDIA_ROOT = os.path.abspath(BASE_DIR + "../static/media/")
-
-# URL that handles the media served from MEDIA_ROOT. Make sure to use a
-# trailing slash.
-# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
-MEDIA_URL = BASE_URL + "static/media/"
-
-# Absolute path to the directory static files should be collected to.
-# Don't put anything in this directory yourself; store your static files
-# in apps' "static/" subdirectories and in STATICFILES_DIRS.
-# Example: "/home/media/media.lawrence.com/static/"
-STATIC_ROOT = os.path.abspath(BASE_DIR + "../static/site/")
-
-# URL prefix for static files.
-# Example: "http://media.lawrence.com/static/"
-STATIC_URL = BASE_URL + "static/site/"
-
-# URL prefix for admin static files -- CSS, JavaScript and images.
-# Make sure to use a trailing slash.
-# Examples: "http://foo.com/static/admin/", "/static/admin/".
-ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'
-
-GOOGLE_ANALYTICS_CODE = None
-
--- a/web/hdalab/django_wsgi.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-import os
-
-os.environ['DJANGO_SETTINGS_MODULE'] = 'hdalab.settings'
- 
-import django.core.handlers.wsgi
-
-application = django.core.handlers.wsgi.WSGIHandler()
-
-if os.environ.get('PYDEV_DEBUG', "False").lower() in ["true", "1", "t"]:
-    import pydevd #@UnresolvedImport
-    pydevd.settrace(suspend=False)
Binary file web/hdalab/locale/de/LC_MESSAGES/django.mo has changed
--- a/web/hdalab/locale/de/LC_MESSAGES/django.po	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,130 +0,0 @@
-# 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.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-05-30 10:20-0500\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"
-"Language: \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"
-
-#: settings.py:40
-msgid "French"
-msgstr "Französisch"
-
-#: settings.py:41
-msgid "English"
-msgstr "Englisch"
-
-#: settings.py:42
-msgid "Italian"
-msgstr "Italienisch"
-
-#: settings.py:43
-msgid "German"
-msgstr "Deutsch"
-
-#: settings.py:44
-msgid "Spanish"
-msgstr "Spanisch"
-
-#: settings.py:45
-msgid "Japanese"
-msgstr "Japanisch"
-
-#: settings.py:46
-msgid "Chinese"
-msgstr "Chinesisch"
-
-#: templates/facettes.html:5 templates/facettes.html.py:42
-msgid "Recherche par facettes"
-msgstr "Suche nach Facetten"
-
-#: templates/facettes.html:55
-msgid "Partager la session"
-msgstr "Die Session teilen"
-
-#: templates/facettes.html:58
-msgid "En lecture seule"
-msgstr "Schreibgeschützt"
-
-#: templates/facettes.html:59
-msgid "En lecture-ecriture"
-msgstr "In Handschrift"
-
-#: templates/facettes.html:62
-msgid "Copier le lien"
-msgstr "Link kopieren"
-
-#: templates/facettes.html:67
-msgid "Mes vues :"
-msgstr "Meine Ansichten"
-
-#: templates/facettes.html:73
-msgid "Creer une vue sur des resultats de recherche"
-msgstr "Eine Ansicht über die Suchergebnisse schaffen"
-
-#: templates/facettes.html:74
-msgid "Creer une liste de notices"
-msgstr "Eine Hinweisliste schaffen"
-
-#: templates/facettes.html:82
-msgid "Filtres :"
-msgstr "Filter:"
-
-#: templates/facettes.html:100
-msgid "Gerer la vue"
-msgstr "Die Ansicht verwalten"
-
-#: templates/facettes.html:104
-msgid "Nom :"
-msgstr "Name:"
-
-#: templates/facettes.html:107
-msgid "Blocs visibles :"
-msgstr "Sichtbare Blöcke:"
-
-#: templates/facettes.html:112
-msgid "Pays"
-msgstr "Länder"
-
-#: templates/facettes.html:118
-msgid "Nuage de mots-cles"
-msgstr "Stichwortwolke"
-
-#: templates/facettes.html:125
-msgid "Information sur un mot-cle"
-msgstr "Information über ein Stichwort"
-
-#: templates/facettes.html:129
-msgid "Rechercher un tag"
-msgstr "Einen Tag suchen"
-
-#: templates/facettes.html:134
-msgid "translation_info"
-msgstr "Schnittstelle übersetzt von Mara Dumitru"
-
-#: templates/facettes.html:140
-msgid "Notes"
-msgstr "Notizen"
-
-#: templates/facettes.html:146
-msgid "Disciplines artistiques"
-msgstr "Künstlerische Disziplinen"
-
-#: templates/facettes.html:152
-msgid "Resultats de recherche"
-msgstr "Suchergebnisse"
-
-#: templates/completion.html:37
-msgid "Recherche par liste de completion"
-msgstr "Autovervollständigen Suche"
Binary file web/hdalab/locale/de/LC_MESSAGES/djangojs.mo has changed
--- a/web/hdalab/locale/de/LC_MESSAGES/djangojs.po	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,121 +0,0 @@
-# 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.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-01 09:09-0500\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"
-"Language: \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"
-
-#: static/hdalab/js/gomina.js:123
-msgid "contenu"
-msgid_plural "contenus"
-msgstr[0] "Inhalt"
-msgstr[1] "Inhalte"
-
-#: static/hdalab/js/gomina.js:123
-msgid "pour ce tag"
-msgstr "für diesen Tag"
-
-#: static/hdalab/js/gomina.js:261
-msgid "Toutes periodes"
-msgstr "Alle Zeitspannen"
-
-#: static/hdalab/js/gomina.js:263
-msgid "Periode&nbsp;:"
-msgstr "Zeitspanne:"
-
-#: static/hdalab/js/gomina.js:265
-msgid "a"
-msgstr "bis"
-
-#: static/hdalab/js/gomina.js:285
-msgid "Pays&nbsp;:"
-msgstr "Länder:"
-
-#: static/hdalab/js/gomina.js:294
-msgid "Tag&nbsp;:"
-msgstr "Tag:"
-
-#: static/hdalab/js/gomina.js:337
-msgid "Annotations"
-msgstr "Anmerkungen"
-
-#: static/hdalab/js/gomina.js:344 static/hdalab/js/gomina.js.c:394
-msgid "Annoter ce contenu"
-msgstr "Diesen Inhalt anmerken"
-
-#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:374
-msgid "Ajouter a {0}"
-msgstr "An {0} hinzufügen"
-
-#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:371
-msgid "Retirer de {0}"
-msgstr "Von {0} entfernen"
-
-#: static/hdalab/js/gomina.js:427
-msgid "notice"
-msgid_plural "notices"
-msgstr[0] "Hinweis"
-msgstr[1] "Hinweise"
-
-#: static/hdalab/js/gomina.js:539
-msgid ""
-"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
-msgstr ""
-"Die Inhaltsliste ist leer! Fügen Sie Inhalte hinzu um die Liste sie "
-"öffentlich bekannt zu machen!"
-
-#: static/hdalab/js/gomina.js:552 static/hdalab/js/gomina.js.c:855
-msgid "Gerer la vue"
-msgstr "Die Ansicht verwalten"
-
-#: static/hdalab/js/gomina.js:561 static/hdalab/js/gomina.js.c:866
-msgid "Annoter cette vue"
-msgstr "Diese Ansicht anmerken"
-
-#: static/hdalab/js/gomina.js:614
-msgid "Nouvelle session"
-msgstr "Neue Session"
-
-#: static/hdalab/js/gomina.js:620
-msgid "Mes resultats de recherche"
-msgstr "Meine Suchergebnisse"
-
-#: static/hdalab/js/gomina.js:621
-msgid "Ma liste"
-msgstr "Meine Liste"
-
-#: static/hdalab/js/gomina.js:632
-msgid "lecture seule"
-msgstr "Schreibgeschützt"
-
-#: static/hdalab/js/gomina.js:912 static/hdalab/js/gomina.js.c:920
-msgid "Comment souhaitez-vous nommer votre nouvelle vue ?"
-msgstr "Wie möchten Sie Ihre neue Ansicht nennen?"
-
-#: static/hdalab/js/gomina.js:912
-msgid "Nouveaux resultats de recherche"
-msgstr "Neue Suchergebnisse"
-
-#: static/hdalab/js/gomina.js:920
-msgid "Nouvelle liste"
-msgstr "Neue Liste"
-
-#: static/hdalab/js/completion.js:73
-msgid "Source&nbsp;: Wikipédia"
-msgstr "Quelle: Wikipedia"
-
-#: static/hdalab/js/completion.js:20
-msgid "Localisation&nbsp;:"
-msgstr "Standort:"
Binary file web/hdalab/locale/en/LC_MESSAGES/django.mo has changed
--- a/web/hdalab/locale/en/LC_MESSAGES/django.po	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,130 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# Yves-Marie Haussonne <ymh.work@gmail.com>, 2012.
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-05-30 10:20-0500\n"
-"PO-Revision-Date: 2012-03-09 02:10+0200\n"
-"Last-Translator: Yves-Marie Haussonne <ymh.work@gmail.com>\n"
-"Language-Team: IRI\n"
-"Language: en\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: Virtaal 0.7.0-mac-beta-1\n"
-
-#: settings.py:40
-msgid "French"
-msgstr "French"
-
-#: settings.py:41
-msgid "English"
-msgstr "English"
-
-#: settings.py:42
-msgid "Italian"
-msgstr "Italian"
-
-#: settings.py:43
-msgid "German"
-msgstr "German"
-
-#: settings.py:44
-msgid "Spanish"
-msgstr "Spanish"
-
-#: settings.py:45
-msgid "Japanese"
-msgstr "Japanese"
-
-#: settings.py:46
-msgid "Chinese"
-msgstr "Chinese"
-
-#: templates/facettes.html:5 templates/facettes.html.py:42
-msgid "Recherche par facettes"
-msgstr "Faceted search"
-
-#: templates/facettes.html:55
-msgid "Partager la session"
-msgstr "Share session"
-
-#: templates/facettes.html:58
-msgid "En lecture seule"
-msgstr "Read-only"
-
-#: templates/facettes.html:59
-msgid "En lecture-ecriture"
-msgstr "Read-write"
-
-#: templates/facettes.html:62
-msgid "Copier le lien"
-msgstr "Copy link"
-
-#: templates/facettes.html:67
-msgid "Mes vues :"
-msgstr "My views:"
-
-#: templates/facettes.html:73
-msgid "Creer une vue sur des resultats de recherche"
-msgstr "Create a view on search results"
-
-#: templates/facettes.html:74
-msgid "Creer une liste de notices"
-msgstr "Create datasheet list"
-
-#: templates/facettes.html:82
-msgid "Filtres :"
-msgstr "Filters:"
-
-#: templates/facettes.html:100
-msgid "Gerer la vue"
-msgstr "Manage view"
-
-#: templates/facettes.html:104
-msgid "Nom :"
-msgstr "Name:"
-
-#: templates/facettes.html:107
-msgid "Blocs visibles :"
-msgstr "Visible blocs:"
-
-#: templates/facettes.html:112
-msgid "Pays"
-msgstr "Countries"
-
-#: templates/facettes.html:118
-msgid "Nuage de mots-cles"
-msgstr "Keyword cloud"
-
-#: templates/facettes.html:125
-msgid "Information sur un mot-cle"
-msgstr "Keyword information"
-
-#: templates/facettes.html:129
-msgid "Rechercher un tag"
-msgstr "Tag search"
-
-#: templates/facettes.html:134
-msgid "translation_info"
-msgstr " "
-
-#: templates/facettes.html:140
-msgid "Notes"
-msgstr "Notes"
-
-#: templates/facettes.html:146
-msgid "Disciplines artistiques"
-msgstr "Artistic discipline"
-
-#: templates/facettes.html:152
-msgid "Resultats de recherche"
-msgstr "Search results"
-
-#: templates/completion.html:37
-msgid "Recherche par liste de completion"
-msgstr "Autocomplete Search"
Binary file web/hdalab/locale/en/LC_MESSAGES/djangojs.mo has changed
--- a/web/hdalab/locale/en/LC_MESSAGES/djangojs.po	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,119 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# Yves-Marie Haussonne <ymh.work@gmail.com>, 2012.
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-01 09:09-0500\n"
-"PO-Revision-Date: 2012-03-09 02:04+0200\n"
-"Last-Translator: Yves-Marie Haussonne <ymh.work@gmail.com>\n"
-"Language-Team: IRI\n"
-"Language: en\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: Virtaal 0.7.0-mac-beta-1\n"
-
-#: static/hdalab/js/gomina.js:123
-msgid "contenu"
-msgid_plural "contenus"
-msgstr[0] "content"
-msgstr[1] "contents"
-
-#: static/hdalab/js/gomina.js:123
-msgid "pour ce tag"
-msgstr "for this tag"
-
-#: static/hdalab/js/gomina.js:261
-msgid "Toutes periodes"
-msgstr "All periods"
-
-#: static/hdalab/js/gomina.js:263
-msgid "Periode&nbsp;:"
-msgstr "Period:"
-
-#: static/hdalab/js/gomina.js:265
-msgid "a"
-msgstr "to"
-
-#: static/hdalab/js/gomina.js:285
-msgid "Pays&nbsp;:"
-msgstr "Country:"
-
-#: static/hdalab/js/gomina.js:294
-msgid "Tag&nbsp;:"
-msgstr "Tag:"
-
-#: static/hdalab/js/gomina.js:337
-msgid "Annotations"
-msgstr "Annotations"
-
-#: static/hdalab/js/gomina.js:344 static/hdalab/js/gomina.js.c:394
-msgid "Annoter ce contenu"
-msgstr "Annotate the content"
-
-#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:374
-msgid "Ajouter a {0}"
-msgstr "Add to {0}"
-
-#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:371
-msgid "Retirer de {0}"
-msgstr "Remove from {0}"
-
-#: static/hdalab/js/gomina.js:427
-msgid "notice"
-msgid_plural "notices"
-msgstr[0] "datasheet"
-msgstr[1] "datasheets"
-
-#: static/hdalab/js/gomina.js:539
-msgid ""
-"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
-msgstr "The content list is empty! Add contents to display the list!"
-
-#: static/hdalab/js/gomina.js:552 static/hdalab/js/gomina.js.c:855
-msgid "Gerer la vue"
-msgstr "Manage the view"
-
-#: static/hdalab/js/gomina.js:561 static/hdalab/js/gomina.js.c:866
-msgid "Annoter cette vue"
-msgstr "Annotate this view"
-
-#: static/hdalab/js/gomina.js:614
-msgid "Nouvelle session"
-msgstr "New Session"
-
-#: static/hdalab/js/gomina.js:620
-msgid "Mes resultats de recherche"
-msgstr "My search results"
-
-#: static/hdalab/js/gomina.js:621
-msgid "Ma liste"
-msgstr "My list"
-
-#: static/hdalab/js/gomina.js:632
-msgid "lecture seule"
-msgstr "read only"
-
-#: static/hdalab/js/gomina.js:912 static/hdalab/js/gomina.js.c:920
-msgid "Comment souhaitez-vous nommer votre nouvelle vue ?"
-msgstr "How do you want to name your new view ?"
-
-#: static/hdalab/js/gomina.js:912
-msgid "Nouveaux resultats de recherche"
-msgstr "New search results"
-
-#: static/hdalab/js/gomina.js:920
-msgid "Nouvelle liste"
-msgstr "New list"
-
-#: static/hdalab/js/completion.js:73
-msgid "Source&nbsp;: Wikipédia"
-msgstr "Source: Wikipedia"
-
-#: static/hdalab/js/completion.js:20
-msgid "Localisation&nbsp;:"
-msgstr "Location:"
Binary file web/hdalab/locale/es/LC_MESSAGES/django.mo has changed
--- a/web/hdalab/locale/es/LC_MESSAGES/django.po	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,130 +0,0 @@
-# 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.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-05-30 10:20-0500\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"
-"Language: \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"
-
-#: settings.py:40
-msgid "French"
-msgstr "Francés"
-
-#: settings.py:41
-msgid "English"
-msgstr "Inglés"
-
-#: settings.py:42
-msgid "Italian"
-msgstr "Italiano"
-
-#: settings.py:43
-msgid "German"
-msgstr "Alemán"
-
-#: settings.py:44
-msgid "Spanish"
-msgstr "Español"
-
-#: settings.py:45
-msgid "Japanese"
-msgstr "Japonés"
-
-#: settings.py:46
-msgid "Chinese"
-msgstr "Chino"
-
-#: templates/facettes.html:5 templates/facettes.html.py:42
-msgid "Recherche par facettes"
-msgstr "Búsqueda por facetas"
-
-#: templates/facettes.html:55
-msgid "Partager la session"
-msgstr "Compartir sesión"
-
-#: templates/facettes.html:58
-msgid "En lecture seule"
-msgstr "Lectura sola"
-
-#: templates/facettes.html:59
-msgid "En lecture-ecriture"
-msgstr "Lectura-escritura"
-
-#: templates/facettes.html:62
-msgid "Copier le lien"
-msgstr "Enlácenos"
-
-#: templates/facettes.html:67
-msgid "Mes vues :"
-msgstr "Mis vistas:"
-
-#: templates/facettes.html:73
-msgid "Creer une vue sur des resultats de recherche"
-msgstr "Crear una lista de los resultados de búsqueda"
-
-#: templates/facettes.html:74
-msgid "Creer une liste de notices"
-msgstr "Crear une lista de registros"
-
-#: templates/facettes.html:82
-msgid "Filtres :"
-msgstr "Filtros:"
-
-#: templates/facettes.html:100
-msgid "Gerer la vue"
-msgstr "Administrar la vista"
-
-#: templates/facettes.html:104
-msgid "Nom :"
-msgstr "Nombre:"
-
-#: templates/facettes.html:107
-msgid "Blocs visibles :"
-msgstr "bloques visibles:"
-
-#: templates/facettes.html:112
-msgid "Pays"
-msgstr "País"
-
-#: templates/facettes.html:118
-msgid "Nuage de mots-cles"
-msgstr "Nube de palabras clave"
-
-#: templates/facettes.html:125
-msgid "Information sur un mot-cle"
-msgstr "Información sobre una palabra llave"
-
-#: templates/facettes.html:129
-msgid "Rechercher un tag"
-msgstr "Buscar una etiqueta"
-
-#: templates/facettes.html:134
-msgid "translation_info"
-msgstr "Traducción de la interfaz en español por Roselyne Aliacar"
-
-#: templates/facettes.html:140
-msgid "Notes"
-msgstr "Notas"
-
-#: templates/facettes.html:146
-msgid "Disciplines artistiques"
-msgstr "Disciplinas artísticas"
-
-#: templates/facettes.html:152
-msgid "Resultats de recherche"
-msgstr "Resultados de búsqueda"
-
-#: templates/completion.html:37
-msgid "Recherche par liste de completion"
-msgstr "Busqueda con autocompletar"
Binary file web/hdalab/locale/es/LC_MESSAGES/djangojs.mo has changed
--- a/web/hdalab/locale/es/LC_MESSAGES/djangojs.po	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,120 +0,0 @@
-# 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.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-01 09:09-0500\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"
-"Language: \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"
-
-#: static/hdalab/js/gomina.js:123
-msgid "contenu"
-msgid_plural "contenus"
-msgstr[0] "contenido"
-msgstr[1] "contenidos"
-
-#: static/hdalab/js/gomina.js:123
-msgid "pour ce tag"
-msgstr "para esta etiqueta"
-
-#: static/hdalab/js/gomina.js:261
-msgid "Toutes periodes"
-msgstr "Todos períodos"
-
-#: static/hdalab/js/gomina.js:263
-msgid "Periode&nbsp;:"
-msgstr "Período&nbsp;:"
-
-#: static/hdalab/js/gomina.js:265
-msgid "a"
-msgstr "a"
-
-#: static/hdalab/js/gomina.js:285
-msgid "Pays&nbsp;:"
-msgstr "País&nbsp;:"
-
-#: static/hdalab/js/gomina.js:294
-msgid "Tag&nbsp;:"
-msgstr "Etiqueta&nbsp;:"
-
-#: static/hdalab/js/gomina.js:337
-msgid "Annotations"
-msgstr "Anotaciones"
-
-#: static/hdalab/js/gomina.js:344 static/hdalab/js/gomina.js.c:394
-msgid "Annoter ce contenu"
-msgstr "Anotar este contenido"
-
-#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:374
-msgid "Ajouter a {0}"
-msgstr "Añadir a {0}"
-
-#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:371
-msgid "Retirer de {0}"
-msgstr "Borrar {0}"
-
-#: static/hdalab/js/gomina.js:427
-msgid "notice"
-msgid_plural "notices"
-msgstr[0] "Registro"
-msgstr[1] "Registros"
-
-#: static/hdalab/js/gomina.js:539
-msgid ""
-"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
-msgstr ""
-"La lista de contenidos esta vacia! Añada contenidos (para ver la lista)!"
-
-#: static/hdalab/js/gomina.js:552 static/hdalab/js/gomina.js.c:855
-msgid "Gerer la vue"
-msgstr "Administrar la vista"
-
-#: static/hdalab/js/gomina.js:561 static/hdalab/js/gomina.js.c:866
-msgid "Annoter cette vue"
-msgstr "Anotar esta vista"
-
-#: static/hdalab/js/gomina.js:614
-msgid "Nouvelle session"
-msgstr "Iniciar sesión"
-
-#: static/hdalab/js/gomina.js:620
-msgid "Mes resultats de recherche"
-msgstr "Mis resultados de búsqueda"
-
-#: static/hdalab/js/gomina.js:621
-msgid "Ma liste"
-msgstr "Mi lista"
-
-#: static/hdalab/js/gomina.js:632
-msgid "lecture seule"
-msgstr "lectura sola"
-
-#: static/hdalab/js/gomina.js:912 static/hdalab/js/gomina.js.c:920
-msgid "Comment souhaitez-vous nommer votre nouvelle vue ?"
-msgstr "Como desea nombrar su nueva vista?"
-
-#: static/hdalab/js/gomina.js:912
-msgid "Nouveaux resultats de recherche"
-msgstr "Nuevos resultados de búsqueda"
-
-#: static/hdalab/js/gomina.js:920
-msgid "Nouvelle liste"
-msgstr "Nueva lista"
-
-#: static/hdalab/js/completion.js:73
-msgid "Source&nbsp;: Wikipédia"
-msgstr "Fuente: Wikipedia"
-
-#: static/hdalab/js/completion.js:20
-msgid "Localisation&nbsp;:"
-msgstr "Localización:"
Binary file web/hdalab/locale/fr/LC_MESSAGES/django.mo has changed
--- a/web/hdalab/locale/fr/LC_MESSAGES/django.po	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,126 +0,0 @@
-# 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.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-05-30 10:20-0500\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"
-"Language: \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"
-
-#: settings.py:40
-msgid "French"
-msgstr "Français"
-
-#: settings.py:41
-msgid "English"
-msgstr "Anglais"
-
-#: settings.py:42
-msgid "Italian"
-msgstr "Italien"
-
-#: settings.py:43
-msgid "German"
-msgstr "Allemand"
-
-#: settings.py:44
-msgid "Spanish"
-msgstr "Espagnol"
-
-#: settings.py:45
-msgid "Japanese"
-msgstr "Japonais"
-
-#: settings.py:46
-msgid "Chinese"
-msgstr "Chinois"
-
-#: templates/facettes.html:5 templates/facettes.html.py:42
-msgid "Recherche par facettes"
-msgstr "Recherche par facettes"
-
-#: templates/facettes.html:55
-msgid "Partager la session"
-msgstr "Partager la session"
-
-#: templates/facettes.html:58
-msgid "En lecture seule"
-msgstr "En lecture seule"
-
-#: templates/facettes.html:59
-msgid "En lecture-ecriture"
-msgstr "En lecture-écriture"
-
-#: templates/facettes.html:62
-msgid "Copier le lien"
-msgstr "Copier le lien"
-
-#: templates/facettes.html:67
-msgid "Mes vues :"
-msgstr "Mes vues :"
-
-#: templates/facettes.html:73
-msgid "Creer une vue sur des resultats de recherche"
-msgstr "Créer une vue sur des résultats de recherche"
-
-#: templates/facettes.html:74
-msgid "Creer une liste de notices"
-msgstr "Créer une liste de notices"
-
-#: templates/facettes.html:82
-msgid "Filtres :"
-msgstr "Filtres :"
-
-#: templates/facettes.html:100
-msgid "Gerer la vue"
-msgstr "Gérer la vue"
-
-#: templates/facettes.html:104
-msgid "Nom :"
-msgstr "Nom :"
-
-#: templates/facettes.html:107
-msgid "Blocs visibles :"
-msgstr "Blocs visibles :"
-
-#: templates/facettes.html:112
-msgid "Pays"
-msgstr "Pays"
-
-#: templates/facettes.html:118
-msgid "Nuage de mots-cles"
-msgstr "Nuage de mots-clés"
-
-#: templates/facettes.html:125
-msgid "Information sur un mot-cle"
-msgstr "Information sur un mot-clé"
-
-#: templates/facettes.html:129
-msgid "Rechercher un tag"
-msgstr "Rechercher un tag"
-
-#: templates/facettes.html:134
-msgid "translation_info"
-msgstr " "
-
-#: templates/facettes.html:140
-msgid "Notes"
-msgstr "Notes"
-
-#: templates/facettes.html:146
-msgid "Disciplines artistiques"
-msgstr "Disciplines artistiques"
-
-#: templates/facettes.html:152
-msgid "Resultats de recherche"
-msgstr "Résultats de recherche"
Binary file web/hdalab/locale/fr/LC_MESSAGES/djangojs.mo has changed
--- a/web/hdalab/locale/fr/LC_MESSAGES/djangojs.po	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,120 +0,0 @@
-# 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.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-01 09:09-0500\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"
-"Language: \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"
-
-#: static/hdalab/js/gomina.js:123
-msgid "contenu"
-msgid_plural "contenus"
-msgstr[0] "contenu"
-msgstr[1] "contenus"
-
-#: static/hdalab/js/gomina.js:123
-msgid "pour ce tag"
-msgstr "pour ce tag"
-
-#: static/hdalab/js/gomina.js:261
-msgid "Toutes periodes"
-msgstr "Toutes périodes"
-
-#: static/hdalab/js/gomina.js:263
-msgid "Periode&nbsp;:"
-msgstr "Période&nbsp;:"
-
-#: static/hdalab/js/gomina.js:265
-msgid "a"
-msgstr "à"
-
-#: static/hdalab/js/gomina.js:285
-msgid "Pays&nbsp;:"
-msgstr "Pays&nbsp;:"
-
-#: static/hdalab/js/gomina.js:294
-msgid "Tag&nbsp;:"
-msgstr ""
-
-#: static/hdalab/js/gomina.js:337
-msgid "Annotations"
-msgstr "Annotations"
-
-#: static/hdalab/js/gomina.js:344 static/hdalab/js/gomina.js.c:394
-msgid "Annoter ce contenu"
-msgstr "Annoter ce contenu"
-
-#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:374
-msgid "Ajouter a {0}"
-msgstr "Ajouter à {0}"
-
-#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:371
-msgid "Retirer de {0}"
-msgstr "Retirer de {0}"
-
-#: static/hdalab/js/gomina.js:427
-msgid "notice"
-msgid_plural "notices"
-msgstr[0] "notice"
-msgstr[1] "notices"
-
-#: static/hdalab/js/gomina.js:539
-msgid ""
-"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
-msgstr ""
-"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
-
-#: static/hdalab/js/gomina.js:552 static/hdalab/js/gomina.js.c:855
-msgid "Gerer la vue"
-msgstr "Gérer la vue"
-
-#: static/hdalab/js/gomina.js:561 static/hdalab/js/gomina.js.c:866
-msgid "Annoter cette vue"
-msgstr "Annoter cette vue"
-
-#: static/hdalab/js/gomina.js:614
-msgid "Nouvelle session"
-msgstr "Nouvelle session"
-
-#: static/hdalab/js/gomina.js:620
-msgid "Mes resultats de recherche"
-msgstr "Mes résultats de recherche"
-
-#: static/hdalab/js/gomina.js:621
-msgid "Ma liste"
-msgstr "Ma liste"
-
-#: static/hdalab/js/gomina.js:632
-msgid "lecture seule"
-msgstr "lecture seule"
-
-#: static/hdalab/js/gomina.js:912 static/hdalab/js/gomina.js.c:920
-msgid "Comment souhaitez-vous nommer votre nouvelle vue ?"
-msgstr "Comment souhaitez-vous nommer votre nouvelle vue ?"
-
-#: static/hdalab/js/gomina.js:912
-msgid "Nouveaux resultats de recherche"
-msgstr "Nouveaux résultats de recherche"
-
-#: static/hdalab/js/gomina.js:920
-msgid "Nouvelle liste"
-msgstr "Nouvelle liste"
-
-#: static/hdalab/js/completion.js:73
-msgid "Source&nbsp;: Wikipédia"
-msgstr "Source&nbsp;: Wikipédia"
-
-#: static/hdalab/js/completion.js:20
-msgid "Localisation&nbsp;:"
-msgstr "Localisation&nbsp;:"
Binary file web/hdalab/locale/it/LC_MESSAGES/django.mo has changed
--- a/web/hdalab/locale/it/LC_MESSAGES/django.po	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,130 +0,0 @@
-# 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.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-05-30 10:20-0500\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"
-"Language: \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"
-
-#: settings.py:40
-msgid "French"
-msgstr "Francese"
-
-#: settings.py:41
-msgid "English"
-msgstr "Inglese"
-
-#: settings.py:42
-msgid "Italian"
-msgstr "Italiano"
-
-#: settings.py:43
-msgid "German"
-msgstr "Tedesco"
-
-#: settings.py:44
-msgid "Spanish"
-msgstr "Spagnolo"
-
-#: settings.py:45
-msgid "Japanese"
-msgstr "Giapponese"
-
-#: settings.py:46
-msgid "Chinese"
-msgstr "Cinese"
-
-#: templates/facettes.html:5 templates/facettes.html.py:42
-msgid "Recherche par facettes"
-msgstr "Ricerca per campo"
-
-#: templates/facettes.html:55
-msgid "Partager la session"
-msgstr "Dividere la sessione"
-
-#: templates/facettes.html:58
-msgid "En lecture seule"
-msgstr "Solo lettura"
-
-#: templates/facettes.html:59
-msgid "En lecture-ecriture"
-msgstr "Lettura-scrittura"
-
-#: templates/facettes.html:62
-msgid "Copier le lien"
-msgstr "Copiare il link"
-
-#: templates/facettes.html:67
-msgid "Mes vues :"
-msgstr "Le mie vedute:"
-
-#: templates/facettes.html:73
-msgid "Creer une vue sur des resultats de recherche"
-msgstr "Creare una veduta su i risultati della ricerca"
-
-#: templates/facettes.html:74
-msgid "Creer une liste de notices"
-msgstr "Creare un elenco di informazioni"
-
-#: templates/facettes.html:82
-msgid "Filtres :"
-msgstr "Filtri:"
-
-#: templates/facettes.html:100
-msgid "Gerer la vue"
-msgstr "Gestire la veduta"
-
-#: templates/facettes.html:104
-msgid "Nom :"
-msgstr "Nome:"
-
-#: templates/facettes.html:107
-msgid "Blocs visibles :"
-msgstr "Blocchi visibili:"
-
-#: templates/facettes.html:112
-msgid "Pays"
-msgstr "Paese"
-
-#: templates/facettes.html:118
-msgid "Nuage de mots-cles"
-msgstr "Nucleo di parole chiave"
-
-#: templates/facettes.html:125
-msgid "Information sur un mot-cle"
-msgstr "Informazioni su una parola chiave"
-
-#: templates/facettes.html:129
-msgid "Rechercher un tag"
-msgstr "Cercare un tag"
-
-#: templates/facettes.html:134
-msgid "translation_info"
-msgstr "Traduzione dell'interfaccia informatica in italiano: Natalie Biet"
-
-#: templates/facettes.html:140
-msgid "Notes"
-msgstr "Note"
-
-#: templates/facettes.html:146
-msgid "Disciplines artistiques"
-msgstr "Discipline artistiche"
-
-#: templates/facettes.html:152
-msgid "Resultats de recherche"
-msgstr "Risultati della ricerca"
-
-#: templates/completion.html:37
-msgid "Recherche par liste de completion"
-msgstr "Ricerca con autocompletamento"
Binary file web/hdalab/locale/it/LC_MESSAGES/djangojs.mo has changed
--- a/web/hdalab/locale/it/LC_MESSAGES/djangojs.po	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,121 +0,0 @@
-# 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.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-01 09:09-0500\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"
-"Language: \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"
-
-#: static/hdalab/js/gomina.js:123
-msgid "contenu"
-msgid_plural "contenus"
-msgstr[0] "contenuto"
-msgstr[1] "contenuti"
-
-#: static/hdalab/js/gomina.js:123
-msgid "pour ce tag"
-msgstr "Per questo tag"
-
-#: static/hdalab/js/gomina.js:261
-msgid "Toutes periodes"
-msgstr "Qualsiasi periodo"
-
-#: static/hdalab/js/gomina.js:263
-msgid "Periode&nbsp;:"
-msgstr "periodo:"
-
-#: static/hdalab/js/gomina.js:265
-msgid "a"
-msgstr "al"
-
-#: static/hdalab/js/gomina.js:285
-msgid "Pays&nbsp;:"
-msgstr "Paese:"
-
-#: static/hdalab/js/gomina.js:294
-msgid "Tag&nbsp;:"
-msgstr "Tag:"
-
-#: static/hdalab/js/gomina.js:337
-msgid "Annotations"
-msgstr "Annotazioni"
-
-#: static/hdalab/js/gomina.js:344 static/hdalab/js/gomina.js.c:394
-msgid "Annoter ce contenu"
-msgstr "Annotare questo contenuto"
-
-#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:374
-msgid "Ajouter a {0}"
-msgstr "Aggiungere a {0}"
-
-#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:371
-msgid "Retirer de {0}"
-msgstr "Togliere da {0}"
-
-#: static/hdalab/js/gomina.js:427
-msgid "notice"
-msgid_plural "notices"
-msgstr[0] "informazion"
-msgstr[1] "informazioni"
-
-#: static/hdalab/js/gomina.js:539
-msgid ""
-"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
-msgstr ""
-"L'elenco dei contenuti è vuoto! Aggiungere dei contenuti per visualizzare "
-"l'elenco !"
-
-#: static/hdalab/js/gomina.js:552 static/hdalab/js/gomina.js.c:855
-msgid "Gerer la vue"
-msgstr "Gestire la veduta"
-
-#: static/hdalab/js/gomina.js:561 static/hdalab/js/gomina.js.c:866
-msgid "Annoter cette vue"
-msgstr "Annotare questa veduta"
-
-#: static/hdalab/js/gomina.js:614
-msgid "Nouvelle session"
-msgstr "Nuova sessione"
-
-#: static/hdalab/js/gomina.js:620
-msgid "Mes resultats de recherche"
-msgstr "La mia ricerca"
-
-#: static/hdalab/js/gomina.js:621
-msgid "Ma liste"
-msgstr "Il mio elenco"
-
-#: static/hdalab/js/gomina.js:632
-msgid "lecture seule"
-msgstr "solo lettura"
-
-#: static/hdalab/js/gomina.js:912 static/hdalab/js/gomina.js.c:920
-msgid "Comment souhaitez-vous nommer votre nouvelle vue ?"
-msgstr "Come volete chiamare la vostra nuova veduta ?"
-
-#: static/hdalab/js/gomina.js:912
-msgid "Nouveaux resultats de recherche"
-msgstr "Nuovi risultati di ricerca"
-
-#: static/hdalab/js/gomina.js:920
-msgid "Nouvelle liste"
-msgstr "Nuovo elenco"
-
-#: static/hdalab/js/completion.js:73
-msgid "Source&nbsp;: Wikipédia"
-msgstr "Fonte: Wikipedia"
-
-#: static/hdalab/js/completion.js:20
-msgid "Localisation&nbsp;:"
-msgstr "Localizzazione:"
Binary file web/hdalab/locale/ja/LC_MESSAGES/django.mo has changed
--- a/web/hdalab/locale/ja/LC_MESSAGES/django.po	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,127 +0,0 @@
-# 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.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-03-20 11:21-0500\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translamessage:%3C20120531030701.11087.qmail@ml.vector.co.jp%3Etor: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \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"
-
-#: settings.py:40
-msgid "French"
-msgstr "フランス語"
-
-#: settings.py:41
-msgid "English"
-msgstr "英語"
-
-#: settings.py:42
-msgid "Italian"
-msgstr "イタリア語"
-
-#: settings.py:43
-msgid "German"
-msgstr "ドイツ語"
-
-#: settings.py:44
-msgid "Spanish"
-msgstr "スペイン語"
-
-#: settings.py:45
-msgid "Japanese"
-msgstr "日本語"
-
-#: settings.py:46
-msgid "Chinese"
-msgstr "中国語"
-
-
-#: templates/facettes.html:5 templates/facettes.html.py:42
-msgid "Recherche par facettes"
-msgstr "ファセット検索"
-
-#: templates/facettes.html:55
-msgid "Partager la session"
-msgstr "このセッションを共有"
-
-#: templates/facettes.html:58
-msgid "En lecture seule"
-msgstr "読み出しのみ"
-
-#: templates/facettes.html:59
-msgid "En lecture-ecriture"
-msgstr "読み/書き"
-
-#: templates/facettes.html:62
-msgid "Copier le lien"
-msgstr "この行をコピー"
-
-#: templates/facettes.html:67
-msgid "Mes vues :"
-msgstr "マイ・ビュー:"
-
-#: templates/facettes.html:73
-msgid "Creer une vue sur des resultats de recherche"
-msgstr "検索結果から新規ビューを作る"
-
-#: templates/facettes.html:74
-msgid "Creer une liste de notices"
-msgstr "記事のリストを作る"
-
-#: templates/facettes.html:82
-msgid "Filtres :"
-msgstr "フィルター"
-
-#: templates/facettes.html:100
-msgid "Gerer la vue"
-msgstr "ビューの管理"
-
-#: templates/facettes.html:104
-msgid "Nom :"
-msgstr "名前:"
-
-#: templates/facettes.html:107
-msgid "Blocs visibles :"
-msgstr "可視ブロック:"
-
-#: templates/facettes.html:112
-msgid "Pays"
-msgstr "国名"
-
-#: templates/facettes.html:118
-msgid "Nuage de mots-cles"
-msgstr "キーワードクラウド"
-
-#: templates/facettes.html:125
-msgid "Information sur un mot-cle"
-msgstr "キーワードについての情報"
-
-#: templates/facettes.html:129
-msgid "Rechercher un tag"
-msgstr "タグを検索する"
-
-#: templates/facettes.html:134
-msgid "translation_info"
-msgstr "翻訳に関する情報"
-
-#: templates/facettes.html:140
-msgid "Notes"
-msgstr "注釈"
-
-#: templates/facettes.html:146
-msgid "Disciplines artistiques"
-msgstr "学術・芸術分野"
-
-#: templates/facettes.html:152
-msgid "Resultats de recherche"
-msgstr "検索結果"
Binary file web/hdalab/locale/ja/LC_MESSAGES/djangojs.mo has changed
--- a/web/hdalab/locale/ja/LC_MESSAGES/djangojs.po	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,120 +0,0 @@
-# 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.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-01 09:09-0500\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"
-"Language: \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"
-
-#: static/hdalab/js/gomina.js:123
-msgid "contenu"
-msgid_plural "contenus"
-msgstr[0] "個"
-msgstr[1] "個"
-
-#: static/hdalab/js/gomina.js:123
-msgid "pour ce tag"
-msgstr "のコンツンツがこのタグと関係"
-
-#: static/hdalab/js/gomina.js:261
-msgid "Toutes periodes"
-msgstr "すべての期間"
-
-#: static/hdalab/js/gomina.js:263
-msgid "Periode&nbsp;:"
-msgstr "期間:"
-
-#: static/hdalab/js/gomina.js:265
-msgid "a"
-msgstr "から"
-
-#: static/hdalab/js/gomina.js:285
-msgid "Pays&nbsp;:"
-msgstr "国名:"
-
-#: static/hdalab/js/gomina.js:294
-msgid "Tag&nbsp;:"
-msgstr "タグ:"
-
-#: static/hdalab/js/gomina.js:337
-msgid "Annotations"
-msgstr "注釈"
-
-#: static/hdalab/js/gomina.js:344 static/hdalab/js/gomina.js.c:394
-msgid "Annoter ce contenu"
-msgstr "このコンテンツに注釈をつける"
-
-#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:374
-msgid "Ajouter a {0}"
-msgstr "リストに追加 {0}"
-
-#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:371
-msgid "Retirer de {0}"
-msgstr "リストから取り除く {0}"
-
-#: static/hdalab/js/gomina.js:427
-msgid "notice"
-msgid_plural "notices"
-msgstr[0] "個の記事"
-msgstr[1] "個の記事"
-
-#: static/hdalab/js/gomina.js:539
-msgid ""
-"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
-msgstr ""
-"リストが空です。 リストを表示するにはコンテンツを1つ以上追加してください"
-
-#: static/hdalab/js/gomina.js:552 static/hdalab/js/gomina.js.c:855
-msgid "Gerer la vue"
-msgstr "ビューの管理"
-
-#: static/hdalab/js/gomina.js:561 static/hdalab/js/gomina.js.c:866
-msgid "Annoter cette vue"
-msgstr "このビューに注釈をつける"
-
-#: static/hdalab/js/gomina.js:614
-msgid "Nouvelle session"
-msgstr "新規セッション"
-
-#: static/hdalab/js/gomina.js:620
-msgid "Mes resultats de recherche"
-msgstr "マイ検索結果"
-
-#: static/hdalab/js/gomina.js:621
-msgid "Ma liste"
-msgstr "マイリスト"
-
-#: static/hdalab/js/gomina.js:632
-msgid "lecture seule"
-msgstr "読み出しのみ"
-
-#: static/hdalab/js/gomina.js:912 static/hdalab/js/gomina.js.c:920
-msgid "Comment souhaitez-vous nommer votre nouvelle vue ?"
-msgstr "新規ビューに名前を付けてください"
-
-#: static/hdalab/js/gomina.js:912
-msgid "Nouveaux resultats de recherche"
-msgstr "名称未設定の検索結果"
-
-#: static/hdalab/js/gomina.js:920
-msgid "Nouvelle liste"
-msgstr "名称未設定のリスト"
-
-#: static/hdalab/js/completion.js:73
-msgid "Source&nbsp;: Wikipédia"
-msgstr "ウィキペディア"
-
-#: static/hdalab/js/completion.js:20
-msgid "Localisation&nbsp;:"
-msgstr "Location:"
Binary file web/hdalab/locale/zh-tw/LC_MESSAGES/django.mo has changed
--- a/web/hdalab/locale/zh-tw/LC_MESSAGES/django.po	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,127 +0,0 @@
-# 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: 2012-05-30 10:20-0500\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"
-"Language: \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"
-
-#: settings.py:40
-msgid "French"
-msgstr "Français"
-
-#: settings.py:41
-msgid "English"
-msgstr "Anglais"
-
-#: settings.py:42
-msgid "Italian"
-msgstr ""
-
-#: settings.py:43
-msgid "German"
-msgstr "Allemand"
-
-#: settings.py:44
-msgid "Spanish"
-msgstr "Espagnol"
-
-#: settings.py:45
-msgid "Japanese"
-msgstr ""
-
-#: settings.py:46
-msgid "Chinese"
-msgstr ""
-
-#: templates/facettes.html:5 templates/facettes.html.py:42
-msgid "Recherche par facettes"
-msgstr "Recherche par facettes"
-
-#: templates/facettes.html:55
-msgid "Partager la session"
-msgstr "Partager la session"
-
-#: templates/facettes.html:58
-msgid "En lecture seule"
-msgstr "En lecture seule"
-
-#: templates/facettes.html:59
-msgid "En lecture-ecriture"
-msgstr "En lecture-écriture"
-
-#: templates/facettes.html:62
-msgid "Copier le lien"
-msgstr "Copier le lien"
-
-#: templates/facettes.html:67
-msgid "Mes vues :"
-msgstr "Mes vues :"
-
-#: templates/facettes.html:73
-msgid "Creer une vue sur des resultats de recherche"
-msgstr "Créer une vue sur des résultats de recherche"
-
-#: templates/facettes.html:74
-msgid "Creer une liste de notices"
-msgstr "Créer une liste de notices"
-
-#: templates/facettes.html:82
-msgid "Filtres :"
-msgstr "Filtres :"
-
-#: templates/facettes.html:100
-msgid "Gerer la vue"
-msgstr "Gérer la vue"
-
-#: templates/facettes.html:104
-msgid "Nom :"
-msgstr "Nom :"
-
-#: templates/facettes.html:107
-msgid "Blocs visibles :"
-msgstr "Blocs visibles :"
-
-#: templates/facettes.html:112
-msgid "Pays"
-msgstr "Pays"
-
-#: templates/facettes.html:118
-msgid "Nuage de mots-cles"
-msgstr "Nuage de mots-clés"
-
-#: templates/facettes.html:125
-msgid "Information sur un mot-cle"
-msgstr "Information sur un mot-clé"
-
-#: templates/facettes.html:129
-msgid "Rechercher un tag"
-msgstr "Rechercher un tag"
-
-#: templates/facettes.html:134
-msgid "translation_info"
-msgstr ""
-
-#: templates/facettes.html:140
-msgid "Notes"
-msgstr "Notes"
-
-#: templates/facettes.html:146
-msgid "Disciplines artistiques"
-msgstr "Disciplines artistiques"
-
-#: templates/facettes.html:152
-msgid "Resultats de recherche"
-msgstr "Résultats de recherche"
Binary file web/hdalab/locale/zh-tw/LC_MESSAGES/djangojs.mo has changed
--- a/web/hdalab/locale/zh-tw/LC_MESSAGES/djangojs.po	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,118 +0,0 @@
-# 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.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-01 09:09-0500\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"
-"Language: \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"
-
-#: static/hdalab/js/gomina.js:123
-msgid "contenu"
-msgid_plural "contenus"
-msgstr[0] "contenu"
-msgstr[1] "contenus"
-
-#: static/hdalab/js/gomina.js:123
-msgid "pour ce tag"
-msgstr "pour ce tag"
-
-#: static/hdalab/js/gomina.js:261
-msgid "Toutes periodes"
-msgstr "Toutes périodes"
-
-#: static/hdalab/js/gomina.js:263
-msgid "Periode&nbsp;:"
-msgstr "Période&nbsp;:"
-
-#: static/hdalab/js/gomina.js:265
-msgid "a"
-msgstr "à"
-
-#: static/hdalab/js/gomina.js:285
-msgid "Pays&nbsp;:"
-msgstr "Pays&nbsp;:"
-
-#: static/hdalab/js/gomina.js:294
-msgid "Tag&nbsp;:"
-msgstr ""
-
-#: static/hdalab/js/gomina.js:337
-msgid "Annotations"
-msgstr "Annotations"
-
-#: static/hdalab/js/gomina.js:344 static/hdalab/js/gomina.js.c:394
-msgid "Annoter ce contenu"
-msgstr "Annoter ce contenu"
-
-#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:374
-#, fuzzy
-msgid "Ajouter a {0}"
-msgstr "Ajouter à"
-
-#: static/hdalab/js/gomina.js:354 static/hdalab/js/gomina.js.c:371
-#, fuzzy
-msgid "Retirer de {0}"
-msgstr "Retirer de"
-
-#: static/hdalab/js/gomina.js:427
-msgid "notice"
-msgid_plural "notices"
-msgstr[0] "notice"
-msgstr[1] "notices"
-
-#: static/hdalab/js/gomina.js:539
-msgid ""
-"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
-msgstr ""
-"La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"
-
-#: static/hdalab/js/gomina.js:552 static/hdalab/js/gomina.js.c:855
-msgid "Gerer la vue"
-msgstr "Gérer la vue"
-
-#: static/hdalab/js/gomina.js:561 static/hdalab/js/gomina.js.c:866
-msgid "Annoter cette vue"
-msgstr "Annoter cette vue"
-
-#: static/hdalab/js/gomina.js:614
-msgid "Nouvelle session"
-msgstr "Nouvelle session"
-
-#: static/hdalab/js/gomina.js:620
-msgid "Mes resultats de recherche"
-msgstr "Mes résultats de recherche"
-
-#: static/hdalab/js/gomina.js:621
-msgid "Ma liste"
-msgstr "Ma liste"
-
-#: static/hdalab/js/gomina.js:632
-msgid "lecture seule"
-msgstr "lecture seule"
-
-#: static/hdalab/js/gomina.js:912 static/hdalab/js/gomina.js.c:920
-msgid "Comment souhaitez-vous nommer votre nouvelle vue ?"
-msgstr "Comment souhaitez-vous nommer votre nouvelle vue ?"
-
-#: static/hdalab/js/gomina.js:912
-msgid "Nouveaux resultats de recherche"
-msgstr "Nouveaux résultats de recherche"
-
-#: static/hdalab/js/gomina.js:920
-msgid "Nouvelle liste"
-msgstr "Nouvelle liste"
-
-#: static/hdalab/js/completion.js:73
-msgid "Source&nbsp;: Wikipédia"
-msgstr "Source&nbsp;: Wikipédia"
--- a/web/hdalab/manage.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-from django.core.management import execute_manager
-import imp
-try:
-    imp.find_module('settings') # Assumed to be in the same directory.
-except ImportError:
-    import sys
-    sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n" % __file__)
-    sys.exit(1)
-
-import settings
-
-if __name__ == "__main__":
-    execute_manager(settings)
--- a/web/hdalab/management/commands/export_tags_csv.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,124 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Jan 25, 2012
-
-@author: ymh
-'''
-
-from django.core.management.base import BaseCommand, CommandError
-from django.db.models import Q
-from hdabo import utils
-from hdabo.models import Tag
-from optparse import make_option
-from hdalab.management.utils import UnicodeWriter
-
-class Command(BaseCommand):
-    '''
-    Command to export tags
-    '''
-    args = '<path_to_name_base_csv_file>'
-    options = '[-c|--category filter by category name] [-e|--encoding csv file encoding]'
-    help = """export csv files for hdabo
-Options:
-    -c, --category : filter by category
-    --lines : max number of lines to load (for each file). 0 means all.
-    --encoding : files encoding. default to latin-1"""
-    
-    option_list = BaseCommand.option_list + (
-        make_option("-c","--category",
-            action='append',
-            type='string',
-            dest='categories',
-            default=[],
-            help='filter tag by category (or)'),
-        make_option("-e","--encoding",
-            action='store',
-            type='string',
-            dest='encoding',
-            default="utf-8",
-            help='file encoding, default utf-8'),
-        make_option("-f","--force",
-            action='store_true',
-            dest='force',
-            default=False,
-            help='force file overwrite'),
-        )
-        
-    def handle(self, *args, **options):
-        
-        if len(args) == 0 or not args[0]:
-            raise CommandError("Gives at last one csv file to export")
-
-        self.encoding = options.get("encoding", "utf-8")
-        self.categories = options.get("categories", [])
-        self.force = options.get("force", False)
-        self.base_path = args[0].strip()
-        self.interactive = options.get("interactive",True)
-        
-        files_path = {
-            "visible" : { 'path':self.base_path + "_visible.txt",},
-            "hidden" : { 'path':self.base_path + "_hidden.txt",},
-            "infobox" : { 'path':self.base_path + "_infobox.txt",},
-        }
-        
-        try:
-            for filedef in files_path.values():
-                try:
-                    filedef['file'] = open(filedef['path'],'r')
-                    if (not self.force) and self.interactive:
-                        print filedef['path']
-                        resp = raw_input("export file already exists. override ? type yes to continue : ")
-                        if resp is not None and (resp.lower() == "yes" or resp.lower() == "y"):
-                            self.force = True
-                            # clear file
-                        else:
-                            return "error"
-                    elif not self.interactive and not self.force:
-                        print "Export file %s already exists. Exit." % (filedef['path'])
-                        return "error"
-
-                    filedef['file'].close()
-                    filedef['file'] = open(filedef['path'],'w')
-                except IOError:
-                    filedef['file'] = open(filedef['path'],'w')
-                
-                filedef['csv'] = UnicodeWriter(filedef['file'], doublequote=False, escapechar="\\", encoding=self.encoding)
-                
-            queryset = Tag.objects.exclude(wikipedia_pageid= None)
-            cat_filter = None
-            for cat in self.categories:
-                if cat_filter is None:
-                    cat_filter = Q(category__label = cat)
-                else:
-                    cat_filter = cat_filter | Q(category__label = cat)
-            if cat_filter is not None:
-                queryset = queryset.filter(cat_filter)
-            
-            tcount = queryset.count()
-            
-            print "Exporting %d tags" % (tcount)
-            writer = None
-                
-            for i,t in enumerate(queryset.order_by("label")):
-                
-                writer = utils.show_progress(i+1, tcount, t.label, 50, writer)
-                #normal category
-                row = [t.label,] + [cat.wp_category.label for cat in t.wp_categories.filter(hidden=False)]
-                files_path['visible']['csv'].writerow(row)
-                
-                #hidden category
-                row = [t.label,] + [cat.wp_category.label for cat in t.wp_categories.filter(hidden=True)]
-                files_path['hidden']['csv'].writerow(row)
-                
-                #infobox
-                for i in t.infoboxes.all():
-                    vec = [[p.param_name,p.param_value.replace('\n',"\\n")] for p in i.infoboxparameter_set.all()]
-                    ib_params = [num for elem in vec for num in elem]
-                    row = [t.label, i.name.strip()] + ib_params
-                    files_path['infobox']['csv'].writerow(row)
-            
-        finally:
-            for filedef in files_path.itervalues():
-                if filedef.get('file',None):
-                    filedef['file'].close()
-        
\ No newline at end of file
--- a/web/hdalab/management/commands/export_wpcategory_csv.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,89 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Feb 2, 2012
-
-@author: ymh
-'''
-from django.core.management.base import BaseCommand, CommandError
-from optparse import make_option
-from hdalab.management.utils import UnicodeWriter
-from hdabo.wp_utils import normalize_tag
-from hdalab.models.categories import WpCategory
-from django.utils.http import urlquote
-from hdabo.utils import show_progress
-
-class Command(BaseCommand):
-    '''
-    Command to export tags
-    '''
-    args = '<path_to_csv_file>'
-    options = '[-e|--encoding csv file encoding]|[-f|--force force file overwrite]'
-    help = """export csv files for hdabo
-Options:
-    -e, --encoding : files encoding. default to latin-1
-    -f, --force : force file overwrite
-    """
-    
-    option_list = BaseCommand.option_list + (
-        make_option("-e","--encoding",
-            action='store',
-            type='string',
-            dest='encoding',
-            default="utf-8",
-            help='file encoding, default utf-8'),
-        make_option("-f","--force",
-            action='store_true',
-            dest='force',
-            default=False,
-            help='force file overwrite'),
-        )
-        
-    def handle(self, *args, **options):
-        
-        if len(args) == 0 or not args[0]:
-            raise CommandError("Gives at last one csv file to export")
-
-        self.encoding = options.get("encoding", "utf-8")
-        self.force = options.get("force", False)
-        self.path = args[0].strip()
-        self.interactive = options.get("interactive",True)
-
-        file = None        
-        try:
-            try:
-                file = open(self.path,'r')
-                if (not self.force) and self.interactive:
-                    print self.path
-                    resp = raw_input("export file already exists. override ? type yes to continue : ")
-                    if resp is not None and (resp.lower() == "yes" or resp.lower() == "y"):
-                        self.force = True
-                        # clear file
-                    else:
-                        return "error"
-                elif not self.interactive and not self.force:
-                    print "Export file %s already exists. Exit." % (self.path)
-                    return "error"
-    
-                file.close()
-                file = open(self.path,'w')
-            except IOError:
-                file = open(self.path,'w')
-        
-            csv = UnicodeWriter(file, doublequote=False, escapechar="\\", encoding=self.encoding)
-            writer = None
-            
-            qs = WpCategory.objects.filter(tagwpcategory__hidden=False).distinct()
-            
-            total = qs.count()
-            
-            for i,wpcat in enumerate(qs):
-                writer = show_progress(i+1, total, wpcat.label, 50, writer)
-                nb_ds = 0
-                for tag in wpcat.tagwpcategory_set.all():
-                    nb_ds += tag.tag.datasheet_set.count()
-                    
-                csv.writerow([wpcat.label, u"http://fr.wikipedia.org/wiki/Catégorie:%s" % urlquote(normalize_tag(wpcat.label)), nb_ds]) 
-
-        finally:
-            if file is not None:
-                file.close()
\ No newline at end of file
--- a/web/hdalab/management/commands/fill_tag_years.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Jan 29, 2012
-
-@author: ymh
-'''
-from django.core.management.base import NoArgsCommand
-from django.core.management.color import no_style
-from hdabo.utils import show_progress
-import re
-from hdabo.models import Tag
-from hdalab.models import TagYears
-
-class Command(NoArgsCommand):
-    def handle_noargs(self, **options):
-        self.style = no_style()
-
-        qs = Tag.objects.filter(category__label="Datation")
-        total = qs.count()
-        dbptstart = len("http://dbpedia.org/resource/")
-        
-        writer = None
-        
-        for i,tag in enumerate(qs):
-            writer = show_progress(i+1, total, tag.label, 50, writer)
-            start = None
-            end = None
-            range = re.findall("^(Années )?(-?\d+)\-?(\d+)?( en France| au cinéma)?$", tag.label)
-            # S'il s'agit d'une année ou d'un ensemble d'années
-            if range:
-                start = int(range[0][1])
-                end = start
-                if range[0][0]:
-                    end = start + 10
-                if range[0][2]:
-                    end = int(range[0][2])
-            else:
-                if tag.dbpedia_uri:
-                    dbptitle = tag.dbpedia_uri[dbptstart:]
-                    # S'il s'agit d'un siècle, on se fie à l'URL DBpedia,
-                    # car les siècles y sont en chiffres arabes.
-                    century = re.findall("(\d+)(st|nd|rd|th)_century_?(BC)?", dbptitle)
-                    if century:
-                        val = int(century[0][0])
-                        if century[0][2] == 'BC':
-                            start = -100*val
-                        else:
-                            start = 1 + 100*(val-1)
-                        end = start + 100
-            
-            if start != None and end != None:
-                ty = TagYears.objects.create(tag=tag, start_year=start, end_year=end)
-                ty.save()
--- a/web/hdalab/management/commands/geojson_transform.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,109 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-@author: raphv
-'''
-from django.core.management.base import BaseCommand, CommandError
-from django.utils.http import urlquote
-import django.utils.simplejson as json
-from SPARQLWrapper import SPARQLWrapper, JSON
-
-#import pydevd #@UnresolvedImport
-#pydevd.settrace(suspend=False)
-
-
-class Command(BaseCommand):
-    '''
-    Command to export tags
-    '''
-    args = '<path_to_geojson_file>'
-    options = ''
-    help = """Adds semantic data to countries.geo.json files"""
-        
-    def handle(self, *args, **options):
-
-        if len(args) == 0 or not args[0]:
-            raise CommandError("Give a Geo Json File to process")
-        
-        geojsonfile = args[0]
-        
-        f = open(geojsonfile,"r")
-        geojson = json.loads(f.read())
-        f.close()
-        
-        labels = [feature['properties']['name'] for feature in geojson['features']]
-        uris = dict([(label, 'http://dbpedia.org/resource/' + urlquote(label.replace(' ','_'))) for label in labels])
-        
-        uri_list = [uris[label] for label in uris]
-        base_uris = dict([(uris[label],uris[label]) for label in uris])
-        
-        grp = 10
-        endpoint = SPARQLWrapper("http://dbpedia.org/sparql")
-        endpoint.setReturnFormat(JSON)
-            
-        start = 0
-        while start < len(uri_list):
-            sparql = """
-                PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
-                SELECT ?source ?target
-                WHERE {
-                    ?source dbpedia-owl:wikiPageRedirects ?target .
-                    Filter (?source in (<%s>)) .
-                }
-            """ % '>, <'.join(uri_list[start:start + grp])
-            endpoint.setQuery(sparql)
-            results = endpoint.query().convert()
-            
-            for r in results["results"]["bindings"]:
-                source = r["source"]["value"]
-                target = r["target"]["value"]
-                base_uris[source] = target
-                #print "%s redirects to %s"%(source, target)
-            start += grp
-        
-        base_uri_list = [base_uris[uri] for uri in base_uris]
-        
-        french_labels = {}
-        labels = {}
-        
-        start = 0
-        while start < len(base_uri_list):
-            
-            sparql = """
-                PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
-                SELECT ?country ?label WHERE {
-                  ?country rdfs:label ?label .
-                  FILTER (?country in (<%s>))
-                }
-            """ % '>, <'.join(base_uri_list[start:start + grp])
-            
-            endpoint.setQuery(sparql)
-            results = endpoint.query().convert()
-            
-            print repr(results)
-            
-            for r in results["results"]["bindings"]:
-                country = r["country"]["value"]
-                label = r["label"]["value"]
-                if country not in labels:
-                    labels[country] = {}
-                labels[country][r["label"]["xml:lang"]] = label 
-                if r["label"]["xml:lang"] == 'fr':
-                    french_labels[country] = label
-                print "%s label: %s"%(country, label)
-            
-            start += grp
-        
-        for feature in geojson['features']:
-            base_uri = base_uris[uris[feature['properties']['name']]]
-            feature['properties']['dbpedia_uri'] = base_uri
-                        
-            if labels.has_key(base_uri):
-                feature['properties']['labels'] = labels[base_uri]
-            if french_labels.has_key(base_uri):
-                feature['properties']['label_fr'] = french_labels[base_uri]
-            else:
-                print "No label for %s"%base_uri
-        
-        f = open(geojsonfile,"w")
-        f.write(json.dumps(geojson))
-        f.close()
\ No newline at end of file
--- a/web/hdalab/management/commands/import_hda_insee_csv.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-@author: raphv
-'''
-from django.core.management.base import BaseCommand, CommandError
-import django.utils.simplejson as json
-from SPARQLWrapper import SPARQLWrapper, JSON
-from hdalab.models import InseeCoords, DatasheetExtras
-from hdabo.models import Datasheet
-import csv
-import re
-import sys
-
-class Command(BaseCommand):
-    '''
-    Command to export tags
-    '''
-    args = '<path_to_csv_file>'
-    options = ''
-    help = """Imports HDA Lab INSEE codes from a csv file"""
-        
-    def handle(self, *args, **options):
-
-        if len(args) == 0 or not args[0]:
-            raise CommandError("Give a CSV File to import")
-        
-        filename = args[0]
-        
-        csvfile = open(filename, "rb")
-        dialect = csv.Sniffer().sniff(csvfile.read(1024))
-        csvfile.seek(0)
-        reader = csv.reader(csvfile, dialect)
-        fieldstoget = [ 'id', 'insee' ]
-        
-        
-        for i,line in enumerate(reader):
-            if i == 0:
-                fields = {}
-                minlength = 0
-                for j,field in enumerate(line):
-                    for fieldname in fieldstoget:
-                        if re.search('(?i)%s' % fieldname, field):
-                            fields[fieldname] = j
-                            minlength = max(j,minlength)
-            else:
-                if len(line) > minlength:
-                    rawdata = dict([(k,line[v].strip()) for k,v in fields.iteritems()])
-                    # Traitement special pour la Corse
-                    insee = int(re.sub('^2(A|B)','20',rawdata['insee']))
-                        
-                    hda_id = int(rawdata['id'])
-                    
-                    try:
-                        datasheet = Datasheet.objects.get(hda_id=hda_id)
-                    except Datasheet.DoesNotExist:
-                        #print "Datasheet for id %d does not exist" % hda_id
-                        datasheet = None
-                    try:
-                        inseecoord = InseeCoords.objects.get(insee=insee)
-                    except InseeCoords.DoesNotExist:
-                        print "INSEE entry for Insee Code %d does not exist" % insee
-                        inseecoord = None
-                    
-                    if datasheet is not None and inseecoord is not None:
-                        dsextra, created = DatasheetExtras.objects.get_or_create(datasheet=datasheet, defaults={'insee':inseecoord})
-                        if not created:
-                            dsextra.insee = inseecoord
-                            dsextra.save()
-        
-        csvfile.close()
\ No newline at end of file
--- a/web/hdalab/management/commands/import_hdabo_db.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Feb 28, 2012
-
-@author: ymh
-'''
-from django.core.management.base import BaseCommand
-from django.core.management import call_command
-from optparse import make_option
-import os.path
-
-
-class Command(BaseCommand):
-
-    args = "[<path to the data folder>]"
-    option_list = BaseCommand.option_list + (
-        make_option('-c', '--categories',
-            action='store_true',
-            dest='categories',
-            default=False,
-            help='load categories in db'),
-    )
-
-
-    def handle(self, *args, **options):        
-        
-        if len(args) == 0:
-            data_path = os.path.abspath(os.path.join(os.path.basename(__file__),'../../../../data'))
-        else:
-            data_path = args[0]
-        
-        print("===========  MIGRATE ===========")
-        call_command('syncdb', migrate=True)
-        if options.get('categories', False):
-            print("===========  QUERY WIKIPEDIA CATEGORY ===========")
-            call_command('query_wikipedia_category', interactive=False, force=True)
-
-        print("===========  QUERY DBPEDIA ===========")                
-        call_command('query_dbpedia', interactive=False, force=True)
-        print("===========  FILL TAG YEAR ===========")
-        call_command('fill_tag_years')
-        print("===========  GEOJSON TRANSFORM ===========")
-        call_command('geojson_transform', os.path.join(data_path,'countries.geo.json'))
-        print("===========  QUERY GEO INCLUSION ===========")
-        call_command('query_geo_inclusion')
-        print("===========  IMPORT INSEE CSV PASS 1 ===========")
-        call_command('import_insee_csv', os.path.join(data_path,'villes.csv'))
-        print("===========  IMPORT INSEE CSV PASS 2 ===========")
-        call_command('import_insee_csv', os.path.join(data_path,'additional_cities.csv'))
-        print("===========  IMPORT HDA INSEE CSV ===========")
-        call_command('import_hda_insee_csv', os.path.join(data_path,'HDA_Insee.csv'))
-        print("===========  QUERY CATEGORY INCLUSION ===========")
-        call_command('query_category_inclusion', all=True, force=True, interactive=False)
-        
-        
\ No newline at end of file
--- a/web/hdalab/management/commands/import_insee_csv.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-@author: raphv
-'''
-from django.core.management.base import BaseCommand, CommandError
-import django.utils.simplejson as json
-from SPARQLWrapper import SPARQLWrapper, JSON
-from hdalab.models import InseeCoords
-import csv
-import re
-import sys
-
-class Command(BaseCommand):
-    '''
-    Command to export tags
-    '''
-    args = '<path_to_csv_file>'
-    options = ''
-    help = """Imports Insee codes and geographic coordinates from a csv file"""
-        
-    def handle(self, *args, **options):
-
-        if len(args) == 0 or not args[0]:
-            raise CommandError("Give a CSV File to import")
-        
-        filename = args[0]
-        
-        csvfile = open(filename, "rb")
-        dialect = csv.Sniffer().sniff(csvfile.read(1024))
-        csvfile.seek(0)
-        reader = csv.reader(csvfile, dialect)
-        fieldstoget = [ 'ville', 'insee', 'latitude', 'longitude' ]
-        
-        for i,line in enumerate(reader):
-            if i == 0:
-                fields = {}
-                minlength = 0
-                for j,field in enumerate(line):
-                    for fieldname in fieldstoget:
-                        if re.search('(?i)%s' % fieldname, field):
-                            fields[fieldname] = j
-                            minlength = max(j,minlength)
-            else:
-                if len(line) > minlength:
-                    rawdata = dict([(k,line[v].strip()) for k,v in fields.iteritems()])
-                    #print "Processing line %d" % i
-                    #print rawdata
-                    try:
-                        latitude = float(rawdata['latitude'].replace(',','.'))
-                        longitude = float(rawdata['longitude'].replace(',','.')) if rawdata['longitude'] != '-' else 0
-                        insee = int(rawdata['insee'])
-                        ville = unicode(rawdata['ville'], 'iso-8859-1')
-                        
-                        InseeCoords.objects.get_or_create(insee=insee, city_name=ville, latitude=latitude, longitude=longitude)
-                        
-                    except:
-                        print line, "Error :", sys.exc_info()[1]
-        
-        csvfile.close()
\ No newline at end of file
--- a/web/hdalab/management/commands/query_category_inclusion.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,167 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on July 2, 2012
-
-@author: raphv
-'''
-
-from django.conf import settings
-from django.core.management.base import NoArgsCommand
-from django.core.management.color import no_style
-from hdalab.models import WpCategory, WpCategoryInclusion
-from optparse import make_option
-from wikitools import api,wiki
-import sys
-import re
-import itertools
-from hdabo import utils
-from django.db.models import Count
-from django.db import transaction
-
-CATEGORY_PREFIX = u'Catégorie:'
-
-class Command(NoArgsCommand):
-    '''
-    query and update wikipedia for tag title.
-    '''
-    options = ''
-    help = """query and update wikipedia for tag title."""
-    
-    option_list = NoArgsCommand.option_list + (
-        make_option('--all',
-            action='store_true',
-            dest='all',
-            default=False,
-            help='force all categories to be updated, not only those not yet processed'),
-        make_option('--force',
-            action='store_true',
-            dest='force',
-            default=False,
-            help='ask no questions'),
-        make_option('--site',
-            action='store',
-            type='string',
-            dest='site_url',
-            default="http://fr.wikipedia.org/w/api.php",
-            help='the url for the wikipedia site'),
-        make_option('--limit',
-            action='store',
-            type='int',
-            dest='limit',
-            default= -1,
-            help='number of categories to process'),
-        make_option('--start',
-            action='store',
-            type='int',
-            dest='start',
-            default=0,
-            help='number of categories to ignore'),
-        make_option('--category',
-            action='append',
-            dest='category',
-            type='string',
-            default=[],
-            help='the categories to query'),
-
-    )
-
-
-    def query_all_categories(self, category_title, site):
-        
-        params = {'action':'query', 'cmtitle':category_title, 'list':'categorymembers', 'cmlimit': 'max'}
-        
-        res = []
-        
-        wpquery = api.APIRequest(site, params) #@UndefinedVariable
-        response = wpquery.query()
-        
-        if self.verbosity > 1:
-            print "Query category : " + repr(wpquery.request.get_full_url()+"?"+wpquery.request.get_data())
-            print repr(response)
-        
-        members = response.get('query', {}).get('categorymembers', [])
-                    
-        for member in members:
-            title = member.get('title',"")
-            if re.match(CATEGORY_PREFIX, title):
-                res.append(re.sub(CATEGORY_PREFIX, "", title))
-            
-        if self.verbosity > 1:
-            print "Query categories result: "
-            print repr(res)
-            
-        return res
-    
-    def process_categories(self, cat_list, parent_cat):
-        for cat in cat_list:
-            child_cat,created = WpCategory.objects.get_or_create(label=cat) #@UnusedVariable
-            WpCategoryInclusion.objects.get_or_create(parent_category=parent_cat, child_category=child_cat)
-        
-    def handle_noargs(self, **options):
-        
-        self.style = no_style()
-        
-        interactive = options.get('interactive', True)
-        
-        self.verbosity = int(options.get('verbosity', '1'))
-        
-        force = options.get('force', False)
-        
-        limit = options.get("limit", -1)
-        start = options.get("start", 0)
-        
-        site_url = options.get('site_url', settings.WIKIPEDIA_API_URL)
-        
-        types_mask = 0
-        
-        if self.verbosity > 2:
-            print "option passed : " + repr(options)
-
-        queryset = WpCategory.objects.filter(tags__hidden = False).distinct()
-        
-        cat_list = options.get("category", []);
-        
-        if cat_list:
-            queryset = queryset.filter(label__in=cat_list)
-        elif options.get('all',False):            
-            queryset = queryset.annotate(wpc=Count('child_categories')).filter(wpc = 0)                    
-        
-        queryset = queryset.order_by("label")
-        
-        if limit >= 0:
-            queryset = queryset[start:limit]
-        elif start > 0:
-            queryset = queryset[start:]            
-        
-        if self.verbosity > 2 :
-            print "Category Query is %s" % (queryset.query)
-        
-        site = wiki.Wiki(site_url) #@UndefinedVariable
-        
-        
-        count = queryset.count()
-        if self.verbosity > 1:
-            print "Processing %d categories" % (count)
-        
-        if not force and interactive:
-            confirm = raw_input("You have requested to query and replace the wikipedia information for %d categories.\n Are you sure you want to do this? \nType 'yes' to continue, or 'no' to cancel: " % (count))
-        else:
-            confirm = 'yes'
-            
-        if confirm != "yes":
-            print "wikipedia query cancelled"
-            return
-        
-        for i, category in enumerate(queryset):
-            
-            if self.verbosity > 1:
-                print "processing category %s (%d/%d)" % (category.label, i + 1, count)
-            else:
-                utils.show_progress(i + 1, count, category.label, 60)                            
-                
-            title = CATEGORY_PREFIX + category.label
-            # query categories
-
-            with transaction.commit_on_success():
-                res = self.query_all_categories(title, site)
-                self.process_categories(res, category)
\ No newline at end of file
--- a/web/hdalab/management/commands/query_dbpedia.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,205 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Jan 30, 2012
-
-@author: ymh
-'''
-
-from django.core.management.base import NoArgsCommand
-from django.core.management.color import no_style
-
-from optparse import make_option
-from django.conf import settings
-from django.db.models import Count
-from django.db import transaction
-from hdabo.models import Tag
-from hdalab.models import DbpediaFields, TagLinks
-from hdabo.utils import show_progress
-from rdflib.graph import Graph
-from rdflib import URIRef
-import traceback
-import sys
-from hdalab.models.dataviz import DbpediaFieldsTranslation
-from django import db
-from SPARQLWrapper import SPARQLWrapper, RDF
-
-class Command(NoArgsCommand):
-    '''
-    query and update wikipedia for tag title.
-    '''
-    options = ''
-    help = """query and update wikipedia for tag title."""
-    
-    option_list = NoArgsCommand.option_list + (
-        make_option('--all',
-            action='store_true',
-            dest='all',
-            default=False,
-            help='force all tags to be updated, not only those not yet processed'),
-        make_option('--force',
-            action='store_true',
-            dest='force',
-            default=False,
-            help='ask no questions'),
-        make_option('--random',
-            action='store_true',
-            dest='random',
-            default=False,
-            help='randomize query on tags'),
-        make_option('--limit',
-            action='store',
-            type='int',
-            dest='limit',
-            default= -1,
-            help='number of tag to process'),
-        make_option('--start',
-            action='store',
-            type='int',
-            dest='start',
-            default=0,
-            help='number of tag to ignore'),
-        make_option('--tag',
-            action='append',
-            dest='tags',
-            type='string',
-            default=[],
-            help='the tag to query'),
-    )
-    
-    def handle_noargs(self, **options):
-                
-        self.style = no_style()
-        
-        self.interactive = options.get('interactive', True)
-        
-        self.verbosity = int(options.get('verbosity', '1'))
-        
-        self.force = options.get('force', False)
-        
-        self.limit = options.get("limit", -1)
-        self.start = options.get("start", 0)
-        
-        self.random = options.get('random', False)
-                        
-        if self.verbosity > 2:
-            print "option passed : " + repr(options)
-
-        self.tag_list = options.get("tags", []);
-
-        queryset = Tag.objects.exclude(dbpedia_uri= None)
-        
-                
-        if self.tag_list:
-            queryset = queryset.filter(label__in=self.tag_list)
-        elif not options.get('all',False):            
-            queryset = queryset.annotate(dbfc=Count('dbpedia_fields')).filter(dbfc = 0)
-
-        if self.random:
-            queryset = queryset.order_by("?")
-        else:
-            queryset = queryset.order_by("label")
-        
-        if self.limit >= 0:
-            queryset = queryset[self.start:self.limit]
-        elif self.start > 0:
-            queryset = queryset[self.start:]
-        
-        if self.verbosity > 2 :
-            print "Tag Query is %s" % (queryset.query)
-
-        count = queryset.count()
-        
-        if count == 0:
-            print "No tag to query : exit."
-            return
-            
-            
-        if not self.force and self.interactive:
-            confirm = raw_input("You have requested to query and replace the dbpedia information for %d tags.\n Are you sure you want to do this? \nType 'yes' to continue, or 'no' to cancel: " % (count))
-        else:
-            confirm = 'yes'
-            
-        if confirm != "yes":
-            print "dbpedia query cancelled"
-            return
-
-        endpoint = SPARQLWrapper("http://dbpedia.org/sparql", returnFormat=RDF)
-
-        writer = None
-        for i,tag in enumerate(queryset):
-            writer = show_progress(i+1, count, tag.label, 50, writer)
-            db.reset_queries()
-            
-            #abstract query
-            #"select ?y
-            # where {<%s>  <http://dbpedia.org/ontology/abstract> ?y}" % (tag.dbpedia_uri)
-            
-            #rdf_uri = re.sub('\/resource\/', "/data/", tag.dbpedia_uri) + ".n3"            
-            #g = Graph()
-            try :
-                abstracts = {}
-                labels = {}
-                thumbnail = None
-                with transaction.commit_on_success():
-                    endpoint.setQuery("select distinct ?y where {<%s>  <http://dbpedia.org/ontology/abstract> ?y}" % (tag.dbpedia_uri))
-                    res_abstracts = endpoint.queryAndConvert()
-                    for _,_,o in res_abstracts.triples((None, URIRef('http://www.w3.org/2005/sparql-results#value'), None)):
-                        abstracts[o.language] = (unicode(o), True)
-
-                    endpoint.setQuery("select distinct ?y where {<%s>  <http://www.w3.org/2000/01/rdf-schema#label> ?y}" % (tag.dbpedia_uri))
-                    res_labels = endpoint.queryAndConvert()
-                    for _,_,o in res_labels.triples((None, URIRef('http://www.w3.org/2005/sparql-results#value'), None)):
-                        labels[o.language] = (unicode(o), True)
-                            
-                    endpoint.setQuery("select distinct ?y where {<%s>  <http://dbpedia.org/ontology/thumbnail> ?y} limit 1" % (tag.dbpedia_uri))
-                    res_thumbnails = endpoint.queryAndConvert()
-                    for _,_,o in res_thumbnails.triples((None, URIRef('http://www.w3.org/2005/sparql-results#value'), None)):
-                        thumbnail = unicode(o)
-
-                    endpoint.setQuery('select distinct ?y where { <%s> ?p ?y . FILTER regex(?y, "^http://dbpedia.org/resource")}' % (tag.dbpedia_uri))
-                    res_links = endpoint.queryAndConvert()
-                    for _,_,o in res_links.triples((None, URIRef('http://www.w3.org/2005/sparql-results#value'), None)):
-                        tagqs = Tag.objects.filter(dbpedia_uri=unicode(o))
-                        if tagqs:
-                            TagLinks.objects.get_or_create(subject=tag, object=tagqs[0])                        
-                    
-                    ref_label_lang, (ref_label, _) = ('fr',labels['fr']) if 'fr' in labels else ('en',labels['en']) if 'en' in labels else labels.items()[0] if len(labels) > 0 else ('fr',(tag.label, True))
-                    ref_abstract_lang, (ref_abstract, _) = ('fr',abstracts['fr']) if 'fr' in abstracts else ('en',abstracts['en']) if 'en' in abstracts else abstracts.items()[0] if len(abstracts) > 0 else ('fr',(None, 'True'))
-
-                    for lang in settings.LANGUAGES:
-                        if lang[0] not in labels:
-                            labels[lang[0]]= (ref_label, False)
-                        if lang[0] not in abstracts:
-                            abstracts[lang[0]] = (ref_abstract, False)
-
-                    dbfield , created = DbpediaFields.objects.get_or_create(dbpedia_uri=tag.dbpedia_uri,tag=tag, defaults={'abstract':ref_abstract, 'thumbnail':thumbnail, 'label':ref_label}) #@UndefinedVariable                    
-                    if not created:
-                        dbfield.abstract = ref_abstract
-                        dbfield.thumbnail = thumbnail
-                        dbfield.label = ref_label
-                        dbfield.save()
-                        DbpediaFieldsTranslation.objects.filter(master=dbfield).delete()
-
-                    consolidated_trans = {}
-                    for lang,label in labels.iteritems():
-                        consolidated_trans[lang] = [label,(ref_abstract, lang==ref_abstract_lang)]
-                    for lang,abstract in abstracts.iteritems():
-                        if lang in consolidated_trans:
-                            consolidated_trans[lang][1] = abstract
-                        else:
-                            consolidated_trans[lang] = [(ref_label, lang==ref_label_lang), abstract] 
-                         
-                    for lang, trans in consolidated_trans.iteritems():
-                        label, abstract = tuple(trans)
-                        DbpediaFieldsTranslation.objects.create(master=dbfield, language_code=lang, label=label[0], is_label_translated=label[1], abstract=abstract[0], is_abstract_translated=abstract[1])
-                    
-                    
-            except Exception as e:
-                print "\nError processing resource %s : %s" %(rdf_uri,unicode(e))
-                traceback.print_exception(type(e), e, sys.exc_info()[2])
-                
-
-
-            
-            
-
--- a/web/hdalab/management/commands/query_geo_inclusion.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Feb 22, 2012
-
-@author: raphv
-'''
-
-from django.core.management.base import NoArgsCommand
-from django.core.management.color import no_style
-from hdabo.utils import show_progress
-from hdabo.models import Tag
-from hdalab.models import Country, GeoInclusion
-from SPARQLWrapper import SPARQLWrapper, JSON
-import re
-
-class Command(NoArgsCommand):
-    def handle_noargs(self, **options):
-        self.style = no_style()
-
-        qs = Tag.objects.filter(category__label="Localisation").exclude(dbpedia_uri = None)
-        total = qs.count()
-        
-        endpoint = SPARQLWrapper("http://dbpedia.org/sparql")
-        endpoint.setReturnFormat(JSON)
-        sparqltext = """
-            SELECT ?resource WHERE {
-             { <%s> ?resource <http://dbpedia.org/ontology/Country> . }
-            UNION
-             { <%s> <http://dbpedia.org/ontology/country> ?resource . }
-            }
-        """
-        resourceprefix = "http://dbpedia.org/resource/"
-        identityuri = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"
-        
-        writer = None
-        
-        for i,tag in enumerate(qs):
-            endpoint.setQuery(sparqltext % (tag.dbpedia_uri, tag.dbpedia_uri))
-    
-            results = endpoint.query().convert()['results']['bindings']
-            
-            if len(results) == 1: # We don't want places located in multiple countries
-                
-                resourceuri = results[0]['resource']['value']
-                
-                if re.match(resourceprefix, resourceuri):
-                    countrytxt = re.findall('([^/]+$)', resourceuri)[0]
-                    
-                    country, created = Country.objects.get_or_create(dbpedia_uri=resourceuri)
-                    GeoInclusion.objects.get_or_create(tag=tag, country=country)
-                    
-                if resourceuri == identityuri:
-                    countrytxt = '<is a country>'
-                    
-                    country, created = Country.objects.get_or_create(dbpedia_uri=tag.dbpedia_uri)
-                    GeoInclusion.objects.get_or_create(tag=tag, country=country)
-                
-            else:
-                countrytxt = '<unknown>'
-            
-            writer = show_progress(i+1, total, '%s => %s'%(tag.label, countrytxt), 50, writer)
\ No newline at end of file
--- a/web/hdalab/management/commands/query_wikipedia_category.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,396 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Jun 7, 2011
-
-@author: ymh
-'''
-
-from django.conf import settings
-from django.core.management.base import NoArgsCommand
-from django.core.management.color import no_style
-from hdabo.models import Tag
-from hdalab.models import WpCategory, TagWpCategory, TagInfobox, InfoboxParameter
-from optparse import make_option
-from wikitools import api,wiki
-import sys
-import re
-import itertools
-from hdabo import utils
-from django.db.models import Count
-from django.db import transaction
-
-
-TYPES_MASK_DICT = {
-        u'visible': 0b001,
-        u'hidden': 0b010,
-        u'infobox': 0b100,
-        u'all': 0b111,
-    }
-
-START_PATTERN = re.compile(u"\{\{\s?Infobox\s+([^|]+)", re.M|re.U|re.I)
-END_PATTERN = re.compile(u"\{\{|\}\}", re.M|re.U)
-SPLIT_PATTERN = re.compile("\s*?\|\s*([\w]+[^=|]*)\s*=", re.U|re.M)
-DELIMITER_PATTERN = re.compile("\{{2,3}|\}{2,3}|\[\[|\]\]|\[|\]")
-COMMENT_PATTERN = re.compile("<!--.*?-->",re.U|re.M)
-
-
-
-class Command(NoArgsCommand):
-    '''
-    query and update wikipedia for tag title.
-    '''
-    options = ''
-    help = """query and update wikipedia for tag title."""
-    
-    option_list = NoArgsCommand.option_list + (
-        make_option('--all',
-            action='store_true',
-            dest='all',
-            default=False,
-            help='force all tags to be updated, not only those not yet processed'),
-        make_option('--force',
-            action='store_true',
-            dest='force',
-            default=False,
-            help='ask no questions'),
-        make_option('--random',
-            action='store_true',
-            dest='random',
-            default=False,
-            help='randomize query on tags'),
-        make_option('--site',
-            action='store',
-            type='string',
-            dest='site_url',
-            default="http://fr.wikipedia.org/w/api.php",
-            help='the url for the wikipedia site'),
-        make_option('--limit',
-            action='store',
-            type='int',
-            dest='limit',
-            default= -1,
-            help='number of tag to process'),
-        make_option('--start',
-            action='store',
-            type='int',
-            dest='start',
-            default=0,
-            help='number of tag to ignore'),
-        make_option('--type',
-            action='append',
-            dest='types',
-            type='choice',
-            choices=['visible','hidden', 'infobox', 'all'],
-            default=[],
-            help='what type of query to perform : visible : visible categories, hidden : hidden categories, infobox: infoboxes, all: all of them. This option can be assed multiple times'),
-        make_option('--use-label',
-            action='store_true',
-            dest='use_label',
-            default=False,
-            help='use label instead of pageid to query wikipedia'),
-        make_option('--tag',
-            action='append',
-            dest='tags',
-            type='string',
-            default=[],
-            help='the tag to query'),
-
-    )
-    
-    
-#    def process_wp_response(self, label, response):        
-#
-#        query_dict = response['query']
-#        # get page if multiple pages or none -> return Tag.null_result
-#        pages = query_dict.get("pages", {})
-#        if len(pages) > 1 or len(pages) == 0:
-#            return None, Tag.TAG_URL_STATUS_DICT["null_result"], None, None
-#        
-#        page = pages.values()[0]
-#        
-#        if u"invalid" in page or u"missing" in page:
-#            return None, Tag.TAG_URL_STATUS_DICT["null_result"], None, None
-#
-#        url = page.get(u'fullurl', None)
-#        pageid = page.get(u'pageid', None)
-#        new_label = page[u'title']
-#        
-#        if self.__is_homonymie(page):
-#            status = Tag.TAG_URL_STATUS_DICT["homonyme"]
-#        elif u"redirect" in page:
-#            status = Tag.TAG_URL_STATUS_DICT["redirection"]
-#        else:
-#            status = Tag.TAG_URL_STATUS_DICT["match"]
-#        
-#        return new_label, status, url, pageid 
-
-    def query_all_categories(self, hidden, site, pageid, use_label):
-        
-        clshow = 'hidden' if hidden else '!hidden'
-        params = {'action':'query', 'titles' if use_label else 'pageids': pageid, 'prop':'categories', 'clshow': clshow}
-        
-        clcontinue = ""        
-        res = []
-        
-        while clcontinue is not None:
-            if clcontinue:
-                params['clcontinue'] = clcontinue
-                
-            wpquery = api.APIRequest(site, params) #@UndefinedVariable
-            response = wpquery.query()
-            
-            if self.verbosity > 1:
-                print "Query infoboxes : " + repr(wpquery.request.get_full_url()+"?"+wpquery.request.get_data())
-                print repr(response)
-
-            
-            query_dict = response.get('query', None)
-            
-            if query_dict is None:
-                return res
-            
-            pages = query_dict.get("pages", {})
-            if len(pages) > 1 or len(pages) == 0:
-                return res
-            
-            page = pages.values()[0]
-                        
-            for cat in page.get('categories',[]):
-                title = cat.get('title',"")
-                title = title[title.find(":")+1:]
-                if title and clcontinue != ("%s|%s" % (pageid,title)):
-                    res.append(title)
-            
-            clcontinue = response.get('query-continue', {}).get('categories',{}).get('clcontinue', None)
-
-        if self.verbosity > 1:
-            print "Query infoboxes RES: "
-            print repr(res)
-            
-        return res
-    
-    def process_categories(self, cat_list, hidden, tag):
-        
-        for cat in cat_list:
-            wp_cat,created = WpCategory.objects.get_or_create(label=cat) #@UnusedVariable
-            TagWpCategory.objects.get_or_create(tag=tag, wp_category=wp_cat, hidden=hidden)
-            
-                
-    def query_infoboxes(self, site, pageid, use_label):
-        
-        res = []
-        params = {'action':'query', 'titles' if use_label else 'pageids': pageid, 'prop':'revisions', 'rvprop': 'ids|content'}
-        wpquery = api.APIRequest(site, params) #@UndefinedVariable
-        response = wpquery.query()
-        
-        query_dict = response.get('query', None)
-            
-        if query_dict is None:
-            return res
-            
-        pages = query_dict.get("pages", {})
-        if len(pages) > 1 or len(pages) == 0:
-            return res
-
-        page = pages.values()[0]
-        
-        if 'revisions' not in page or not page['revisions']:
-            return res
-        
-        rev = page['revisions'][0]
-        
-        content = rev['*']
-                
-        start = 0
-        depth = 0
-        current_infobox_name = None
-        current_start = 0
-        
-        while start <= len(content):
-            if depth==0:
-                resm = START_PATTERN.search(content[start:])
-                if resm is None:
-                    break
-                depth = 1
-                current_start = resm.start()+start
-                start += resm.end()+1
-                current_infobox_name = resm.group(1)                    
-            else:
-                resm = END_PATTERN.search(content[start:])
-                if resm is None:
-                    break
-                if resm.group(0) == "{{":
-                    depth += 1
-                elif resm.group(0) == "}}":
-                    depth -= 1
-                if depth == 0:
-                    res.append((content[current_start:resm.end()+start], current_infobox_name))
-                start += resm.end()+1
-
-        return_val = (rev['revid'],res)
-        
-        if self.verbosity > 1:
-            print "Query infoboxes url: " + repr(wpquery.request.get_full_url()+"?"+wpquery.request.get_data())
-            print repr(return_val)
-        
-        return return_val
-    
-    def split_infoboxes(self, src):
-        
-        start = 0
-        previous_end = 0
-        split_indexes = []
-        delimiter_stack = []
-        while start<=len(src):            
-            resd = DELIMITER_PATTERN.search(src[start:])
-            ress = SPLIT_PATTERN.search(src[start:]) if len(delimiter_stack) == 0 else None
-            startd = resd.start() if resd is not None else sys.maxint
-            starts = ress.start() if ress is not None else sys.maxint
-            if starts < startd:
-                if len(split_indexes)>0:
-                    split_indexes.append((previous_end, ress.start(0)+start))
-                split_indexes.append((ress.start(1)+start, ress.end(1)+start))
-                start += ress.end(0)
-                previous_end = start
-            elif startd < sys.maxint:
-                if resd.group().startswith("{") or resd.group().startswith("[") :
-                    delimiter_stack.append(resd.group())
-                elif len(delimiter_stack)>0 and ( (delimiter_stack[-1].startswith('{') and resd.group()[0] == '}') or (delimiter_stack[-1].startswith('[') and resd.group()[0] == ']') ) and len(delimiter_stack[-1]) == len(resd.group()):
-                    delimiter_stack.pop()
-                start += resd.end()
-            else:
-                break
-            
-        if previous_end > 0:
-            split_indexes.append((previous_end,len(src)))
-        res = [src[start:end] for start,end in split_indexes]
-        return res
-
-
-
-    def process_infoboxes(self, infobox_defs, tag):
-        
-        if not infobox_defs:
-            return
-        
-        revision_id = infobox_defs[0]
-        for infobox in infobox_defs[1]:
-            src = infobox[0].strip(' \t\n\r')            
-            name = infobox[1]
-            tag_infobox, created = TagInfobox.objects.get_or_create(tag=tag, name=name, revision_id = revision_id, defaults={'source': src})
-            if not created:
-                tag_infobox.source = src
-                tag_infobox.save()
-
-            src = COMMENT_PATTERN.sub('',src)
-            src = START_PATTERN.sub('',src[:-2]).strip()
-            
-            keyvalues = self.split_infoboxes(src)
-
-            for key,value in itertools.izip(*[itertools.islice(keyvalues, i, None, 2) for i in range(2)]):
-                param, created = InfoboxParameter.objects.get_or_create(tag_infobox=tag_infobox, param_name=key.strip(), defaults={'param_value':value.strip()})
-                if not created:
-                    param.param_value = value.strip()
-                    param.save()
-        
-    def handle_noargs(self, **options):
-        
-        self.style = no_style()
-        
-        interactive = options.get('interactive', True)
-        
-        self.verbosity = int(options.get('verbosity', '1'))
-        use_label = options.get('use_label', False)
-        
-        force = options.get('force', False)
-        
-        limit = options.get("limit", -1)
-        start = options.get("start", 0)
-        
-        site_url = options.get('site_url', settings.WIKIPEDIA_API_URL)
-        
-        random = options.get('random', False)
-        
-        types_mask = 0
-        types_list = options.get('types', [])
-        
-        if len(types_list) == 0:
-            types_mask = TYPES_MASK_DICT['all']
-        else:
-            for t in types_list:
-                types_mask |=  TYPES_MASK_DICT[t]
-                
-        if self.verbosity > 1 :
-            print "types mask %s " % (bin(types_mask))  
-        
-        if self.verbosity > 2:
-            print "option passed : " + repr(options)
-
-
-        queryset = Tag.objects.exclude(wikipedia_pageid= None)
-        
-        tag_list = options.get("tags", []);
-        
-        if tag_list:
-            queryset = queryset.filter(label__in=tag_list)
-        elif not options.get('all',False):            
-            queryset = queryset.annotate(wpc=Count('wp_categories')).filter(wpc = 0)
-        #else:
-        #    queryset = Tag.objects.filter(url_status=None)                    
-        
-        if random:
-            queryset = queryset.order_by("?")
-        else:
-            queryset = queryset.order_by("label")
-        
-        if limit >= 0:
-            queryset = queryset[start:limit]
-        elif start > 0:
-            queryset = queryset[start:]            
-        
-        if self.verbosity > 2 :
-            print "Tag Query is %s" % (queryset.query)
-        
-        site = wiki.Wiki(site_url) #@UndefinedVariable
-        
-        
-        count = queryset.count()
-        if self.verbosity > 1:
-            print "Processing %d tags" % (count)
-        
-        if not force and interactive:
-            confirm = raw_input("You have requested to query and replace the wikipedia information for %d tags.\n Are you sure you want to do this? \nType 'yes' to continue, or 'no' to cancel: " % (count))
-        else:
-            confirm = 'yes'
-            
-        if confirm != "yes":
-            print "wikipedia query cancelled"
-            return
-
-        
-        
-        for i, tag in enumerate(queryset):
-            
-            if self.verbosity > 1:
-                print "processing tag %s (%d/%d)" % (tag.label, i + 1, count)
-            else:
-                utils.show_progress(i + 1, count, tag.label, 60)                            
-
-            # query categories
-            wikipedia_pageid = tag.label if use_label else tag.wikipedia_pageid
-            if tag.url_status == Tag.TAG_URL_STATUS_DICT['redirection'] and tag.alternative_wikipedia_pageid is not None :
-                wikipedia_pageid = tag.alternative_label if use_label else tag.alternative_wikipedia_pageid
-
-            with transaction.commit_on_success():
-                if types_mask & TYPES_MASK_DICT['visible']:
-                    res = self.query_all_categories(False, site, wikipedia_pageid, use_label)
-                    self.process_categories(res, False, tag)
-    
-                if types_mask & TYPES_MASK_DICT['hidden']:
-                    res = self.query_all_categories(True, site, wikipedia_pageid, use_label)
-                    self.process_categories(res, True, tag)
-                
-                if types_mask & TYPES_MASK_DICT['infobox']:
-                    res = self.query_infoboxes(site, wikipedia_pageid, use_label)
-                    self.process_infoboxes(res, tag)
-            
--- a/web/hdalab/management/utils.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Feb 2, 2012
-
-@author: ymh
-'''
-
-import cStringIO
-import csv
-import codecs
-
-class UnicodeWriter:
-    """
-    A CSV writer which will write rows to CSV file "f",
-    which is encoded in the given encoding.
-    """
-
-    def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds):
-        # Redirect output to a queue
-        self.queue = cStringIO.StringIO()
-        self.writer = csv.writer(self.queue, dialect=dialect, **kwds)
-        self.stream = f
-        self.encoder = codecs.getincrementalencoder(encoding)()
-
-    def writerow(self, row):
-        self.writer.writerow([unicode(s).encode("utf-8") for s in row])
-        # Fetch UTF-8 output from the queue ...
-        data = self.queue.getvalue()
-        data = data.decode("utf-8")
-        # ... and reencode it into the target encoding
-        data = self.encoder.encode(data)
-        # write to the target stream
-        self.stream.write(data)
-        # empty queue
-        self.queue.truncate(0)
-
-    def writerows(self, rows):
-        for row in rows:
-            self.writerow(row)
--- a/web/hdalab/migrations/0001_initial.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,131 +0,0 @@
-# encoding: utf-8
-from south.db import db
-from south.v2 import SchemaMigration
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        
-        # Adding model 'WpCategory'
-        db.create_table('hdalab_wpcategory', ( #@UndefinedVariable
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('label', self.gf('django.db.models.fields.CharField')(unique=True, max_length=2048)),
-        ))
-        db.send_create_signal('hdalab', ['WpCategory']) #@UndefinedVariable
-
-        # Adding model 'TagWpCategory'
-        db.create_table('hdalab_tagwpcategory', ( #@UndefinedVariable
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('tag', self.gf('django.db.models.fields.related.ForeignKey')(related_name='wp_categories', to=orm['hdabo.Tag'])),
-            ('wp_category', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdalab.WpCategory'])),
-            ('hidden', self.gf('django.db.models.fields.BooleanField')(default=False)),
-        ))
-        db.send_create_signal('hdalab', ['TagWpCategory']) #@UndefinedVariable
-
-        # Adding unique constraint on 'TagWpCategory', fields ['tag', 'wp_category', 'hidden']
-        db.create_unique('hdalab_tagwpcategory', ['tag_id', 'wp_category_id', 'hidden']) #@UndefinedVariable
-
-        # Adding model 'TagInfobox'
-        db.create_table('hdalab_taginfobox', ( #@UndefinedVariable
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('tag', self.gf('django.db.models.fields.related.ForeignKey')(related_name='infoboxes', to=orm['hdabo.Tag'])),
-            ('name', self.gf('django.db.models.fields.CharField')(max_length=2048)),
-            ('source', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
-            ('revision_id', self.gf('django.db.models.fields.BigIntegerField')(null=True, blank=True)),
-        ))
-        db.send_create_signal('hdalab', ['TagInfobox']) #@UndefinedVariable
-
-        # Adding unique constraint on 'TagInfobox', fields ['tag', 'name', 'revision_id']
-        db.create_unique('hdalab_taginfobox', ['tag_id', 'name', 'revision_id']) #@UndefinedVariable
-
-        # Adding model 'InfoboxParameter'
-        db.create_table('hdalab_infoboxparameter', ( #@UndefinedVariable
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('tag_infobox', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdalab.TagInfobox'])),
-            ('param_name', self.gf('django.db.models.fields.CharField')(max_length=2048)),
-            ('param_value', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
-        ))
-        db.send_create_signal('hdalab', ['InfoboxParameter']) #@UndefinedVariable
-
-        # Adding unique constraint on 'InfoboxParameter', fields ['tag_infobox', 'param_name']
-        db.create_unique('hdalab_infoboxparameter', ['tag_infobox_id', 'param_name']) #@UndefinedVariable
-
-
-    def backwards(self, orm):
-        
-        # Removing unique constraint on 'InfoboxParameter', fields ['tag_infobox', 'param_name']
-        db.delete_unique('hdalab_infoboxparameter', ['tag_infobox_id', 'param_name']) #@UndefinedVariable
-
-        # Removing unique constraint on 'TagInfobox', fields ['tag', 'name', 'revision_id']
-        db.delete_unique('hdalab_taginfobox', ['tag_id', 'name', 'revision_id']) #@UndefinedVariable
-
-        # Removing unique constraint on 'TagWpCategory', fields ['tag', 'wp_category', 'hidden']
-        db.delete_unique('hdalab_tagwpcategory', ['tag_id', 'wp_category_id', 'hidden']) #@UndefinedVariable
-
-        # Deleting model 'WpCategory'
-        db.delete_table('hdalab_wpcategory') #@UndefinedVariable
-
-        # Deleting model 'TagWpCategory'
-        db.delete_table('hdalab_tagwpcategory') #@UndefinedVariable
-
-        # Deleting model 'TagInfobox'
-        db.delete_table('hdalab_taginfobox') #@UndefinedVariable
-
-        # Deleting model 'InfoboxParameter'
-        db.delete_table('hdalab_infoboxparameter') #@UndefinedVariable
-
-
-    models = {
-        'hdabo.tag': {
-            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
-            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
-            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
-            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
-            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'wikipedia_url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.tagcategory': {
-            'Meta': {'object_name': 'TagCategory'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
-        },
-        'hdalab.infoboxparameter': {
-            'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
-            'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
-        },
-        'hdalab.taginfobox': {
-            'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
-            'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.tagwpcategory': {
-            'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
-            'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
-            'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
-        },
-        'hdalab.wpcategory': {
-            'Meta': {'object_name': 'WpCategory'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
-        }
-    }
-
-    complete_apps = ['hdalab']
--- a/web/hdalab/migrations/0002_dataviz.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,144 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        
-        # Adding model 'DbpediaFields'
-        db.create_table('hdalab_dbpediafields', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('dbpedia_uri', self.gf('django.db.models.fields.URLField')(unique=True, max_length=2048, db_index=True)),
-            ('tag', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='dbpedia_fields', null=True, to=orm['hdabo.Tag'])),
-            ('abstract', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
-            ('label', self.gf('django.db.models.fields.CharField')(max_length=2048, null=True, blank=True)),
-            ('thumbnail', self.gf('django.db.models.fields.URLField')(max_length=2048, null=True, blank=True)),
-        ))
-        db.send_create_signal('hdalab', ['DbpediaFields'])
-
-        # Adding model 'TagLinks'
-        db.create_table('hdalab_taglinks', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('subject', self.gf('django.db.models.fields.related.ForeignKey')(related_name='taglinks_subjects', to=orm['hdabo.Tag'])),
-            ('object', self.gf('django.db.models.fields.related.ForeignKey')(related_name='taglinks_objects', to=orm['hdabo.Tag'])),
-        ))
-        db.send_create_signal('hdalab', ['TagLinks'])
-
-        # Adding model 'CountryCode'
-        db.create_table('hdalab_countrycode', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('label', self.gf('django.db.models.fields.CharField')(unique=True, max_length=1024, db_index=True)),
-            ('isocode', self.gf('django.db.models.fields.CharField')(unique=True, max_length=3, db_index=True)),
-        ))
-        db.send_create_signal('hdalab', ['CountryCode'])
-
-        # Adding model 'TagYears'
-        db.create_table('hdalab_tagyears', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('tag', self.gf('django.db.models.fields.related.ForeignKey')(related_name='years', to=orm['hdabo.Tag'])),
-            ('start_year', self.gf('django.db.models.fields.IntegerField')(db_index=True)),
-            ('end_yar', self.gf('django.db.models.fields.IntegerField')(db_index=True)),
-        ))
-        db.send_create_signal('hdalab', ['TagYears'])
-
-
-    def backwards(self, orm):
-        
-        # Deleting model 'DbpediaFields'
-        db.delete_table('hdalab_dbpediafields')
-
-        # Deleting model 'TagLinks'
-        db.delete_table('hdalab_taglinks')
-
-        # Deleting model 'CountryCode'
-        db.delete_table('hdalab_countrycode')
-
-        # Deleting model 'TagYears'
-        db.delete_table('hdalab_tagyears')
-
-
-    models = {
-        'hdabo.tag': {
-            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
-            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
-            'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
-            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
-            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
-            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
-            'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.tagcategory': {
-            'Meta': {'object_name': 'TagCategory'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
-        },
-        'hdalab.countrycode': {
-            'Meta': {'object_name': 'CountryCode'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'isocode': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3', 'db_index': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024', 'db_index': 'True'})
-        },
-        'hdalab.dbpediafields': {
-            'Meta': {'object_name': 'DbpediaFields'},
-            'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'null': 'True', 'to': "orm['hdabo.Tag']"}),
-            'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdalab.infoboxparameter': {
-            'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
-            'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
-        },
-        'hdalab.taginfobox': {
-            'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
-            'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.taglinks': {
-            'Meta': {'object_name': 'TagLinks'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
-            'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.tagwpcategory': {
-            'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
-            'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
-            'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
-        },
-        'hdalab.tagyears': {
-            'Meta': {'object_name': 'TagYears'},
-            'end_yar': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.wpcategory': {
-            'Meta': {'object_name': 'WpCategory'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
-        }
-    }
-
-    complete_apps = ['hdalab']
--- a/web/hdalab/migrations/0003_hdasession.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,113 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        
-        # Adding model 'HdaSession'
-        db.create_table('hdalab_hdasession', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('sessionid', self.gf('django.db.models.fields.CharField')(unique=True, max_length=36, db_index=True)),
-            ('data', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
-        ))
-        db.send_create_signal('hdalab', ['HdaSession'])
-
-
-    def backwards(self, orm):
-        
-        # Deleting model 'HdaSession'
-        db.delete_table('hdalab_hdasession')
-
-
-    models = {
-        'hdabo.tag': {
-            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
-            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
-            'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
-            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
-            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
-            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
-            'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.tagcategory': {
-            'Meta': {'object_name': 'TagCategory'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
-        },
-        'hdalab.countrycode': {
-            'Meta': {'object_name': 'CountryCode'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'isocode': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3', 'db_index': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024', 'db_index': 'True'})
-        },
-        'hdalab.dbpediafields': {
-            'Meta': {'object_name': 'DbpediaFields'},
-            'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'null': 'True', 'to': "orm['hdabo.Tag']"}),
-            'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdalab.hdasession': {
-            'Meta': {'object_name': 'HdaSession'},
-            'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
-        },
-        'hdalab.infoboxparameter': {
-            'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
-            'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
-        },
-        'hdalab.taginfobox': {
-            'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
-            'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.taglinks': {
-            'Meta': {'object_name': 'TagLinks'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
-            'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.tagwpcategory': {
-            'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
-            'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
-            'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
-        },
-        'hdalab.tagyears': {
-            'Meta': {'object_name': 'TagYears'},
-            'end_yar': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.wpcategory': {
-            'Meta': {'object_name': 'WpCategory'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
-        }
-    }
-
-    complete_apps = ['hdalab']
--- a/web/hdalab/migrations/0004_remove_dbpedia_unicity.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,108 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        
-        # Removing unique constraint on 'DbpediaFields', fields ['dbpedia_uri']
-        db.delete_unique('hdalab_dbpediafields', ['dbpedia_uri'])
-
-
-    def backwards(self, orm):
-        
-        # Adding unique constraint on 'DbpediaFields', fields ['dbpedia_uri']
-        db.create_unique('hdalab_dbpediafields', ['dbpedia_uri'])
-
-
-    models = {
-        'hdabo.tag': {
-            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
-            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
-            'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
-            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
-            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
-            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
-            'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.tagcategory': {
-            'Meta': {'object_name': 'TagCategory'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
-        },
-        'hdalab.countrycode': {
-            'Meta': {'object_name': 'CountryCode'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'isocode': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3', 'db_index': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024', 'db_index': 'True'})
-        },
-        'hdalab.dbpediafields': {
-            'Meta': {'object_name': 'DbpediaFields'},
-            'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'null': 'True', 'to': "orm['hdabo.Tag']"}),
-            'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdalab.hdasession': {
-            'Meta': {'object_name': 'HdaSession'},
-            'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
-        },
-        'hdalab.infoboxparameter': {
-            'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
-            'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
-        },
-        'hdalab.taginfobox': {
-            'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
-            'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.taglinks': {
-            'Meta': {'object_name': 'TagLinks'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
-            'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.tagwpcategory': {
-            'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
-            'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
-            'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
-        },
-        'hdalab.tagyears': {
-            'Meta': {'object_name': 'TagYears'},
-            'end_yar': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.wpcategory': {
-            'Meta': {'object_name': 'WpCategory'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
-        }
-    }
-
-    complete_apps = ['hdalab']
--- a/web/hdalab/migrations/0005_rename_end_year.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,114 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        
-        # Deleting field 'TagYears.end_yar'
-        db.delete_column('hdalab_tagyears', 'end_yar')
-
-        # Adding field 'TagYears.end_year'
-        db.add_column('hdalab_tagyears', 'end_year', self.gf('django.db.models.fields.IntegerField')(default=2012, db_index=True), keep_default=False)
-
-
-    def backwards(self, orm):
-        
-        # User chose to not deal with backwards NULL issues for 'TagYears.end_yar'
-        raise RuntimeError("Cannot reverse this migration. 'TagYears.end_yar' and its values cannot be restored.")
-
-        # Deleting field 'TagYears.end_year'
-        db.delete_column('hdalab_tagyears', 'end_year')
-
-
-    models = {
-        'hdabo.tag': {
-            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
-            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
-            'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
-            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
-            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
-            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
-            'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.tagcategory': {
-            'Meta': {'object_name': 'TagCategory'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
-        },
-        'hdalab.countrycode': {
-            'Meta': {'object_name': 'CountryCode'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'isocode': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3', 'db_index': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024', 'db_index': 'True'})
-        },
-        'hdalab.dbpediafields': {
-            'Meta': {'object_name': 'DbpediaFields'},
-            'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'null': 'True', 'to': "orm['hdabo.Tag']"}),
-            'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdalab.hdasession': {
-            'Meta': {'object_name': 'HdaSession'},
-            'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
-        },
-        'hdalab.infoboxparameter': {
-            'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
-            'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
-        },
-        'hdalab.taginfobox': {
-            'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
-            'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.taglinks': {
-            'Meta': {'object_name': 'TagLinks'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
-            'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.tagwpcategory': {
-            'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
-            'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
-            'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
-        },
-        'hdalab.tagyears': {
-            'Meta': {'object_name': 'TagYears'},
-            'end_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.wpcategory': {
-            'Meta': {'object_name': 'WpCategory'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
-        }
-    }
-
-    complete_apps = ['hdalab']
--- a/web/hdalab/migrations/0006_dbpedia_fields_one_to_one.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,114 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        
-        # Changing field 'DbpediaFields.tag'
-        db.alter_column('hdalab_dbpediafields', 'tag_id', self.gf('django.db.models.fields.related.OneToOneField')(unique=True, null=True, to=orm['hdabo.Tag']))
-
-        # Adding unique constraint on 'DbpediaFields', fields ['tag']
-        db.create_unique('hdalab_dbpediafields', ['tag_id'])
-
-
-    def backwards(self, orm):
-        
-        # Removing unique constraint on 'DbpediaFields', fields ['tag']
-        db.delete_unique('hdalab_dbpediafields', ['tag_id'])
-
-        # Changing field 'DbpediaFields.tag'
-        db.alter_column('hdalab_dbpediafields', 'tag_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['hdabo.Tag']))
-
-
-    models = {
-        'hdabo.tag': {
-            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
-            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
-            'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
-            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
-            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
-            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
-            'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.tagcategory': {
-            'Meta': {'object_name': 'TagCategory'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
-        },
-        'hdalab.countrycode': {
-            'Meta': {'object_name': 'CountryCode'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'isocode': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '3', 'db_index': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024', 'db_index': 'True'})
-        },
-        'hdalab.dbpediafields': {
-            'Meta': {'object_name': 'DbpediaFields'},
-            'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'tag': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'unique': 'True', 'null': 'True', 'to': "orm['hdabo.Tag']"}),
-            'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdalab.hdasession': {
-            'Meta': {'object_name': 'HdaSession'},
-            'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
-        },
-        'hdalab.infoboxparameter': {
-            'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
-            'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
-        },
-        'hdalab.taginfobox': {
-            'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
-            'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.taglinks': {
-            'Meta': {'object_name': 'TagLinks'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
-            'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.tagwpcategory': {
-            'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
-            'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
-            'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
-        },
-        'hdalab.tagyears': {
-            'Meta': {'object_name': 'TagYears'},
-            'end_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.wpcategory': {
-            'Meta': {'object_name': 'WpCategory'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
-        }
-    }
-
-    complete_apps = ['hdalab']
--- a/web/hdalab/migrations/0007_geographic_inclusion.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,139 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        
-        # Deleting model 'CountryCode'
-        db.delete_table('hdalab_countrycode')
-
-        # Adding model 'GeoInclusion'
-        db.create_table('hdalab_geoinclusion', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('tag', self.gf('django.db.models.fields.related.OneToOneField')(related_name='locatedin', unique=True, to=orm['hdabo.Tag'])),
-            ('country', self.gf('django.db.models.fields.related.ForeignKey')(related_name='includes', to=orm['hdalab.Country'])),
-        ))
-        db.send_create_signal('hdalab', ['GeoInclusion'])
-
-        # Adding model 'Country'
-        db.create_table('hdalab_country', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('dbpedia_uri', self.gf('django.db.models.fields.URLField')(unique=True, max_length=255, db_index=True)),
-        ))
-        db.send_create_signal('hdalab', ['Country'])
-
-
-    def backwards(self, orm):
-        
-        # Adding model 'CountryCode'
-        db.create_table('hdalab_countrycode', (
-            ('isocode', self.gf('django.db.models.fields.CharField')(max_length=3, unique=True, db_index=True)),
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('label', self.gf('django.db.models.fields.CharField')(max_length=1024, unique=True, db_index=True)),
-        ))
-        db.send_create_signal('hdalab', ['CountryCode'])
-
-        # Deleting model 'GeoInclusion'
-        db.delete_table('hdalab_geoinclusion')
-
-        # Deleting model 'Country'
-        db.delete_table('hdalab_country')
-
-
-    models = {
-        'hdabo.tag': {
-            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
-            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
-            'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
-            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
-            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
-            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
-            'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.tagcategory': {
-            'Meta': {'object_name': 'TagCategory'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
-        },
-        'hdalab.country': {
-            'Meta': {'object_name': 'Country'},
-            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
-        },
-        'hdalab.dbpediafields': {
-            'Meta': {'object_name': 'DbpediaFields'},
-            'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'tag': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'unique': 'True', 'null': 'True', 'to': "orm['hdabo.Tag']"}),
-            'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdalab.geoinclusion': {
-            'Meta': {'object_name': 'GeoInclusion'},
-            'country': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'includes'", 'to': "orm['hdalab.Country']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'tag': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'locatedin'", 'unique': 'True', 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.hdasession': {
-            'Meta': {'object_name': 'HdaSession'},
-            'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
-        },
-        'hdalab.infoboxparameter': {
-            'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
-            'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
-        },
-        'hdalab.taginfobox': {
-            'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
-            'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.taglinks': {
-            'Meta': {'object_name': 'TagLinks'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
-            'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.tagwpcategory': {
-            'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
-            'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
-            'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
-        },
-        'hdalab.tagyears': {
-            'Meta': {'object_name': 'TagYears'},
-            'end_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.wpcategory': {
-            'Meta': {'object_name': 'WpCategory'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
-        }
-    }
-
-    complete_apps = ['hdalab']
--- a/web/hdalab/migrations/0008_datasheet_insee.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,304 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        
-        # Adding model 'DatasheetExtras'
-        db.create_table('hdalab_datasheetextras', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('datasheet', self.gf('django.db.models.fields.related.OneToOneField')(related_name='extras', unique=True, to=orm['hdabo.Datasheet'])),
-            ('insee', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['hdalab.InseeCoords'], null=True, blank=True)),
-        ))
-        db.send_create_signal('hdalab', ['DatasheetExtras'])
-
-        # Adding model 'InseeCoords'
-        db.create_table('hdalab_inseecoords', (
-            ('insee', self.gf('django.db.models.fields.IntegerField')(primary_key=True)),
-            ('city_name', self.gf('django.db.models.fields.CharField')(max_length=255)),
-            ('latitude', self.gf('django.db.models.fields.FloatField')()),
-            ('longitude', self.gf('django.db.models.fields.FloatField')()),
-        ))
-        db.send_create_signal('hdalab', ['InseeCoords'])
-
-
-    def backwards(self, orm):
-        
-        # Deleting model 'DatasheetExtras'
-        db.delete_table('hdalab_datasheetextras')
-
-        # Deleting model 'InseeCoords'
-        db.delete_table('hdalab_inseecoords')
-
-
-    models = {
-        'auth.group': {
-            'Meta': {'object_name': 'Group'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
-            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
-        },
-        'auth.permission': {
-            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
-            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'auth.user': {
-            'Meta': {'object_name': 'User'},
-            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
-            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
-            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
-            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
-            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
-            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
-        },
-        'contenttypes.contenttype': {
-            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
-            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'hdabo.author': {
-            'Meta': {'object_name': 'Author'},
-            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
-            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.datasheet': {
-            'Meta': {'object_name': 'Datasheet'},
-            'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
-            'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
-            'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
-            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
-            'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
-            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
-            'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
-            'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
-            'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']"}),
-            'original_creation_date': ('django.db.models.fields.DateField', [], {}),
-            'original_modification_date': ('django.db.models.fields.DateField', [], {}),
-            'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
-            'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
-            'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
-            'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
-            'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
-            'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
-            'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
-            'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.datasheet_college_periods': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
-            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
-        },
-        'hdabo.datasheet_college_themes': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.datasheet_domains': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.datasheet_highschool_periods': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
-            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
-        },
-        'hdabo.datasheet_highschool_themes': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.datasheet_primary_periods': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
-            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
-        },
-        'hdabo.datasheet_primary_themes': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.documentformat': {
-            'Meta': {'object_name': 'DocumentFormat'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
-        },
-        'hdabo.domain': {
-            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
-            'school_period': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.location': {
-            'Meta': {'object_name': 'Location'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
-        },
-        'hdabo.organisation': {
-            'Meta': {'object_name': 'Organisation'},
-            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
-            'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.tag': {
-            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
-            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
-            'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
-            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
-            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
-            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
-            'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.tagcategory': {
-            'Meta': {'object_name': 'TagCategory'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
-        },
-        'hdabo.taggedsheet': {
-            'Meta': {'object_name': 'TaggedSheet'},
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
-            'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
-            'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
-            'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.timeperiod': {
-            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
-            'school_period': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdalab.country': {
-            'Meta': {'object_name': 'Country'},
-            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
-        },
-        'hdalab.datasheetextras': {
-            'Meta': {'object_name': 'DatasheetExtras'},
-            'datasheet': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'extras'", 'unique': 'True', 'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'insee': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.InseeCoords']", 'null': 'True', 'blank': 'True'})
-        },
-        'hdalab.dbpediafields': {
-            'Meta': {'object_name': 'DbpediaFields'},
-            'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'tag': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'unique': 'True', 'null': 'True', 'to': "orm['hdabo.Tag']"}),
-            'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdalab.geoinclusion': {
-            'Meta': {'object_name': 'GeoInclusion'},
-            'country': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'includes'", 'to': "orm['hdalab.Country']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'tag': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'locatedin'", 'unique': 'True', 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.hdasession': {
-            'Meta': {'object_name': 'HdaSession'},
-            'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
-        },
-        'hdalab.infoboxparameter': {
-            'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
-            'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
-        },
-        'hdalab.inseecoords': {
-            'Meta': {'object_name': 'InseeCoords'},
-            'city_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'insee': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'latitude': ('django.db.models.fields.FloatField', [], {}),
-            'longitude': ('django.db.models.fields.FloatField', [], {})
-        },
-        'hdalab.taginfobox': {
-            'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
-            'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.taglinks': {
-            'Meta': {'object_name': 'TagLinks'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
-            'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.tagwpcategory': {
-            'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
-            'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
-            'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
-        },
-        'hdalab.tagyears': {
-            'Meta': {'object_name': 'TagYears'},
-            'end_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.wpcategory': {
-            'Meta': {'object_name': 'WpCategory'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
-        }
-    }
-
-    complete_apps = ['hdalab']
--- a/web/hdalab/migrations/0009_i18n.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,308 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        
-        # Adding model 'DbpediaFieldsTranslation'
-        db.create_table('hdalab_dbpediafieldstranslation', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('master', self.gf('django.db.models.fields.related.ForeignKey')(related_name='translations', to=orm['hdalab.DbpediaFields'])),
-            ('language_code', self.gf('django.db.models.fields.CharField')(max_length=15, db_index=True)),
-            ('label', self.gf('django.db.models.fields.CharField')(max_length=2048, blank=True)),
-            ('abstract', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
-        ))
-        db.send_create_signal('hdalab', ['DbpediaFieldsTranslation'])
-
-        # Adding unique constraint on 'DbpediaFieldsTranslation', fields ['master', 'language_code']
-        db.create_unique('hdalab_dbpediafieldstranslation', ['master_id', 'language_code'])
-
-
-    def backwards(self, orm):
-        
-        # Removing unique constraint on 'DbpediaFieldsTranslation', fields ['master', 'language_code']
-        db.delete_unique('hdalab_dbpediafieldstranslation', ['master_id', 'language_code'])
-
-        # Deleting model 'DbpediaFieldsTranslation'
-        db.delete_table('hdalab_dbpediafieldstranslation')
-
-
-    models = {
-        'auth.group': {
-            'Meta': {'object_name': 'Group'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
-            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
-        },
-        'auth.permission': {
-            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
-            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'auth.user': {
-            'Meta': {'object_name': 'User'},
-            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 3, 8, 13, 47, 54, 155003)'}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
-            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
-            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 3, 8, 13, 47, 54, 154782)'}),
-            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
-            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
-            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
-        },
-        'contenttypes.contenttype': {
-            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
-            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'hdabo.author': {
-            'Meta': {'object_name': 'Author'},
-            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
-            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.datasheet': {
-            'Meta': {'object_name': 'Datasheet'},
-            'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
-            'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
-            'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
-            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
-            'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
-            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
-            'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
-            'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
-            'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']"}),
-            'original_creation_date': ('django.db.models.fields.DateField', [], {}),
-            'original_modification_date': ('django.db.models.fields.DateField', [], {}),
-            'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
-            'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
-            'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
-            'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
-            'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
-            'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
-            'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
-            'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.datasheet_college_periods': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
-            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
-        },
-        'hdabo.datasheet_college_themes': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.datasheet_domains': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.datasheet_highschool_periods': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
-            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
-        },
-        'hdabo.datasheet_highschool_themes': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.datasheet_primary_periods': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
-            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
-        },
-        'hdabo.datasheet_primary_themes': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.documentformat': {
-            'Meta': {'object_name': 'DocumentFormat'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
-        },
-        'hdabo.domain': {
-            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
-            'school_period': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.location': {
-            'Meta': {'object_name': 'Location'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
-        },
-        'hdabo.organisation': {
-            'Meta': {'object_name': 'Organisation'},
-            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
-            'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.tag': {
-            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
-            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
-            'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
-            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
-            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
-            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
-            'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.tagcategory': {
-            'Meta': {'object_name': 'TagCategory'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
-        },
-        'hdabo.taggedsheet': {
-            'Meta': {'object_name': 'TaggedSheet'},
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
-            'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
-            'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
-            'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.timeperiod': {
-            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
-            'school_period': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdalab.country': {
-            'Meta': {'object_name': 'Country'},
-            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
-        },
-        'hdalab.datasheetextras': {
-            'Meta': {'object_name': 'DatasheetExtras'},
-            'datasheet': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'extras'", 'unique': 'True', 'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'insee': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.InseeCoords']", 'null': 'True', 'blank': 'True'})
-        },
-        'hdalab.dbpediafields': {
-            'Meta': {'object_name': 'DbpediaFields'},
-            'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'tag': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'unique': 'True', 'null': 'True', 'to': "orm['hdabo.Tag']"}),
-            'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdalab.dbpediafieldstranslation': {
-            'Meta': {'unique_together': "(('master', 'language_code'),)", 'object_name': 'DbpediaFieldsTranslation'},
-            'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'blank': 'True'}),
-            'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
-            'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'to': "orm['hdalab.DbpediaFields']"})
-        },
-        'hdalab.geoinclusion': {
-            'Meta': {'object_name': 'GeoInclusion'},
-            'country': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'includes'", 'to': "orm['hdalab.Country']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'tag': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'locatedin'", 'unique': 'True', 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.hdasession': {
-            'Meta': {'object_name': 'HdaSession'},
-            'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
-        },
-        'hdalab.infoboxparameter': {
-            'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
-            'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
-        },
-        'hdalab.inseecoords': {
-            'Meta': {'object_name': 'InseeCoords'},
-            'city_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'insee': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'latitude': ('django.db.models.fields.FloatField', [], {}),
-            'longitude': ('django.db.models.fields.FloatField', [], {})
-        },
-        'hdalab.taginfobox': {
-            'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
-            'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.taglinks': {
-            'Meta': {'object_name': 'TagLinks'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
-            'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.tagwpcategory': {
-            'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
-            'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
-            'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
-        },
-        'hdalab.tagyears': {
-            'Meta': {'object_name': 'TagYears'},
-            'end_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.wpcategory': {
-            'Meta': {'object_name': 'WpCategory'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
-        }
-    }
-
-    complete_apps = ['hdalab']
--- a/web/hdalab/migrations/0010_categoryinclusion.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,312 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        
-        # Adding model 'WpCategoryInclusion'
-        db.create_table('hdalab_wpcategoryinclusion', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('parent_category', self.gf('django.db.models.fields.related.ForeignKey')(related_name='child_categories', to=orm['hdalab.WpCategory'])),
-            ('child_category', self.gf('django.db.models.fields.related.ForeignKey')(related_name='parent_categories', to=orm['hdalab.WpCategory'])),
-        ))
-        db.send_create_signal('hdalab', ['WpCategoryInclusion'])
-
-        # Adding unique constraint on 'WpCategoryInclusion', fields ['parent_category', 'child_category']
-        db.create_unique('hdalab_wpcategoryinclusion', ['parent_category_id', 'child_category_id'])
-
-
-    def backwards(self, orm):
-        
-        # Removing unique constraint on 'WpCategoryInclusion', fields ['parent_category', 'child_category']
-        db.delete_unique('hdalab_wpcategoryinclusion', ['parent_category_id', 'child_category_id'])
-
-        # Deleting model 'WpCategoryInclusion'
-        db.delete_table('hdalab_wpcategoryinclusion')
-
-
-    models = {
-        'auth.group': {
-            'Meta': {'object_name': 'Group'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
-            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
-        },
-        'auth.permission': {
-            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
-            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'auth.user': {
-            'Meta': {'object_name': 'User'},
-            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 7, 2, 5, 14, 31, 895549)'}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
-            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
-            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 7, 2, 5, 14, 31, 895384)'}),
-            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
-            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
-            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
-        },
-        'contenttypes.contenttype': {
-            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
-            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'hdabo.author': {
-            'Meta': {'object_name': 'Author'},
-            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
-            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.datasheet': {
-            'Meta': {'object_name': 'Datasheet'},
-            'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
-            'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
-            'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
-            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
-            'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
-            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
-            'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
-            'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
-            'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']", 'null': 'True'}),
-            'original_creation_date': ('django.db.models.fields.DateField', [], {}),
-            'original_modification_date': ('django.db.models.fields.DateField', [], {}),
-            'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
-            'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
-            'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
-            'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
-            'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
-            'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
-            'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
-            'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.datasheet_college_periods': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
-            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
-        },
-        'hdabo.datasheet_college_themes': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.datasheet_domains': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.datasheet_highschool_periods': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
-            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
-        },
-        'hdabo.datasheet_highschool_themes': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.datasheet_primary_periods': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
-            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
-        },
-        'hdabo.datasheet_primary_themes': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.documentformat': {
-            'Meta': {'object_name': 'DocumentFormat'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
-        },
-        'hdabo.domain': {
-            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
-            'school_period': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.location': {
-            'Meta': {'object_name': 'Location'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
-        },
-        'hdabo.organisation': {
-            'Meta': {'object_name': 'Organisation'},
-            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
-            'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.tag': {
-            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
-            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
-            'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
-            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
-            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
-            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
-            'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.tagcategory': {
-            'Meta': {'object_name': 'TagCategory'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
-        },
-        'hdabo.taggedsheet': {
-            'Meta': {'object_name': 'TaggedSheet'},
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
-            'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
-            'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
-            'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.timeperiod': {
-            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
-            'school_period': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdalab.country': {
-            'Meta': {'object_name': 'Country'},
-            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
-        },
-        'hdalab.datasheetextras': {
-            'Meta': {'object_name': 'DatasheetExtras'},
-            'datasheet': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'extras'", 'unique': 'True', 'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'insee': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.InseeCoords']", 'null': 'True', 'blank': 'True'})
-        },
-        'hdalab.dbpediafields': {
-            'Meta': {'object_name': 'DbpediaFields'},
-            'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'tag': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'unique': 'True', 'null': 'True', 'to': "orm['hdabo.Tag']"}),
-            'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdalab.dbpediafieldstranslation': {
-            'Meta': {'unique_together': "(('master', 'language_code'),)", 'object_name': 'DbpediaFieldsTranslation'},
-            'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'blank': 'True'}),
-            'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
-            'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'to': "orm['hdalab.DbpediaFields']"})
-        },
-        'hdalab.geoinclusion': {
-            'Meta': {'object_name': 'GeoInclusion'},
-            'country': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'includes'", 'to': "orm['hdalab.Country']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'tag': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'locatedin'", 'unique': 'True', 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.hdasession': {
-            'Meta': {'object_name': 'HdaSession'},
-            'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
-        },
-        'hdalab.infoboxparameter': {
-            'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
-            'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
-        },
-        'hdalab.inseecoords': {
-            'Meta': {'object_name': 'InseeCoords'},
-            'city_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'insee': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'latitude': ('django.db.models.fields.FloatField', [], {}),
-            'longitude': ('django.db.models.fields.FloatField', [], {})
-        },
-        'hdalab.taginfobox': {
-            'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
-            'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.taglinks': {
-            'Meta': {'object_name': 'TagLinks'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
-            'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.tagwpcategory': {
-            'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
-            'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
-            'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.WpCategory']"})
-        },
-        'hdalab.tagyears': {
-            'Meta': {'object_name': 'TagYears'},
-            'end_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.wpcategory': {
-            'Meta': {'object_name': 'WpCategory'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
-        },
-        'hdalab.wpcategoryinclusion': {
-            'Meta': {'unique_together': "(('parent_category', 'child_category'),)", 'object_name': 'WpCategoryInclusion'},
-            'child_category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'parent_categories'", 'to': "orm['hdalab.WpCategory']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'parent_category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'child_categories'", 'to': "orm['hdalab.WpCategory']"})
-        }
-    }
-
-    complete_apps = ['hdalab']
--- a/web/hdalab/migrations/0011_auto__add_field_dbpediafieldstranslation_is_label_translated__add_fiel.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,309 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        
-        # Adding field 'DbpediaFieldsTranslation.is_label_translated'
-        db.add_column('hdalab_dbpediafieldstranslation', 'is_label_translated', self.gf('django.db.models.fields.BooleanField')(default=True), keep_default=False)
-
-        # Adding field 'DbpediaFieldsTranslation.is_abstract_translated'
-        db.add_column('hdalab_dbpediafieldstranslation', 'is_abstract_translated', self.gf('django.db.models.fields.BooleanField')(default=True), keep_default=False)
-
-
-    def backwards(self, orm):
-        
-        # Deleting field 'DbpediaFieldsTranslation.is_label_translated'
-        db.delete_column('hdalab_dbpediafieldstranslation', 'is_label_translated')
-
-        # Deleting field 'DbpediaFieldsTranslation.is_abstract_translated'
-        db.delete_column('hdalab_dbpediafieldstranslation', 'is_abstract_translated')
-
-
-    models = {
-        'auth.group': {
-            'Meta': {'object_name': 'Group'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
-            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
-        },
-        'auth.permission': {
-            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
-            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'auth.user': {
-            'Meta': {'object_name': 'User'},
-            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 9, 6, 7, 27, 20, 166066)'}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
-            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
-            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2012, 9, 6, 7, 27, 20, 165955)'}),
-            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
-            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
-            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
-        },
-        'contenttypes.contenttype': {
-            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
-            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'hdabo.author': {
-            'Meta': {'object_name': 'Author'},
-            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
-            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.datasheet': {
-            'Meta': {'object_name': 'Datasheet'},
-            'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Author']", 'null': 'True', 'blank': 'True'}),
-            'college_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_periods']", 'to': "orm['hdabo.TimePeriod']"}),
-            'college_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'college_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_college_themes']", 'to': "orm['hdabo.Domain']"}),
-            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'domains': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_domains']", 'to': "orm['hdabo.Domain']"}),
-            'format': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.DocumentFormat']", 'null': 'True', 'blank': 'True'}),
-            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
-            'highschool_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_periods']", 'to': "orm['hdabo.TimePeriod']"}),
-            'highschool_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'highschool_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_highschool_themes']", 'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'manual_order': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
-            'modification_datetime': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'organisation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Organisation']", 'null': 'True'}),
-            'original_creation_date': ('django.db.models.fields.DateField', [], {}),
-            'original_modification_date': ('django.db.models.fields.DateField', [], {}),
-            'primary_periods': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_periods_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_periods']", 'to': "orm['hdabo.TimePeriod']"}),
-            'primary_themes': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'primary_themes_datasheets'", 'symmetrical': 'False', 'through': "orm['hdabo.Datasheet_primary_themes']", 'to': "orm['hdabo.Domain']"}),
-            'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['hdabo.Tag']", 'through': "orm['hdabo.TaggedSheet']", 'symmetrical': 'False'}),
-            'title': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
-            'town': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Location']", 'null': 'True', 'blank': 'True'}),
-            'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
-            'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
-            'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.datasheet_college_periods': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_periods'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
-            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
-        },
-        'hdabo.datasheet_college_themes': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_college_themes'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.datasheet_domains': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_domains'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.datasheet_highschool_periods': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_periods'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
-            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
-        },
-        'hdabo.datasheet_highschool_themes': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_highschool_themes'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.datasheet_primary_periods': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_periods'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {}),
-            'timeperiod': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TimePeriod']"})
-        },
-        'hdabo.datasheet_primary_themes': {
-            'Meta': {'ordering': "['sort_value']", 'object_name': 'Datasheet_primary_themes'},
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'domain': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Domain']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sort_value': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.documentformat': {
-            'Meta': {'object_name': 'DocumentFormat'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
-        },
-        'hdabo.domain': {
-            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'Domain'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
-            'school_period': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdabo.location': {
-            'Meta': {'object_name': 'Location'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'insee': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '5'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'})
-        },
-        'hdabo.organisation': {
-            'Meta': {'object_name': 'Organisation'},
-            'hda_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'location': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
-            'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.tag': {
-            'Meta': {'unique_together': "(('label', 'original_label', 'url_status'),)", 'object_name': 'Tag'},
-            'alias': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'alternative_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
-            'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.TagCategory']", 'null': 'True', 'blank': 'True'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}),
-            'original_label': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
-            'popularity': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
-            'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
-            'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
-            'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.tagcategory': {
-            'Meta': {'object_name': 'TagCategory'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'})
-        },
-        'hdabo.taggedsheet': {
-            'Meta': {'object_name': 'TaggedSheet'},
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'datasheet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'index_note': ('django.db.models.fields.FloatField', [], {'default': '0.0', 'db_index': 'True'}),
-            'order': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
-            'original_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdabo.Tag']"}),
-            'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
-        },
-        'hdabo.timeperiod': {
-            'Meta': {'unique_together': "(('label', 'school_period'),)", 'object_name': 'TimePeriod'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
-            'school_period': ('django.db.models.fields.IntegerField', [], {})
-        },
-        'hdalab.country': {
-            'Meta': {'object_name': 'Country'},
-            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '255', 'db_index': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
-        },
-        'hdalab.datasheetextras': {
-            'Meta': {'object_name': 'DatasheetExtras'},
-            'datasheet': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'extras'", 'unique': 'True', 'to': "orm['hdabo.Datasheet']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'insee': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.InseeCoords']", 'null': 'True', 'blank': 'True'})
-        },
-        'hdalab.dbpediafields': {
-            'Meta': {'object_name': 'DbpediaFields'},
-            'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
-            'tag': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'dbpedia_fields'", 'unique': 'True', 'null': 'True', 'to': "orm['hdabo.Tag']"}),
-            'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        },
-        'hdalab.dbpediafieldstranslation': {
-            'Meta': {'unique_together': "(('master', 'language_code'),)", 'object_name': 'DbpediaFieldsTranslation'},
-            'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'is_abstract_translated': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
-            'is_label_translated': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'blank': 'True'}),
-            'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
-            'master': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'to': "orm['hdalab.DbpediaFields']"})
-        },
-        'hdalab.geoinclusion': {
-            'Meta': {'object_name': 'GeoInclusion'},
-            'country': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'includes'", 'to': "orm['hdalab.Country']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'tag': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'locatedin'", 'unique': 'True', 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.hdasession': {
-            'Meta': {'object_name': 'HdaSession'},
-            'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sessionid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36', 'db_index': 'True'})
-        },
-        'hdalab.infoboxparameter': {
-            'Meta': {'unique_together': "(('tag_infobox', 'param_name'),)", 'object_name': 'InfoboxParameter'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'param_name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
-            'param_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'tag_infobox': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['hdalab.TagInfobox']"})
-        },
-        'hdalab.inseecoords': {
-            'Meta': {'object_name': 'InseeCoords'},
-            'city_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
-            'insee': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
-            'latitude': ('django.db.models.fields.FloatField', [], {}),
-            'longitude': ('django.db.models.fields.FloatField', [], {})
-        },
-        'hdalab.taginfobox': {
-            'Meta': {'unique_together': "(('tag', 'name', 'revision_id'),)", 'object_name': 'TagInfobox'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
-            'revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'source': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'infoboxes'", 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.taglinks': {
-            'Meta': {'object_name': 'TagLinks'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_objects'", 'to': "orm['hdabo.Tag']"}),
-            'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taglinks_subjects'", 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.tagwpcategory': {
-            'Meta': {'unique_together': "(('tag', 'wp_category', 'hidden'),)", 'object_name': 'TagWpCategory'},
-            'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wp_categories'", 'to': "orm['hdabo.Tag']"}),
-            'wp_category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tags'", 'to': "orm['hdalab.WpCategory']"})
-        },
-        'hdalab.tagyears': {
-            'Meta': {'object_name': 'TagYears'},
-            'end_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
-            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'to': "orm['hdabo.Tag']"})
-        },
-        'hdalab.wpcategory': {
-            'Meta': {'object_name': 'WpCategory'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048'})
-        },
-        'hdalab.wpcategoryinclusion': {
-            'Meta': {'unique_together': "(('parent_category', 'child_category'),)", 'object_name': 'WpCategoryInclusion'},
-            'child_category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'parent_categories'", 'to': "orm['hdalab.WpCategory']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'parent_category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'child_categories'", 'to': "orm['hdalab.WpCategory']"})
-        }
-    }
-
-    complete_apps = ['hdalab']
--- a/web/hdalab/models/__init__.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-from hdalab.models.categories import (WpCategory, InfoboxParameter, TagInfobox, 
-    TagWpCategory, WpCategoryInclusion)
-from hdalab.models.dataviz import TagYears, Country, GeoInclusion, TagLinks, DbpediaFields, HdaSession, InseeCoords, DatasheetExtras, DbpediaFieldsTranslation
-
-__all__ = ['WpCategory', 'InfoboxParameter', 'TagInfobox', 'TagWpCategory', 'TagYears', 'Country', 'GeoInclusion', 'TagLinks', 'DbpediaFields', 'DbpediaFieldsTranslation', 'HdaSession', 'InseeCoords', 'DatasheetExtras', 'WpCategoryInclusion']
\ No newline at end of file
--- a/web/hdalab/models/categories.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-'''
-Created on Jan 26, 2012
-
-@author: ymh
-'''
-from django.db import models
-from hdabo.models import Tag
-
-
-class WpCategory(models.Model):
-    label = models.CharField(max_length=2048, unique=True, blank=False, null=False)
-    
-    def __unicode__(self):
-        return unicode(self.label)
-    
-    class Meta:
-        app_label = 'hdalab'
-        verbose_name_plural = "WpCategories"
-
-class TagWpCategory(models.Model):
-    tag = models.ForeignKey(Tag, related_name="wp_categories")
-    wp_category = models.ForeignKey(WpCategory, related_name="tags")
-    hidden = models.BooleanField(blank=False, null=False)
-    
-    class Meta:
-        app_label = 'hdalab'
-        unique_together = ('tag', 'wp_category', 'hidden')
-
-class TagInfobox(models.Model):
-    tag = models.ForeignKey(Tag, related_name="infoboxes")
-    name = models.CharField(max_length=2048, unique=False, blank=False, null=False)
-    source = models.TextField(unique=False, blank=True, null=True)
-    revision_id = models.BigIntegerField(unique=False, blank=True, null=True)
-    
-    class Meta:
-        app_label = 'hdalab'
-        unique_together = ('tag','name','revision_id')
-    
-class InfoboxParameter(models.Model):
-    tag_infobox = models.ForeignKey(TagInfobox)
-    param_name = models.CharField(max_length=2048, unique=False, blank=False, null=False)
-    param_value = models.TextField(unique=False, blank=True, null=True)
-
-    class Meta:
-        app_label = 'hdalab'
-        unique_together = ('tag_infobox','param_name')
-
-# Added on 02/07/2012
-
-class WpCategoryInclusion(models.Model):
-    parent_category = models.ForeignKey(WpCategory, related_name="child_categories")
-    child_category = models.ForeignKey(WpCategory, related_name="parent_categories")
-    
-    class Meta:
-        app_label = 'hdalab'
-        unique_together = ('parent_category','child_category')
\ No newline at end of file
--- a/web/hdalab/models/dataviz.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,93 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Jan 27, 2012
-
-@author: ymh
-'''
-from django.db import models
-from hdabo.models import Tag, Datasheet
-
-
-class TagYears(models.Model):
-    
-    tag = models.ForeignKey(Tag, related_name="years", blank=False, null=False, db_index=True)
-    start_year = models.IntegerField(blank=False, null=False, db_index=True)
-    end_year = models.IntegerField(blank=False, null=False, db_index=True)
-    
-    class Meta:
-        app_label = 'hdalab'
-        
-
-class TagLinks(models.Model):
-    
-    subject = models.ForeignKey(Tag, blank=False, null=False, db_index=True, related_name="taglinks_subjects")
-    object = models.ForeignKey(Tag, blank=False, null=False, db_index=True, related_name="taglinks_objects")
-    
-    class Meta:
-        app_label = 'hdalab'
-
-class Country(models.Model):
-    
-    dbpedia_uri = models.URLField(verify_exists=False, max_length=255, blank=False, null=False, db_index=True, unique=True)
-    
-    class Meta:
-        app_label = 'hdalab'
-
-class GeoInclusion(models.Model):
-    
-    tag = models.OneToOneField(Tag, related_name="locatedin", db_index=True)
-    country = models.ForeignKey(Country, blank=False, null=False, related_name="includes", db_index=True)
-    
-    class Meta:
-        app_label = 'hdalab'
-
-class DbpediaFields(models.Model):
-
-    dbpedia_uri = models.URLField(verify_exists=False, max_length=2048, blank=False, null=False, db_index=True, unique=False)
-    tag = models.OneToOneField(Tag, blank=True, null=True, db_index=True, related_name="dbpedia_fields")
-    abstract = models.TextField(blank=True, null=True)
-    thumbnail = models.URLField(verify_exists=False, max_length=2048, blank=True, null=True, db_index=False)    
-    label = models.CharField(max_length=2048, unique=False, blank=True, null=True)
-
-    class Meta:
-        app_label = 'hdalab'
-
-
-class DbpediaFieldsTranslation(models.Model):
-
-    master = models.ForeignKey(DbpediaFields, blank=False, null=False, db_index=True, related_name="translations")
-    language_code = models.CharField(max_length=15, blank=False, null=False, db_index=True)
-    label = models.CharField(max_length=2048, unique=False, blank=True, null=False)
-    abstract = models.TextField(blank=True, null=True)
-    is_label_translated = models.BooleanField(default=True)
-    is_abstract_translated = models.BooleanField(default=True)
-    class Meta:
-        app_label = 'hdalab'
-        unique_together = ('master', 'language_code')
-
-
-class HdaSession(models.Model):
-    
-    sessionid = models.CharField(max_length=36, unique=True, blank=False, null=False, db_index=True)
-    data = models.TextField(blank=True, null=True)
-    
-    class Meta:
-        app_label = 'hdalab'
-
-class InseeCoords(models.Model):
-    
-    insee = models.IntegerField(primary_key=True)
-    city_name = models.CharField(max_length=255, blank=False, null=False)
-    latitude = models.FloatField(blank=False, null=False)
-    longitude = models.FloatField(blank=False, null=False)
-    
-    class Meta:
-        app_label = 'hdalab'
-
-class DatasheetExtras(models.Model):
-    
-    datasheet = models.OneToOneField(Datasheet, related_name="extras", db_index=True)
-    insee = models.ForeignKey(InseeCoords, blank=True, null=True, db_index=True)
-    
-    class Meta:
-        app_label = 'hdalab'
\ No newline at end of file
--- a/web/hdalab/modwsgi.wsgi	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-import os
-import sys
-import site
-
-
-
-def application(environ, start_response):
-    
-    global g_env_set
-    
-    if 'g_env_set' not in globals() or not g_env_set:
-        os.environ['DJANGO_SETTINGS_MODULE'] = environ['DJANGO_SETTINGS_MODULE']
-    
-        prev_sys_path = list(sys.path)
-    
-        sys.path.append(environ['PROJECT_PATH'])
-        for path in environ.get('PYTHON_PATH', "").split(os.pathsep):
-            if path:
-                site.addsitedir(path) #@UndefinedVariable
-    
-        new_sys_path = [] 
-        for item in list(sys.path): 
-            if item not in prev_sys_path and item not in new_sys_path: 
-                new_sys_path.append(item) 
-                sys.path.remove(item)
-        sys.path[:0] = new_sys_path
-        g_env_set = True 
-
-    import django.core.handlers.wsgi
-
-    _application = django.core.handlers.wsgi.WSGIHandler()
-
-    if environ.get('PYDEV_DEBUG', "False").lower() in ["true", "1", "t"]:
-        import pydevd #@UnresolvedImport
-        pydevd.settrace(suspend=False)
-
-    return _application(environ, start_response)
-        
--- a/web/hdalab/settings.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,173 +0,0 @@
-# -*- coding: utf-8 -*-
-# Django settings for hdalab project.
-
-DEBUG = True
-TEMPLATE_DEBUG = DEBUG
-
-ADMINS = (
-    # ('Your Name', 'your_email@example.com'),
-)
-
-MANAGERS = ADMINS
-
-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'
-
-# Language code for this installation. All choices can be found here:
-# http://www.i18nguy.com/unicode/language-identifiers.html
-LANGUAGE_CODE = 'fr-fr'
-
-ugettext = lambda s:s
-
-LANGUAGES = (
-  ('fr', ugettext('French')),
-  ('en', ugettext('English')),
-  ('it', ugettext('Italian')),
-  ('de', ugettext('German')),
-  ('es', ugettext('Spanish')),
-  ('ja', ugettext('Japanese')),
-  #('zh-tw', ugettext('Chinese')),
-)
-
-SITE_ID = 1
-
-# If you set this to False, Django will make some optimizations so as not
-# 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 filesystem path to the directory that will hold user-uploaded files.
-# Example: "/home/media/media.lawrence.com/media/"
-MEDIA_ROOT = ''
-
-# URL that handles the media served from MEDIA_ROOT. Make sure to use a
-# trailing slash.
-# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
-MEDIA_URL = ''
-
-# Absolute path to the directory static files should be collected to.
-# Don't put anything in this directory yourself; store your static files
-# in apps' "static/" subdirectories and in STATICFILES_DIRS.
-# Example: "/home/media/media.lawrence.com/static/"
-STATIC_ROOT = ''
-
-# URL prefix for static files.
-# Example: "http://media.lawrence.com/static/"
-STATIC_URL = '/static/'
-
-# URL prefix for admin static files -- CSS, JavaScript and images.
-# Make sure to use a trailing slash.
-# Examples: "http://foo.com/static/admin/", "/static/admin/".
-#ADMIN_MEDIA_PREFIX = '/static/admin/'
-
-# Additional locations of static files
-STATICFILES_DIRS = (
-    # Put strings here, like "/home/html/static" or "C:/www/django/static".
-    # Always use forward slashes, even on Windows.
-    # Don't forget to use absolute paths, not relative paths.
-)
-
-# List of finder classes that know how to find static files in
-# various locations.
-STATICFILES_FINDERS = (
-    'django.contrib.staticfiles.finders.FileSystemFinder',
-    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
-#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
-)
-
-# Make this unique, and don't share it with anybody.
-SECRET_KEY = 'u!@fo&-)d-hqz7==jmc2*_^__wod8$k^lb7^)y@ihbok)gn4fe'
-
-# List of callables that know how to import templates from various sources.
-TEMPLATE_LOADERS = (
-    'django.template.loaders.filesystem.Loader',
-    'django.template.loaders.app_directories.Loader',
-#     'django.template.loaders.eggs.Loader',
-)
-
-MIDDLEWARE_CLASSES = (
-    'django.contrib.sessions.middleware.SessionMiddleware',
-    'django.middleware.locale.LocaleMiddleware',
-    'django.middleware.common.CommonMiddleware',
-    'django.middleware.csrf.CsrfViewMiddleware',
-    'django.contrib.auth.middleware.AuthenticationMiddleware',
-    'django.contrib.messages.middleware.MessageMiddleware',
-)
-
-ROOT_URLCONF = 'hdalab.urls'
-
-TEMPLATE_DIRS = (
-    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
-    # Always use forward slashes, even on Windows.
-    # Don't forget to use absolute paths, not relative paths.
-)
-
-INSTALLED_APPS = (
-    'south',
-    'django.contrib.auth',
-    'django.contrib.contenttypes',
-    'django.contrib.sessions',
-    'django.contrib.sites',
-    'django.contrib.messages',
-    'django.contrib.staticfiles',
-    'django.contrib.admin',
-    'django_extensions',
-    'hdabo',
-    'hdalab',
-)
-
-# A sample logging configuration. The only tangible logging
-# performed by this configuration is to send an email to
-# the site admins on every HTTP 500 error.
-# See http://docs.djangoproject.com/en/dev/topics/logging for
-# more details on how to customize your logging configuration.
-#LOGGING = {
-#    'version': 1,
-#    'disable_existing_loggers': False,
-#    'handlers': {
-#        'mail_admins': {
-#            'level': 'ERROR',
-#            'class': 'django.utils.log.AdminEmailHandler'
-#        }
-#    },
-#    'loggers': {
-#        'django.request': {
-#            'handlers': ['mail_admins'],
-#            'level': 'ERROR',
-#            'propagate': True,
-#        },
-#    }
-#}
-
-HAYSTACK_SITECONF = 'hdabo.search.sites'
-HAYSTACK_SEARCH_ENGINE = 'hdabo.search.french_whoosh'
-#HAYSTACK_WHOOSH_PATH = os.path.abspath(BASE_DIR + "../index/").rstrip("/") + "/"
-
-WIKIPEDIA_API_URL = "http://fr.wikipedia.org/w/api.php"
-WIKIPEDIA_VERSION_PERMALINK_TEMPLATE = "http://fr.wikipedia.org/w/index.php?oldid=%s"
-DBPEDIA_URI_TEMPLATE = "http://dbpedia.org/resource/%s"
-
-LOCALE_PATHS = ()
-
-from hdalab.config import * #@UnusedWildImport
-
Binary file web/hdalab/static/hdalab/css/DroidSerif-Bold.ttf has changed
Binary file web/hdalab/static/hdalab/css/DroidSerif-BoldItalic.ttf has changed
Binary file web/hdalab/static/hdalab/css/DroidSerif-Italic.ttf has changed
Binary file web/hdalab/static/hdalab/css/DroidSerif-Regular.ttf has changed
Binary file web/hdalab/static/hdalab/css/OpenSans-Bold.ttf has changed
Binary file web/hdalab/static/hdalab/css/OpenSans-BoldItalic.ttf has changed
Binary file web/hdalab/static/hdalab/css/OpenSans-Italic.ttf has changed
Binary file web/hdalab/static/hdalab/css/OpenSans-Regular.ttf has changed
--- a/web/hdalab/static/hdalab/css/cattree.css	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-.leftzone {
-    width: 280px;
-    min-height: 400px;
-    float: left;
-    height: 100%;
-    padding-right: 20px;
-    border-right: 1px solid #999;
-}
-
-.leftzone h2 {
-    font-size: 16px; font-weight: bold; margin-bottom: 5px;
-}
-
-.leftzone h3 {
-    font-size: 13px; font-weight: bold; margin: 30px 0 5px;
-}
-
-.leftzone input {
-    background: #ffffff; width: 260px; font-size: 14px; font-weight: bold; margin: 5px 0;
-}
-
-.results {
-    margin-top: 30px;
-}
-
-.content-results {
-    color: #000060;
-}
-
-ul.disciplist, ul.theslist {
-    list-style: none; margin: 10px 5px;
-}
-
-.disciplist li, .theslist li {
-    font-size: 12px; font-weight: bold;
-}
-
-.disciplist a, .theslist a {
-    color: #000066;
-}
-
-.disciplist .selected a, .theslist .selected a {
-    color: #0000ff;
-}
-
-.ui-autocomplete strong {
-    font-weight: bold; color: #990000;
-}
-
-div.cattree {
-    margin: 10px 0 0 320px;
-}
--- a/web/hdalab/static/hdalab/css/common.css	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,141 +0,0 @@
-@font-face
-{
-    font-family: "Open Sans"; src: url(OpenSans-Regular.ttf);
-}
-
-@font-face
-{
-    font-family: "Open Sans"; font-weight: bold; src: url(OpenSans-Bold.ttf);
-}
-
-@font-face
-{
-    font-family: "Open Sans"; font-style: italic; src: url(OpenSans-Italic.ttf);
-}
-
-@font-face
-{
-    font-family: "Open Sans"; font-weight: bold; font-style: italic; src: url(OpenSans-BoldItalic.ttf);
-}
-
-/* Browser-reset CSS */
-
-html, body, div, span, applet, object, iframe,
-h1, h2, h3, h4, h5, h6, p, blockquote, pre,
-a, abbr, acronym, address, big, cite, code,
-del, dfn, em, img, ins, kbd, q, s, samp,
-small, strike, strong, sub, sup, tt, var,
-b, u, i, center,
-dl, dt, dd, ol, ul, li,
-fieldset, form, label, legend,
-table, caption, tbody, tfoot, thead, tr, th, td,
-article, aside, canvas, details, embed, 
-figure, figcaption, footer, header, hgroup, 
-menu, nav, output, ruby, section, summary,
-time, mark, audio, video {
-    margin: 0;
-    padding: 0;
-    border: 0;
-    font-size: 100%;
-    font: inherit;
-    vertical-align: baseline;
-}
-
-input::-moz-focus-inner /*Remove button padding in FF*/
-{ 
-    border: 0;
-    padding: 0;
-}
-
-table {
-    border-collapse: separate; border-spacing: 0;
-}
-
-th, td {
-    vertical-align: top;
-}
-
-img a {
-    border: none;
-}
-
-/* Body */
-
-body {
-    font-family: "Open Sans", Arial, Helvetica, sans-serif; background: url(../img/bgdhdalab.png) top repeat-x #ffffff; color: #000000; font-size: 10px;
-}
-
-input, textarea {
-    font-family: "Open Sans", Arial, Helvetica, sans-serif; background: transparent;
-}
-
-a {
-    text-decoration: none;
-}
-
-a:hover {
-    text-decoration: underline;
-}
-
-/* Main container */
-
-#header {
-    position: relative; width: 960px; margin: 0 auto; height: 65px;
-}
-
-#container {
-    position: relative; width: 960px; margin: 0 auto; min-height: 800px;
-}
-
-h1 {
-    margin: 5px 0 10px; font-size: 34px;
-}
-
-h1 a {
-    color: #ffffff;
-}
-
-h1 a:hover {
-    color: #e07000;
-}
-
-#nav {
-    float: right; list-style: none; margin-top: 3px;
-}
-
-#nav li {
-    float: left; font-size: 14px; margin-left: 15px; font-weight: bold;
-    color: #CCCCCC;
-}
-
-#nav a {
-    color: #ffffff;
-}
-
-#nav a:hover {
-    color: #e07000;
-}
-
-#nav a.actif {
-    color: #ffff80;
-}
-
-#footer {
-    width: 100%; float: left; clear: both; background: url(../img/bgdfooter.png) top repeat-x #b1b4c0; padding: 110px 0 20px 0;
-}
-
-#footer-contents {
-    list-style: none; width: 960px; margin: 0 auto; color: #ffffff;
-}
-
-#footer-contents li {
-    float: left; width: 240px;
-}
-
-#footer-contents p {
-    font-size: 13px; margin: 2px 0;
-}
-
-#footer-contents img {
-    display: block; margin: 0 auto;
-}
--- a/web/hdalab/static/hdalab/css/completion.css	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,195 +0,0 @@
-#titlebar, #columns {
-    width: 100%;
-    clear: both;
-}
-
-.langbutton {
-    width: 19px; height: 13px; margin: 2px; padding: 0; border: none; text-indent: -999px; background-position: 0 -26px; cursor: pointer;
-}
-
-.langbutton:hover {
-    background-position: 0 -13px;
-}
-
-.langbutton.selected {
-    background-position: 0 0; cursor: default;
-}
-
-.barrebloc {
-    float: left; width: 473px; border: 1px solid #b0b0b0;
-    background-image: url(../img/bgdhdalab.png); background-position: 0 -22px; background-repeat: repeat-x; cursor: pointer; cursor: hand;
-    border-top-left-radius: 4px; border-top-right-radius: 4px
-}
-
-.barrebloc h2 {
-    margin: 4px 0; font-size: 16px; text-align: center; color: #ffffff; font-weight: bold;
-}
-
-.bloc {
-    float: left; width: 475px; margin-bottom: 10px;
-}
-
-#bloc_translationinfo {
-	color: #666;
-	font-style: italic;
-}
-
-.corpsbloc {
-    float: left; width: 465px; border: 1px solid #b0b0b0; padding: 8px 4px; border-top-style: none;
-    background-color: #ffffff; background-image: url(../img/bgdhdalab.png); background-position: 0 -62px; background-repeat: repeat-x;
-    border-bottom-left-radius: 4px; border-bottom-right-radius: 4px
-}
-
-#hdatitle {
-    float: left; width: 475px; margin: 5px 0; font-size: 20px;
-}
-
-#titleleft {
-	float: left;
-}
-
-#titleright {
-    float: right;
-}
-
-#langselect {
-	float: right;
-}
-
-#leftcol {
-    float: left; width: 475px; margin-right: 5px;
-}
-
-#rightcol {
-    float: left; width: 475px; margin-left: 5px;
-}
-
-#contentlist {
-    list-style: none;
-}
-
-li.content-item {
-    margin: 2px 0 12px;
-}
-
-.content-item h3 {
-    font-size: 18px; margin: 3px 0; clear: both;
-}
-
-.content-item h4 {
-    font-size: 11px; margin: 3px 0;
-}
-
-.content-item h4 a {
-    color: #000066;
-}
-
-.maplet {
-    float: right;
-}
-
-.content-item p {
-    font-size: 12px; margin: 3px 0;
-}
-
-.content-annotation ul {
-    list-style : disc; margin: 2px 0; padding-left: 1.5em; font-size: 12px;
-    cursor: pointer; cursor: hand;
-}
-
-.content-annotation li {
-    margin: 2px 0;
-}
-
-.content-annotation textarea {
-    width: 99%; margin: 0; padding: 0; font-size: 12px;
-}
-
-ul.content-tags {
-    list-style: none;
-}
-
-li.content-tag-item {
-    display: inline-block; margin: 2px; padding: 2px; font-size: 13px; background: #666666;
-}
-
-.content-tag-item a {
-    color: #ffffff;
-}
-
-.content-tag-item a:hover {
-    color: #ff8080;
-}
-
-.content-tag-item a.tagmatch {
-    color: #ffff00; font-weight: bold;
-}
-
-#taginfo p, h2, h3  {
-    margin: 5px 0;
-}
-
-#taginfo h3 {
-    font-size: 14px;
-}
-
-#taginfo p {
-    font-size: 11px;
-}
-
-#img_wikipedia {
-    float: left; max-width: 160px; max-height: 120px; margin: 2px 2px 2px 0;
-}
-
-#tagsearch {
-    width: 100%; font-size: 16px; font-weight: bold; border-style: none; border-bottom: 1px solid #000;
-}
-
-#tagsearch.waiting {
-    background: url(../img/small-loader.gif) no-repeat right;
-}
-
-ul.ui-autocomplete {
-    font-family: "Open Sans"; max-width: 230px;
-    max-height: 400px; overflow-y: auto; overflow-x: hidden;
-}
-
-.wpinfo {
-    margin-left: 240px;
-}
-
-.ui-menu-item:hover .acwp {
-    display: block;
-}
-
-.acnb {
-    float: right; font-size: 12px; margin: 2px 0 0 2px;
-}
-
-.actitle {
-    font-size: 13px;
-}
-
-.wptitle {
-    font-size: 13px; font-weight: bold;
-}
-
-.wpimg {
-    max-width: 80px; max-height: 60px; float: left; margin: 5px 2px 2px 0; border: none;
-}
-
-.wpabstract {
-    font-size: 11px;
-}
-
-.wpsource {
-    font-size: 10px; font-style: bold;
-}
-
-.clear {
-    clear: both;
-}
-
-.actitle strong, .wptitle strong {
-    color: #c000c0;
-}
\ No newline at end of file
--- a/web/hdalab/static/hdalab/css/facettes.css	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,490 +0,0 @@
-.langbutton {
-    width: 19px; height: 13px; margin: 2px; padding: 0; border: none; text-indent: -999px; background-position: 0 -26px; cursor: pointer;
-}
-
-.langbutton:hover {
-    background-position: 0 -13px;
-}
-
-.langbutton.selected {
-    background-position: 0 0; cursor: default;
-}
-
-.barrebloc {
-    float: left; width: 473px; border: 1px solid #b0b0b0;
-    background-image: url(../img/bgdhdalab.png); background-position: 0 -22px; background-repeat: repeat-x; cursor: pointer; cursor: hand;
-    border-top-left-radius: 4px; border-top-right-radius: 4px
-}
-
-.barrebloc h2 {
-    margin: 4px 0; font-size: 16px; text-align: center; color: #ffffff; font-weight: bold;
-}
-
-.bloc, #bloc_gestvue {
-    float: left; width: 475px; margin-bottom: 10px;
-}
-
-#bloc_translationinfo {
-	color: #666;
-	font-style: italic;
-}
-
-.corpsbloc {
-    float: left; width: 465px; border: 1px solid #b0b0b0; padding: 8px 4px; border-top-style: none;
-    background-color: #ffffff; background-image: url(../img/bgdhdalab.png); background-position: 0 -62px; background-repeat: repeat-x;
-    border-bottom-left-radius: 4px; border-bottom-right-radius: 4px
-}
-
-#hdatitle {
-    float: left; width: 475px; margin: 5px 0; font-size: 20px;
-}
-
-#sessionname {
-    color: #600000; font-size: 22px;
-}
-
-#hdatitle .lectseul {
-    font-size: 17px;
-}
-
-#hdatitle input {
-    display: inline; font-size: 18px; font-weight: bold;
-}
-
-
-#titleleft {
-	float: left;
-}
-
-#titleright {
-    float: right;
-}
-
-#langselect {
-	float: right;
-}
-
-
-#apartager {
-    float: right; font-size: 14px; clear: right;
-}
-
-
-#vues {
-    float: right; text-align: right; width: 475px; margin: 2px 0; clear: right;
-}
-
-#vuestitre {
-     display: inline; padding: 2px 4px; font-size: 15px;
-}
-
-#ongletsvues {
-    display: inline; list-style: none;
-}
-
-li.lienvue {
-    display: inline; padding: 3px; font-size: 13px; font-weight: bold;
-}
-
-.lienvue a, #apartager a {
-    color: #666666;
-}
-
-.lienvue.actif a, #apartager.actif a {
-    color: #cc0066;
-}
-
-#nouvellevue a {
-    font-weight: bold; color: #ff3000; font-size: 16px;
-}
-
-#partageurls, #plusdevues {
-    float: right; text-align: right; clear: both; margin: 2px 0;
-    font-size: 13px; display: none; width: 100%;
-}
-
-#partageurls ul {
-    list-style: none;
-}
-
-#partageurls li {
-    float: right; margin-left: 5px; padding: 4px; font-weight: bold;
-}
-
-#partageurls li.actif {
-    background: #000080;
-}
-
-#partageurls li.actif a {
-    color: #ffffff;
-}
-
-#zc-partageligne {
-    float: right; clear: both; margin-top: 3px; width: 100%; font-size: 13px; text-align: right;
-}
-
-#zc-partageinput {
-    width: 360px; padding: 2px; border: 1px solid #999999;
-}
-
-#zc-partageinput.hover {
-    background: #000080; color: #ffffff;
-}
-
-#zc-partageinput.active {
-    background: #800000; color: #ffffff;
-}
-
-#plusdevues {
-    list-style: none;
-}
-
-.myurl {
-    font-weight: bold;
-}
-
-#timeline {
-    float: left; width: 100%; margin: 15px 0;
-}
-
-#dates {
-    list-style: none; float: left; width: 100%; height: 0;
-}
-
-#dates li {
-    position: absolute; width: 1px; height: 20px; background: rgba(0,0,0,.3); z-index: 2;
-}
-
-div.datelabel {
-    width: 60px; margin: 4px 0 0 -30px; font-size: 10px; text-align: center; opacity: .8;
-}
-
-#dateheat {
-    float: left; width: 100%; height: 20px; z-index: 1;
-}
-
-.handle {
-    position: absolute; width: 0; z-index: 2; cursor: pointer; cursor: hand;
-}
-
-.handleinner {
-    float: left; border: 5px solid #999; background: #fff;
-    height: 30px; width: 10px; margin-top: -10px; border-radius: 4px;
-    opacity: .8;
-}
-
-.handleinner:hover {
-    background: #ccc;
-}
-
-.ui-draggable-dragging .handleinner {
-    background: #660000; color: #ffffff;
-}
-
-#leftcol {
-    float: left; width: 475px; margin-right: 5px;
-}
-
-#bandefiltre {
-    float: left; width: 100%; margin-top: 10px;
-}
-
-#filtertitle {
-    float: left; margin: 1px 0; font-size: 13px; font-weight: bold;
-}
-
-#filters {
-    list-style: none; float: left; margin: 0 20px; font-size: 12px;
-}
-
-#filters li {
-    float: left; padding: 2px 3px; margin-right: 5px; font-weight: bold;
-}
-
-#filters a {
-    color: #666666;
-}
-
-#filters li.nofilter {
-    font-style: italic; color: #ff3030;
-}
-
-#filters li.filtag {
-    color: #ffffff; background: #000066;
-}
-
-#filters li.filcountry {
-    color: #ffffff; background: #cc0066;
-}
-
-#filters li.filperiod {
-    color: #ffffff; background: #e07000;
-}
-
-span.spyr {
-     cursor: pointer; cursor: hand;
-}
-
-.spyr input {
-    display: inline; margin: 0; padding: 0; font-size: 11px;
-}
-
-#contentcount {
-    float: left; width: 100%; text-align: right; font-size: 13px; margin: 2px 0;
-}
-
-#filters a.remfil {
-    color: #cccccc; margin-left: 2px;
-}
-
-#map {
-    height: 250px;
-}
-
-.leaflet-container {
-    background: #e3e9fd url(../img/bgmap.png);
-}
-
-#tagcloud {
-    text-align: center;
-}
-
-#tclist {
-    list-style: none;
-}
-
-#tclist li {
-    display: inline-block; margin: 2px 5px;
-}
-
-#tclist a {
-    color: #000000;
-}
-
-#tclist a.tagmatch {
-    color: #0000cc;
-}
-
-#tclist a:hover {
-    color: #800000;
-}
-
-#rightcol {
-    float: left; width: 475px; margin-left: 5px;
-}
-
-#disciplines {
-    
-}
-
-.disc-ul {
-    float: left; clear: both; list-style: none;
-}
-
-.disc-li {
-    float: left; width: 230px; margin: 2px 0;
-}
-
-.disc-label {
-    float: left; font-size: 13px; width: 100px; text-align: right; margin-right: 5px; line-height: 13px;
-}
-
-.disc-bar {
-    float: left; height: 14px; margin: 2px 0; cursor: pointer; cursor: hand;
-}
-
-.disc-bar:hover {
-    background: #80a0ff;
-}
-
-#contentlist {
-    list-style: none;
-}
-
-li.content-item {
-    margin: 2px 0 12px;
-}
-
-.content-item h3 {
-    font-size: 18px; margin: 3px 0;
-}
-
-.content-item h3 a, .content-item p a {
-    color: #000000;
-}
-
-.content-item h4 {
-    font-size: 11px; margin: 3px 0;
-}
-
-.content-item h4 a {
-    color: #000066;
-}
-
-.maplet {
-    float: right;
-}
-
-.content-item p {
-    font-size: 12px; margin: 3px 0;
-}
-
-.content-annotation ul {
-    list-style : disc; margin: 2px 0; padding-left: 1.5em; font-size: 12px;
-    cursor: pointer; cursor: hand;
-}
-
-.content-annotation li {
-    margin: 2px 0;
-}
-
-.content-annotation textarea {
-    width: 99%; margin: 0; padding: 0; font-size: 12px;
-}
-
-ul.content-tags {
-    list-style: none;
-}
-
-li.content-tag-item {
-    display: inline-block; margin: 2px; padding: 2px; font-size: 13px; background: #666666;
-}
-
-.content-tag-item a {
-    color: #ffffff;
-}
-
-.content-tag-item a:hover {
-    color: #ff8080;
-}
-
-.content-tag-item a.tagmatch {
-    color: #ffff00; font-weight: bold;
-}
-
-#tagcount {
-    float: right; text-align: right; font-size: 14px; font-weight: bold;
-}
-
-#taginfo p, h2, h3  {
-    margin: 5px 0;
-}
-
-#taginfo h3 {
-    font-size: 14px;
-}
-
-#taginfo p {
-    font-size: 11px;
-}
-
-#img_wikipedia {
-    float: left; max-width: 160px; max-height: 120px; margin: 2px 2px 2px 0;
-}
-
-#gestvue {
-    display: none;
-}
-
-#div_titrevue {
-    margin: 5px 0;
-}
-
-#div_titrevue label {
-    font-size: 14px;
-}
-
-#titrevue {
-    font-size: 15px; margin: 0 0 0 5px; width: 220px; padding: 2px; border-style: none; border-bottom: 1px solid #000;
-}
-
-#gestvue h4 {
-    margin: 2px 0; font-size: 14px;
-}
-
-#widgetlist {
-    list-style: none; width: 100%;
-}
-
-#widgetlist li {
-    float: left; width: 48%;
-}
-
-#widgetlist label {
-    font-size: 13px;
-}
-
-#notes ul {
-    font-size: 13px; margin: 0; padding-left: 1.5em;
-}
-
-#notes textarea {
-    width: 99%; font-size: 13px;
-}
-
-#waitcontainer {
-    float: left; clear: both; width: 100%; height: 0; position: relative;
-}
-
-#waiting {
-    position: absolute; width: 100%; height: 600px; background: #ffffff; opacity: .8; z-index: 100;
-}
-
-.waittick {
-    position: absolute; width: 10px; height: 10px; background: #000000; border-radius: 5px; display: none;
-}
-
-/* COMPLETION */
-
-#tagsearch {
-    width: 100%; font-size: 16px; font-weight: bold; border-style: none; border-bottom: 1px solid #000;
-}
-
-#tagsearch.waiting {
-    background: url(../img/small-loader.gif) no-repeat right;
-}
-
-ul.ui-autocomplete {
-    font-family: "Open Sans"; max-width: 230px;
-    max-height: 400px; overflow-y: auto; overflow-x: hidden;
-}
-
-.wpinfo {
-    margin-left: 240px;
-}
-
-.ui-menu-item:hover .acwp {
-    display: block;
-}
-
-.acnb {
-    float: right; font-size: 12px; margin: 2px 0 0 2px;
-}
-
-.actitle {
-    font-size: 13px;
-}
-
-.wptitle {
-    font-size: 13px; font-weight: bold;
-}
-
-.wpimg {
-    max-width: 80px; max-height: 60px; float: left; margin: 5px 2px 2px 0; border: none;
-}
-
-.wpabstract {
-    font-size: 11px;
-}
-
-.wpsource {
-    font-size: 10px; font-style: bold;
-}
-
-.clear {
-    clear: both;
-}
-
-.actitle strong, .wptitle strong {
-    color: #c000c0;
-}
--- a/web/hdalab/static/hdalab/css/index.css	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,89 +0,0 @@
-@font-face
-{
-    font-family: "Droid Serif"; src: url(DroidSerif-Regular.ttf);
-}
-
-@font-face
-{
-    font-family: "Droid Serif"; font-weight: bold; src: url(DroidSerif-Bold.ttf);
-}
-
-@font-face
-{
-    font-family: "Droid Serif"; font-style: italic; src: url(DroidSerif-Italic.ttf);
-}
-
-@font-face
-{
-    font-family: "Droid Serif"; font-weight: bold; font-style: italic; src: url(DroidSerif-BoldItalic.ttf);
-}
-
-#container h2 {
-    text-align: center; font-size: 24px; font-style: italic; font-weight: bold; color: #999; margin: 20px 0;
-    font-family: "Droid Serif", "Times New Roman", Times, serif;
-}
-
-#container h3 {
-    color: #666; font-weight: bold; font-size: 18px; text-transform: uppercase; margin: 20px 0 5px;
-}
-
-#container h4 {
-    color: #666; font-weight: bold; font-size: 16px; margin: 0; padding: 10px 0 5px; clear: both;
-}
-
-#container p, #container li {
-   font-size: 13px; margin: 5px 0;
-   font-family: "Droid Serif", "Times New Roman", Times, serif;
-}
-
-#container ul {
-    padding-left: 18px;
-}
-
-#container strong {
-    font-weight: bold;
-}
-
-.liste {
-    clear: both;
-}
-
-.bloc-appli {
-    width: 310px; float: left;
-}
-
-.separateur-applis {
-    width: 15px; height: 100px; float: left;
-}
-
-.fond-bloc {
-    cursor: pointer; height: 290px; margin: 5px 0 15px; padding: 5px;
-}
-
-.overlay-bloc {
-    padding: 5px 10px; background: rgba(255, 190, 100, 0.85); display: none;
-}
-
-p.goto {
-    text-align: right; font-size: 20px;
-}
-
-#bloc-facettes {
-    background: url(../img/facettes-thumb.jpg);
-}
-
-#bloc-categories {
-    background: url(../img/categories-thumb.jpg);
-}
-
-#bloc-thesaurus {
-    background: url(../img/thesaurus-thumb.jpg);
-}
-
-.mini-table {
-    float: left; width: 960px; clear: both; margin: 5px 0;
-}
-
-.half-bloc {
-    float: left; width: 470px; margin-right: 10px;
-}
--- a/web/hdalab/static/hdalab/css/notice.css	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,115 +0,0 @@
-h2 {
-    font-size: 20px; font-weight: bold; text-align: center;
-}
-
-.main-datasheet {
-    float: left; width: 300px; border-radius: 3px; padding: 9px; border: 1px solid #999;
-    background: #FFF8F0; margin-top: 10px;
-}
-
-.main-datasheet a {
-    color: #000000;
-}
-
-.main-datasheet h3 {
-    font-size: 16px; font-weight: bold; font-style: italic; margin: 10px 0;
-}
-
-.main-datasheet img {
-    max-width: 173px; float: right; margin: 5px 0 2px 2px; border: 1px solid #999;
-}
-
-.main-datasheet p {
-    font-size: 12px; margin: 5px 0;
-}
-
-.main-datasheet ul {
-    padding-left: 15px; margin: 10px 0 5px;
-}
-
-.main-datasheet li {
-    font-size: 13px; margin: 5px 0; font-weight: bold;
-}
-
-.main-datasheet li a {
-    text-decoration: underline;
-}
-
-.tag-container {
-    float: left; width: 320px; height: 1px; position: relative;
-}
-
-.tag-container h2, .related-datasheets h2 {
-    margin: 10px;
-}
-
-.tag-canvas, .tags-main {
-    position: absolute; top: 0; left: 0;
-}
-
-.tags-main {
-    width: 320px;
-}
-
-.tags {
-    list-style: none; text-align: center;
-}
-
-.tags li {
-    font-size: 12px; line-height: 14px; min-height: 14px; margin: 20px 0; cursor: pointer;
-}
-
-
-.tags span {
-    color: #ffffff; padding: 4px; background: #666680; 
-}
-
-.tags span.selected {
-    color: #FFFF00; font-weight: bold;
-}
-
-.related-datasheets {
-    float: left; width: 320px;
-}
-
-.datasheets {
-    list-style: none;
-}
-
-.datasheet {
-    border-radius: 3px; padding: 4px; border: 1px solid #999; margin: 5px 0;
-    background: #FFF8F0;
-}
-
-.datasheet img {
-    max-width: 86px; float: right; margin: 2px 0 2px 2px; border: 1px solid #999;
-}
-
-.datasheet h3 {
-    font-size: 13px; font-weight: bold; line-height: 13px; margin: 4px 0;
-}
-
-.datasheet h3 a {
-    color: #000000;
-}
-
-.datasheet h4 {
-    font-size: 12px; font-style: italic; line-height: 12px; margin: 4px 0;
-}
-
-.datasheet-tags {
-    list-style: none; /* display: none; */
-}
-
-.datasheet-tags li {
-    padding: 2px; color: #ffffff; background: #999999; margin: 2px 2px 0 0;
-    font-size: 11px; display: inline-block;
-}
-
-.datasheet-tags li.common-tag {
-    font-weight: bold; background: #666680;
-}
-
-.datasheet:hover .datasheet-tags {
-    display: block;
-}
--- a/web/hdalab/static/hdalab/css/thesaurus.css	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-.column {
-    float: left; width: 449px;
-    padding-left: 20px;
-}
-
-.separator {
-    float: left; width: 1px; height: 500px; margin: 30px 10px 0; background: #666;
-}
-
-.column h3 {
-    font-size: 14px; font-weight: bold;
-    margin: 10px 0;
-}
-
-.explain {
-    font-size: 12px;
-}
-
-.explain p, li {
-    margin: 5px 0;
-}
-
-.explain ul {
-    margin-left: 16px;
-}
--- a/web/hdalab/static/hdalab/css/trees.css	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,125 +0,0 @@
-.hidden {
-    display: none;
-}
-
-.cattree .content p.title {
-    font-weight: bold; cursor: pointer;
-}
-
-.cattree .content p.title:before {
-    font-weight: normal;
-}
-
-.cattree .score_0, .cattree .score_1, .cattree .score_0 a, .cattree .score_1 a {
-    color: #80d080;
-}
-
-.cattree .score_2, .cattree .score_3, .cattree .score_4, .cattree .score_2 a, .cattree .score_3 a, .cattree .score_4 a {
-    color: #409840;
-}
-
-.cattree .score_5, .cattree .score_6, .cattree .score_7, .cattree .score_5 a, .cattree .score_6 a, .cattree .score_7 a {
-    color: #006000;
-}
-
-.cattree .score_0:before, .cattree .score_1:before {
-    content: "★☆☆ ";
-}
-
-.cattree .score_2:before, .cattree .score_3:before, .cattree .score_4:before {
-    content: "★★☆ ";
-}
-
-.cattree .score_5:before, .cattree .score_6:before, .cattree .score_7:before {
-    content: "★★★ ";
-}
-
-.cattree .img-container {
-    float: left; margin: 10px 0 0; width: 60px; height: 50px; background: #dddddd;
-}
-
-.cattree .img-container img {
-    min-width: 30px; max-width: 60px; max-height: 50px; margin: 0px auto;
-}
-
-.cattree .content p.description {
-    margin: 4px 0 4px 64px; font-size: 12px; min-height: 50px;
-}
-
-.cattree a.content {
-    color: #000000;
-}
-
-.cattree li, .cattree p.theme {
-    margin: 4px 0; font-size: 12px; position: relative;
-}
-
-.cattree p.theme {
-    color: #000080; height: 20px; cursor: pointer;
-}
-
-.cattree p.theme:after {
-    font-weight: bold;
-    content: " [-]"
-}
-
-.cattree .folded p.theme:after {
-    font-weight: bold;
-    content: " [+]"
-}
-
-.cattree .theme span {
-    font-weight: bold; line-height: 12px;
-}
-
-.cattree ul {
-    list-style: none; position: relative; padding: 0; margin: 0;
-}
-
-.cattree .folded ul {
-    display: none;
-}
-
-.cattree .foldedcontent {
-    height: 0px; overflow: hidden;
-}
-
-.cattree .show_more {
-    color: #800000; font-style: italic; cursor: pointer;
-}
-
-.cattree li {
-    list-style: none;
-}
-
-.cattree ul li {
-    margin-left: 38px;
-}
-
-.cattree ul li:after {
-   content: ""; position: absolute; left: -50px; top: 9px; width: 40px; bottom: 0; border-style: solid none none solid; border-width: 1px; border-color: #333;
-}
-
-.cattree ul li:before {
-    content: ""; position: absolute; left: -50px; top: -10px; height: 19px; width: 1px; background: #333;
-}
-
-.cattree ul li:last-child:after {
-    border-style: solid none none;
-}
-
-.cattree .eltype {
-    font-style: italic; display: none;
-}
-
-.cattree li.themeli {
-    list-style: square;
-}
-
-.cattree li.content {
-    list-style: disc;
-}
-
-.loading {
-    height: 128px; background: url(../img/loader.gif) no-repeat center;
-}
\ No newline at end of file
Binary file web/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png has changed
Binary file web/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png has changed
Binary file web/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png has changed
Binary file web/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png has changed
Binary file web/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png has changed
Binary file web/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png has changed
Binary file web/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png has changed
Binary file web/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png has changed
Binary file web/hdalab/static/hdalab/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png has changed
Binary file web/hdalab/static/hdalab/css/ui-lightness/images/ui-icons_222222_256x240.png has changed
Binary file web/hdalab/static/hdalab/css/ui-lightness/images/ui-icons_228ef1_256x240.png has changed
Binary file web/hdalab/static/hdalab/css/ui-lightness/images/ui-icons_ef8c08_256x240.png has changed
Binary file web/hdalab/static/hdalab/css/ui-lightness/images/ui-icons_ffd27a_256x240.png has changed
Binary file web/hdalab/static/hdalab/css/ui-lightness/images/ui-icons_ffffff_256x240.png has changed
--- a/web/hdalab/static/hdalab/css/ui-lightness/jquery-ui-1.8.16.custom.css	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,405 +0,0 @@
-/*
- * jQuery UI CSS Framework 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Theming/API
- */
-
-/* Layout helpers
-----------------------------------*/
-.ui-helper-hidden { display: none; }
-.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
-.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
-.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
-.ui-helper-clearfix { display: inline-block; }
-/* required comment for clearfix to work in Opera \*/
-* html .ui-helper-clearfix { height:1%; }
-.ui-helper-clearfix { display:block; }
-/* end clearfix */
-.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
-
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled { cursor: default !important; }
-
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Overlays */
-.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
-
-
-/*
- * jQuery UI CSS Framework 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Theming/API
- *
- * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
- */
-
-
-/* Component containers
-----------------------------------*/
-.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; }
-.ui-widget .ui-widget { font-size: 1em; }
-.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; }
-.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; }
-.ui-widget-content a { color: #333333; }
-.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
-.ui-widget-header a { color: #ffffff; }
-
-/* Interaction states
-----------------------------------*/
-.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; }
-.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; }
-.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; }
-.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; }
-.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; }
-.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; }
-.ui-widget :active { outline: none; }
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight  {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; }
-.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
-.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; }
-.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; }
-.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; }
-.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
-.ui-priority-secondary, .ui-widget-content .ui-priority-secondary,  .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
-.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
-.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
-.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
-.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); }
-.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
-.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
-.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); }
-.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); }
-
-/* positioning */
-.ui-icon-carat-1-n { background-position: 0 0; }
-.ui-icon-carat-1-ne { background-position: -16px 0; }
-.ui-icon-carat-1-e { background-position: -32px 0; }
-.ui-icon-carat-1-se { background-position: -48px 0; }
-.ui-icon-carat-1-s { background-position: -64px 0; }
-.ui-icon-carat-1-sw { background-position: -80px 0; }
-.ui-icon-carat-1-w { background-position: -96px 0; }
-.ui-icon-carat-1-nw { background-position: -112px 0; }
-.ui-icon-carat-2-n-s { background-position: -128px 0; }
-.ui-icon-carat-2-e-w { background-position: -144px 0; }
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
-.ui-icon-triangle-1-s { background-position: -64px -16px; }
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
-.ui-icon-arrow-1-s { background-position: -64px -32px; }
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
-.ui-icon-arrow-4 { background-position: 0 -80px; }
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
-.ui-icon-extlink { background-position: -32px -80px; }
-.ui-icon-newwin { background-position: -48px -80px; }
-.ui-icon-refresh { background-position: -64px -80px; }
-.ui-icon-shuffle { background-position: -80px -80px; }
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
-.ui-icon-folder-open { background-position: -16px -96px; }
-.ui-icon-document { background-position: -32px -96px; }
-.ui-icon-document-b { background-position: -48px -96px; }
-.ui-icon-note { background-position: -64px -96px; }
-.ui-icon-mail-closed { background-position: -80px -96px; }
-.ui-icon-mail-open { background-position: -96px -96px; }
-.ui-icon-suitcase { background-position: -112px -96px; }
-.ui-icon-comment { background-position: -128px -96px; }
-.ui-icon-person { background-position: -144px -96px; }
-.ui-icon-print { background-position: -160px -96px; }
-.ui-icon-trash { background-position: -176px -96px; }
-.ui-icon-locked { background-position: -192px -96px; }
-.ui-icon-unlocked { background-position: -208px -96px; }
-.ui-icon-bookmark { background-position: -224px -96px; }
-.ui-icon-tag { background-position: -240px -96px; }
-.ui-icon-home { background-position: 0 -112px; }
-.ui-icon-flag { background-position: -16px -112px; }
-.ui-icon-calendar { background-position: -32px -112px; }
-.ui-icon-cart { background-position: -48px -112px; }
-.ui-icon-pencil { background-position: -64px -112px; }
-.ui-icon-clock { background-position: -80px -112px; }
-.ui-icon-disk { background-position: -96px -112px; }
-.ui-icon-calculator { background-position: -112px -112px; }
-.ui-icon-zoomin { background-position: -128px -112px; }
-.ui-icon-zoomout { background-position: -144px -112px; }
-.ui-icon-search { background-position: -160px -112px; }
-.ui-icon-wrench { background-position: -176px -112px; }
-.ui-icon-gear { background-position: -192px -112px; }
-.ui-icon-heart { background-position: -208px -112px; }
-.ui-icon-star { background-position: -224px -112px; }
-.ui-icon-link { background-position: -240px -112px; }
-.ui-icon-cancel { background-position: 0 -128px; }
-.ui-icon-plus { background-position: -16px -128px; }
-.ui-icon-plusthick { background-position: -32px -128px; }
-.ui-icon-minus { background-position: -48px -128px; }
-.ui-icon-minusthick { background-position: -64px -128px; }
-.ui-icon-close { background-position: -80px -128px; }
-.ui-icon-closethick { background-position: -96px -128px; }
-.ui-icon-key { background-position: -112px -128px; }
-.ui-icon-lightbulb { background-position: -128px -128px; }
-.ui-icon-scissors { background-position: -144px -128px; }
-.ui-icon-clipboard { background-position: -160px -128px; }
-.ui-icon-copy { background-position: -176px -128px; }
-.ui-icon-contact { background-position: -192px -128px; }
-.ui-icon-image { background-position: -208px -128px; }
-.ui-icon-video { background-position: -224px -128px; }
-.ui-icon-script { background-position: -240px -128px; }
-.ui-icon-alert { background-position: 0 -144px; }
-.ui-icon-info { background-position: -16px -144px; }
-.ui-icon-notice { background-position: -32px -144px; }
-.ui-icon-help { background-position: -48px -144px; }
-.ui-icon-check { background-position: -64px -144px; }
-.ui-icon-bullet { background-position: -80px -144px; }
-.ui-icon-radio-off { background-position: -96px -144px; }
-.ui-icon-radio-on { background-position: -112px -144px; }
-.ui-icon-pin-w { background-position: -128px -144px; }
-.ui-icon-pin-s { background-position: -144px -144px; }
-.ui-icon-play { background-position: 0 -160px; }
-.ui-icon-pause { background-position: -16px -160px; }
-.ui-icon-seek-next { background-position: -32px -160px; }
-.ui-icon-seek-prev { background-position: -48px -160px; }
-.ui-icon-seek-end { background-position: -64px -160px; }
-.ui-icon-seek-start { background-position: -80px -160px; }
-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
-.ui-icon-seek-first { background-position: -80px -160px; }
-.ui-icon-stop { background-position: -96px -160px; }
-.ui-icon-eject { background-position: -112px -160px; }
-.ui-icon-volume-off { background-position: -128px -160px; }
-.ui-icon-volume-on { background-position: -144px -160px; }
-.ui-icon-power { background-position: 0 -176px; }
-.ui-icon-signal-diag { background-position: -16px -176px; }
-.ui-icon-signal { background-position: -32px -176px; }
-.ui-icon-battery-0 { background-position: -48px -176px; }
-.ui-icon-battery-1 { background-position: -64px -176px; }
-.ui-icon-battery-2 { background-position: -80px -176px; }
-.ui-icon-battery-3 { background-position: -96px -176px; }
-.ui-icon-circle-plus { background-position: 0 -192px; }
-.ui-icon-circle-minus { background-position: -16px -192px; }
-.ui-icon-circle-close { background-position: -32px -192px; }
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
-.ui-icon-circle-check { background-position: -208px -192px; }
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; }
-.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; }
-.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
-.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
-
-/* Overlays */
-.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); }
-.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -khtml-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/*
- * jQuery UI Resizable 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Resizable#theming
- */
-.ui-resizable { position: relative;}
-.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; }
-.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
-.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
-.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
-.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
-.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
-.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
-.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
-.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
-.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
- * jQuery UI Selectable 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Selectable#theming
- */
-.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
-/*
- * jQuery UI Autocomplete 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Autocomplete#theming
- */
-.ui-autocomplete { position: absolute; cursor: default; }	
-
-/* workarounds */
-* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
-
-/*
- * jQuery UI Menu 1.8.16
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Menu#theming
- */
-.ui-menu {
-	list-style:none;
-	padding: 2px;
-	margin: 0;
-	display:block;
-	float: left;
-}
-.ui-menu .ui-menu {
-	margin-top: -3px;
-}
-.ui-menu .ui-menu-item {
-	margin:0;
-	padding: 0;
-	zoom: 1;
-	float: left;
-	clear: left;
-	width: 100%;
-}
-.ui-menu .ui-menu-item a {
-	text-decoration:none;
-	display:block;
-	padding:.2em .4em;
-	line-height:1.5;
-	zoom:1;
-}
-.ui-menu .ui-menu-item a.ui-state-hover,
-.ui-menu .ui-menu-item a.ui-state-active {
-	font-weight: normal;
-	margin: -1px;
-}
-/*
- * jQuery UI Slider 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Slider#theming
- */
-.ui-slider { position: relative; text-align: left; }
-.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
-.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
-
-.ui-slider-horizontal { height: .8em; }
-.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
-.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
-.ui-slider-horizontal .ui-slider-range-min { left: 0; }
-.ui-slider-horizontal .ui-slider-range-max { right: 0; }
-
-.ui-slider-vertical { width: .8em; height: 100px; }
-.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
-.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
-.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
-.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
- * jQuery UI Progressbar 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Progressbar#theming
- */
-.ui-progressbar { height:2em; text-align: left; }
-.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
\ No newline at end of file
Binary file web/hdalab/static/hdalab/img/bgdfooter.png has changed
Binary file web/hdalab/static/hdalab/img/bgdhdalab.png has changed
Binary file web/hdalab/static/hdalab/img/bgmap.png has changed
Binary file web/hdalab/static/hdalab/img/categories-thumb.jpg has changed
Binary file web/hdalab/static/hdalab/img/facettes-thumb.jpg has changed
Binary file web/hdalab/static/hdalab/img/favicon.ico has changed
Binary file web/hdalab/static/hdalab/img/flag_de.png has changed
Binary file web/hdalab/static/hdalab/img/flag_en.png has changed
Binary file web/hdalab/static/hdalab/img/flag_es.png has changed
Binary file web/hdalab/static/hdalab/img/flag_fr.png has changed
Binary file web/hdalab/static/hdalab/img/flag_it.png has changed
Binary file web/hdalab/static/hdalab/img/flag_ja.png has changed
Binary file web/hdalab/static/hdalab/img/flag_zh-tw.png has changed
Binary file web/hdalab/static/hdalab/img/loader.gif has changed
Binary file web/hdalab/static/hdalab/img/logo_iri.png has changed
Binary file web/hdalab/static/hdalab/img/logo_iri_blanc.png has changed
Binary file web/hdalab/static/hdalab/img/logo_mcc.png has changed
Binary file web/hdalab/static/hdalab/img/logo_mcc_blanc.png has changed
Binary file web/hdalab/static/hdalab/img/small-loader.gif has changed
Binary file web/hdalab/static/hdalab/img/thesaurus-thumb.jpg has changed
--- a/web/hdalab/static/hdalab/js/cattree.js	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-function showData(_label, _data) {
-    $(".disciplist li").each(function() {
-        if ($(this).text().trim().toLowerCase() === _label.toLowerCase()) {
-            $(this).addClass("selected");
-        }
-    })
-    $(".label-name").html(_label);
-    if (_data) {
-        renderData($("#tree"), _data, 1);
-        $(".results").show();
-        $(".content-count").html($(".cattree a.content").length);
-        $(".category-count").html(Math.max(0, $("p.category").length - 1));
-        $(".tag-count").html($("p.tag").length);
-    } else {
-        $("#tree").html("");
-        $(".results").hide();
-    }
-}
-
-function gettree(_label) {
-    $(".disciplist li").removeClass("selected");
-    $("#tree").html('<div class="loading"></div>');
-    $.getJSON(
-        endpoints.cat_tree,
-        { label: _label },
-        function(_data) {
-            showData(_label, _data);
-        }
-    );
-}
-
-$(function() {
-    $("#catsearch").autocomplete({
-        source: endpoints.cat_search,
-        minLength: 2,
-        select: function( event, ui ) {
-            gettree(ui.item.value);
-        }
-    })
-    .data("autocomplete")._renderItem = function(ul, item) {
-        return $( "<li></li>" )
-            .data( "item.autocomplete", item )
-            .append(
-                "<a>"
-                + item.label.replace(
-                    new RegExp('('
-                        + $("#catsearch").val().replace(/(\W)/g, '\\$1')
-                        + ')','gi') ,
-                    '<strong>$1</strong>')
-                + "</a>" )
-            .appendTo( ul )
-    };
-    $("#catform").submit(function() {
-        gettree($("#catsearch").val());
-    });
-    gettree("cinéma");
-    $(".disciplist li").click(function() {
-        gettree($(this).text().trim());
-    });
-});
\ No newline at end of file
--- a/web/hdalab/static/hdalab/js/gomina.js	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,905 +0,0 @@
-/**
- * @author raph
- */
-
-str_format = function() {
-	var s = arguments[0];
-	for (var i = 0; i < arguments.length - 1; i++) {       
-		var reg = new RegExp("\\{" + i + "\\}", "gm");             
-		s = s.replace(reg, arguments[i + 1]);
-	}
-	
-	return s;
-}
-
-var gomNs = {
-    minYear: -5000,
-    maxYear: 2010,
-    tlPixels: 960,
-    tlGamma: 6,
-    heatGamma: 2,
-    displayedDates: [ -5000, 0, 500, 1000, 1200, 1400, 1600, 1700, 1750, 1800, 1850, 1900, 1950, 2010 ],
-    mappingLibrary: 'leaflet',
-    gradientStart: [ 255, 255, 240 ],
-    gradientEnd: [ 255, 160, 30 ],
-    zeroColor: [ 230, 230, 235 ],
-    languageCode: 'fr'
-}
-
-function yearToPx(year) {
-    return gomNs.tlPixels * Math.pow( ( year - gomNs.minYear ) / ( gomNs.maxYear - gomNs.minYear ), gomNs.tlGamma );
-}
-
-function pxToYear(px) {
-    return gomNs.minYear + ( gomNs.maxYear - gomNs.minYear ) * Math.pow( px / gomNs.tlPixels, 1 / gomNs.tlGamma );
-}
-
-function getGradient(_pos) {
-    if (_pos == 0) {
-        var _rgb = gomNs.zeroColor;
-    } else {
-        var _rgb = [],
-            _exp = Math.pow(_pos, 1/gomNs.heatGamma);
-        for (var i=0; i<3; i++) {
-            _rgb.push(Math.floor(_exp*gomNs.gradientEnd[i] + (1-_exp)*gomNs.gradientStart[i]));
-        }
-    }
-    return "rgb(" + _rgb.join(",") + ")"
-}
-
-function polygon_to_gmap(polycoords, dbpedia_uri) {
-    var _opts =  {
-        strokeColor: "#000000",
-        strokeWeight: .5,
-        fillColor: "rgb(" + gomNs.zeroColor.join(",") + ")",
-        fillOpacity: 1
-    }
-    _opts.paths = polycoords.map(function(path) {
-        return path.map(function(coord) {
-            return new google.maps.LatLng(coord[1], coord[0]);
-        });
-    });
-    var _polygon = new google.maps.Polygon(_opts);
-    _polygon.setMap(gomNs.map);
-    google.maps.event.addListener(_polygon, 'click', function(a,b) {
-        addFilter('country', dbpedia_uri);
-    })
-    return _polygon;
-}
-
-function showCountriesGmap(geoJson) {
-    gomNs.countries = {};
-    _(geoJson.features).each(function(feature) {
-        var _el = { "properties" : feature.properties };
-        if (feature.id == 'ATA') {
-            _el.gPolygons = [];
-        } else {
-            switch(feature.geometry.type) {
-                case('Polygon'):
-                    _el.gPolygons = [ polygon_to_gmap(feature.geometry.coordinates, feature.properties.dbpedia_uri) ];
-                break;
-                case('MultiPolygon'):
-                    _el.gPolygons = feature.geometry.coordinates.map(function(polygon) {
-                        return polygon_to_gmap(polygon, feature.properties.dbpedia_uri);
-                    })
-                break;
-            }
-        }
-        gomNs.countries[feature.properties.dbpedia_uri] = _el;
-    });
-}
-
-function showCountriesLeaflet(geoJson) {
-    gomNs.countries = {};
-    var gJ = new L.GeoJSON();
-    gJ.on('featureparse', function(_f) {
-        var isocode = _f.id;
-        _f.layer.setStyle({
-            color: "#000000",
-            weight: .5,
-            fillOpacity: 1,
-            fillColor: "rgb(" + gomNs.zeroColor.join(",") + ")"
-        });
-        _f.layer.on('click', function() {
-            addFilter('country', _f.properties.dbpedia_uri);
-        });
-        gomNs.countries[_f.properties.dbpedia_uri] = {
-            "properties" : _f.properties,
-            "layer" : _f.layer
-        }
-    });
-    gJ.addGeoJSON(geoJson);
-    gomNs.map.addLayer(gJ);
-}
-
-function addFilter(_type, _label) {
-    var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
-    if (_curView.type == 'filter') {
-    	if (_curView[_type].indexOf(_label) < 0) {
-        	_curView[_type].push(_label);
-    	}
-        updateFilters();
-        debouncedSaveChanges();
-    }
-}
-
-function removeFilter(_type, _index) {
-    var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
-    if (_curView.type == 'filter') {
-        _curView[_type].splice(_index,1);
-        updateFilters();
-        debouncedSaveChanges();
-    }
-}
-
-function getUpdates() {
-    var _params = {},
-        _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
-    if (_curView.type == 'filter') {
-        if (!(_curView.period[0] == gomNs.minYear && _curView.period[1] == gomNs.maxYear)) {
-            _params.period = _curView.period.join(',');
-        }
-        if (_curView.tag.length) {
-            _params.label = _curView.tag.join(',');
-        }
-        if (_curView.country.length) {
-            _params.country = _curView.country.join(',');
-        }
-        $.getJSON(gomNs.urls['filter'], _params, updateDisplay);
-        animLoad();
-    }
-}
-
-var debouncedGetUpdates = _.debounce(getUpdates, 300);
-
-function updatePeriod(_n, _val) {
-    var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
-    if (_curView.type == 'filter') {
-        var _int = parseInt(_val);
-        if (_int != NaN) {
-            if ((_n == 1 && _val >= _curView.period[0]) || (_n == 0 && _val <= _curView.period[1])) {
-                _curView.period[_n] = _int;
-            }
-            updateFilters();
-            debouncedSaveChanges();
-        }
-    }
-}
-
-function removePeriod() {
-    var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
-    if (_curView.type == 'filter') {
-        _curView.period[0] = gomNs.minYear;
-        _curView.period[1] = gomNs.maxYear;
-        updateFilters();
-        debouncedSaveChanges();
-    }
-}
-
-function changeSpan(_this) {
-    var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
-    if (_curView.type == 'filter') {
-        if (!$(_this).children().length) {
-            var _el = document.createElement('input'),
-                _n = _this.id.split('_')[1];
-            _el.value = _curView.period[_n];
-            _el.style.width = $(_this).width() + 'px';
-            $(_el).focusout(function() {
-                updatePeriod(_n, this.value);
-            }).keypress(function(e) {
-                if (e.keyCode == 13) {
-                    updatePeriod(_n, this.value);
-                }
-            });
-            $(_this).html(_el);
-            _el.focus();
-            _el.select();
-        }
-    }
-}
-
-function updateFilters() {
-    var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
-    if (_curView.type != 'filter') {
-        return;
-    }
-    var _htmFilters = '',
-        _fl = _curView.tag.length,
-        _cl = _curView.country.length;
-    if (_curView.period[0] == gomNs.minYear && _curView.period[1] == gomNs.maxYear) {
-        _htmFilters += '<li class="filperiod">'+gettext("Toutes periodes")+'</li>';
-    } else {
-        _htmFilters += '<li class="filperiod">'+gettext("Periode&nbsp;:")+' <span class="spyr" id="sp_0" onclick="changeSpan(this);">'
-            + _curView.period[0]
-            + '</span> ' + gettext('a')+' <span class="spyr" id="sp_1" onclick="changeSpan(this);">'
-            + _curView.period[1]
-            + '</span><a href="#" class="remfil" onclick="removePeriod(); return false;">[x]</a></li>';
-    }
-    $("#handle_0").css({
-        "left" : yearToPx(_curView.period[0])+"px",
-    }).attr("year", _curView.period[0])
-    .find(".handleinner")
-    .css({
-        "margin-left" : "-20px"
-    });
-    $("#handle_1").css({
-        "left" : yearToPx(_curView.period[1])+"px",
-    }).attr("year", _curView.period[1])
-    .find(".handleinner")
-    .css({
-        "margin-left" : "0"
-    });
-    if (_cl) {
-        _htmFilters += _(_curView.country).map(function(_t, _i) {
-            return '<li class="filcountry">'+gettext('Pays&nbsp;:')+' '
-                + ( (typeof gomNs.countries == "object" && typeof gomNs.countries[_t] == "object") ? gomNs.countries[_t].properties.labels[gomNs.languageCode] : decodeURIComponent(_t.match('[^/]+$')[0]).replace('_',' '))
-                + '<a href="#" class="remfil" onclick="removeFilter(\'country\','
-                + _i
-                + '); return false;">[x]</a></li>'; 
-        }).join("");
-    }
-    if (_fl) {
-        _htmFilters += _(_curView.tag).map(function(_t, _i) {
-            return '<li class="filtag">'+gettext('Tag&nbsp;:')+' '
-                + '<span class="filtag_label">'+_t+'</span>'
-                + '<a href="#" class="remfil" onclick="removeFilter(\'tag\','
-                + _i
-                + '); return false;">[x]</a></li>'; 
-        }).join("");
-    }
-    $("#filters").html(_htmFilters).hide();
-    debouncedGetUpdates();
-}
-
-function displayContents(contentdata) {
-    if (contentdata && contentdata.length) {
-        var _htmlCl = '<ul id="contentlist">'
-            + contentdata.map(function(_d) {
-                var _dsurl = gomNs.urls.datasheet.replace(/ID$/,_d.hda_id);
-                var _html = '<li class="content-item"><h3><a href="'
-                    + _dsurl
-                    + '">'
-                    + _d.title
-                    + '</a></h3>'
-                    + ( typeof _d.coords == "object" ?
-                        '<div class="maplet"><img src="http://maps.googleapis.com/maps/api/staticmap?center=47,1.5&zoom=4&size=160x160&maptype=roadmap&markers=color:red%7C'
-                        + _d.coords.latitude
-                        + ','
-                        + _d.coords.longitude
-                        + '&sensor=false" /><h4>'
-                        + gettext('Localisation&nbsp;:')
-                        + ' '
-                        + _d.coords.city_name
-                        + '</h4></div>'
-                        : '')
-                    + '<h4><a href="'
-                    + _d.url
-                    + '" target="_blank">'
-                    + _d.url.replace(/(^.{40}).+(.{30}$)/m,'$1 &hellip; $2')
-                    + '</a></h4><p><a href="'
-                    + _dsurl
-                    + '">'
-                    + _d.description.replace(/(^.{0,160})([\s]|$)(.*)/,'$1&hellip;')
-                    + '</a></p><ul class="content-tags">'
-                    + _d.tags.map(function(_t) {
-                        return '<li class="content-tag-item"><a href="#" onclick="addFilter(\'tag\', this.getAttribute(\'original-label\')); return false;" original-label="'
-                            + _t.label
-                            + '"'
-                            + (_t.match ? ' class="tagmatch"' : '')
-                            + '>'
-                            + _t.translated_label
-                            + '</a></li>';
-                    }).join('')
-                    + '</ul><h4>'+gettext("Annotations")+'</h4><div class="content-annotation" contentid="'
-                    + _d.id
-                    + '">'
-                    + ( gomNs.sessiondata.annotations[_d.id] && gomNs.sessiondata.annotations[_d.id].texte
-                        ? '<ul><li>'
-                            + _.escape(gomNs.sessiondata.annotations[_d.id].texte).replace(/\n/gm,"</li><li>")
-                            + '</li>'
-                        : ( gomNs.write_allowed ? '<ul><li>'+gettext("Annoter ce contenu")+'...</li></ul>' : '' ) )
-                    + '</div>';
-                if (gomNs.write_allowed) {
-                    _(gomNs.sessiondata.views).each(function(_view, _k) {
-                        if (_view.type == 'list') {
-                            _html += '<p><a href="#" class="addremlist" contentid="'
-                                + _d.id
-                                + '" viewid="'
-                                + _k
-                                + '">'
-                                + str_format(( _view.list.indexOf(_d.id) == -1 ? gettext('Ajouter a {0}') : gettext('Retirer de {0}') ),'"'+ _.escape(_view.name)+ '"')
-                                + '</a></p>'
-                        }
-                    });
-                }
-                _html += '</li>';
-                return _html;
-            }).join('')
-            + '</ul>';
-        $("#contents").html(_htmlCl).scrollTop(0);
-        $("a.addremlist").click(function() {
-            var _id = $(this).attr("contentid"),
-                _vid = 
-                _view = gomNs.sessiondata.views[$(this).attr("viewid")],
-                _io = _view.list.indexOf(_id);
-            if ( _io == -1) {
-                _view.list.push(_id);
-                $(this).html(str_format(gettext('Retirer de {0}'),'"' + _.escape(_view.name) + '"' ));
-            } else {
-                _view.list.splice(_io, 1);
-                $(this).html(str_format(gettext('Ajouter a {0}'),'"' + _.escape(_view.name) + '"'));
-            }
-            if (gomNs.sessiondata.view == 1) {
-                showView();
-            }
-            debouncedSaveChanges();
-            return false;
-        })
-        if (gomNs.write_allowed) {
-            $("div.content-annotation").click(function() {
-                if (this.children[0].tagName == 'UL') {
-                    var _el = document.createElement('textarea'),
-                        _id = $(this).attr("contentid");
-                    _el.innerHTML = (gomNs.sessiondata.annotations[_id] && gomNs.sessiondata.annotations[_id].texte) ? gomNs.sessiondata.annotations[_id].texte : '';
-                    $(_el).focusout(function() {
-                        var _id = this.parentNode.attributes.contentid.nodeValue;
-                        if (!gomNs.sessiondata.annotations[_id]) {
-                            gomNs.sessiondata.annotations[_id] = {};
-                        }
-                        gomNs.sessiondata.annotations[_id].texte = this.value;
-                        this.parentNode.innerHTML = '<ul><li>' + (this.value.length ? _.escape(gomNs.sessiondata.annotations[_id].texte).replace(/\n/gm,"</li><li>") : gettext('Annoter ce contenu')+'...' ) + '</ul>';
-                        debouncedSaveChanges();
-                    });
-                    $(this).html(_el);
-                    _el.focus();
-                    _el.select();
-                }
-            });
-        }
-    }
-    else {
-        $("#contents").html("");
-    }
-}
-
-function updateDisplay(data) {
-    animStop();
-    
-    // translate filters
-    $('.filtag_label').each(function(index, elt) {
-    	txt = $(this).text();
-    	if(txt in data.tagtranslations) {
-    		$(this).text(data.tagtranslations[txt]);
-    	}
-    });
-    $("#filters").show();
-    
-    
-    if (gomNs.dhmPaper) {
-        gomNs.dhmPaper.clear();
-    } else {
-        gomNs.dhmPaper = new Raphael("dateheat");
-    }
-    $("#contentcount").html('<b>'+data.count+'</b> ' + ngettext('notice', 'notices', data.count));
-    if (!data.sparkline.length || data.sparkline[0].year != gomNs.minYear) {
-        data.sparkline.splice(0,0,{"year": gomNs.minYear, "score": 0});
-    }
-    var _maxheat = _(data.sparkline).max(function(_d) { return parseInt(_d.score); }).score;
-    _(data.sparkline).each(function(_d, _i) {
-        var _nxt = (_i == data.sparkline.length - 1) ? (gomNs.maxYear + 1) : data.sparkline[_i + 1].year,
-            _x1 = yearToPx(_d.year),
-            _x2 = yearToPx(_nxt),
-            _heat = _d.score / _maxheat;
-        gomNs.dhmPaper.rect(_x1, 0, _x2 - _x1, 20).attr({
-            "fill" : getGradient(_heat),
-            "stroke" : "none"
-        })
-    });
-    if (gomNs.sessiondata.view == 0) {
-        var _h0 = $("#handle_0").position().left,
-            _h1 = $("#handle_1").position().left;
-        gomNs.dhmPaper.rect(Math.min(_h0, _h1) - 1, 0, Math.abs(_h0 - _h1) + 2, 20).attr({
-            "stroke" : "#cc0066",
-            "stroke-width" : "3"
-        });
-    }
-    if (data.tags.length) {
-        var _scores = _(data.tags).map(function(_d) { return parseInt(_d.score)}),
-            _maxTag = _(_scores).max(),
-            _minTag = Math.min(_(_scores).min(), _maxTag - 1),
-            _scale = 10 / Math.sqrt(_maxTag - _minTag),
-            _htmlTc = '<ul id="tclist">'
-            + _(data.tags).map(function(_d) {
-                return '<li style="font-size:'
-                    + parseInt(10 + _scale * Math.sqrt(_d.score - _minTag))
-                    + 'px;"><a href="#" onclick="addFilter(\'tag\', this.getAttribute(\'original-label\')); return false;" original-label="'
-                    + _d.label
-                    +'"'
-                    + (_d.match ? ' class="tagmatch"' : '')
-                    + '>'
-                    + _d.translated_label
-                    + '</a></li>';
-            }).join('')
-            + '</ul>';
-        $("#tagcloud").html(_htmlTc);
-    }
-    else {
-        $("#tagcloud").html("<h4>Pas de mots-clés trouvés</h4>");
-    }
-    displayContents(data.contents);
-    if (gomNs.countries && data.countries) {
-        var _max = Math.max(1, _(data.countries).max());
-        _(gomNs.countries).each(function(_country, _k) {
-            var _val = data.countries[_k] || 0,
-                _fill = getGradient(_val/_max);
-            switch(gomNs.mappingLibrary) {
-                case 'gmaps':
-                    _(_country.gPolygons).each(function(_p) {
-                        _p.setOptions({
-                            "fillColor" : _fill,
-                            "fillOpacity" : 1
-                        });
-                    });
-                break;
-                case 'leaflet':
-                    _country.layer.setStyle({
-                        "fillColor" : _fill,
-                        "fillOpacity" : 1
-                    })
-                break;
-            }
-        });
-    }
-    if (data.disciplines) {
-        var _disc = data.disciplines.filter(function(_d) {
-                return +_d.score > 0;
-            }),
-            _max = _disc.reduce(function(_a, _b) {
-                return Math.max(_a,_b.score)
-            }, 1);
-        $("#disciplines").html(
-            '<ul class="disc-ul">'
-            + _disc.map(function(_d) {
-                var _col = getGradient(_d.score / _max);
-                return '<li class="disc-li" onclick="addFilter(\'tag\', this.getAttribute(\'original-label\')); return false;" original-label="'
-                    + _d.label
-                    + '"><div class="disc-label"><a href="#">'
-                    + _d.translated_label
-                    + '</a></div><div class="disc-bar" style="background:'
-                    + _col
-                    + '; width:'
-                    + Math.floor(120 * (_d.score / _max))
-                    + 'px">'
-            }).join("")
-            + '</ul>'
-        )
-        
-    }
-}
-
-function saveChanges() {
-    if (gomNs.sessionid && gomNs.sessionkey) {
-        $.getJSON(gomNs.urls['session_info'], {
-            "sessionid" : gomNs.sessionid,
-            "sessionkey" : gomNs.sessionkey,
-            "data" : JSON.stringify(gomNs.sessiondata),
-        });
-    }
-}
-
-var debouncedSaveChanges = _.debounce(saveChanges, 3000);
-
-function changeView(nview) {
-    var _curView = gomNs.sessiondata.views[nview];
-    if (_curView.type == 'list' && (!_curView.list || !_curView.list.length)) {
-        alert(gettext("La liste de contenus est vide ! Ajoutez des contenus pour afficher la liste !"));
-    } else {
-        gomNs.sessiondata.view = nview;
-        debouncedSaveChanges();
-        showView();
-    }
-}
-
-function showView() {
-    $(".lienvue").removeClass("actif");
-    $("#view_" + gomNs.sessiondata.view).addClass("actif");
-    var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
-    $("#titrevue").val(_curView.name);
-    $("#bloc_gestvue h2").html(gettext('Gerer la vue')+' "' + _.escape(_curView.name) + '"');
-    $("div.bloc").show();
-    $("#widgetlist input").prop("checked",true);
-    _(_curView.hiddenWidgets).each(function(_w) {
-        $("#chbx_" + _w).prop("checked",false);
-        $("#" + _w).hide();
-    });
-    $("#notes").html( _curView.notes
-        ? '<ul><li>' + _.escape(_curView.notes).replace(/\n/gm,"</li><li>") + '</li></ul>'
-        : ( gomNs.write_allowed ? '<ul><li>'+gettext('Annoter cette vue')+'...</li></ul>' : '' ) );
-    switch(_curView.type) {
-        case 'list':
-            $("#bandefiltre, .handle").hide();
-            $.getJSON(gomNs.urls['filter'], {
-                contentlist: _curView.list.join(',')
-            }, updateDisplay);
-            animLoad();
-            break;
-        case 'filter':
-            $("#bandefiltre, .handle").show();
-            updateFilters();
-            break;
-    }
-}
-
-function displayViewList() {
-    $("#ongletsvues").html(gomNs.sessiondata.views.map(function(_v, _k) {
-            return '<li class="lienvue" id="view_'
-                + _k
-                + '" onclick="changeView('
-                + _k
-                + '); return false;"><a href="#">'
-                + _.escape(_v.name)
-                + '</a></li>';
-        }).join(""))
-}
-
-function getInitialView() {
-    var _urlParam = {};
-    if (document.location.hash) {
-        var _tab = document.location.hash.replace("#","").split(":");
-        _urlParam.sessionid = _tab[0];
-        if (_tab.length > 1) {
-            _urlParam.sessionkey = _tab[1];
-        }
-    }
-    $.getJSON(gomNs.urls['session_info'], _urlParam, function(data) {
-        gomNs.sessionid = data.sessionid;
-        if (data.sessionkey) {
-            gomNs.sessionkey = data.sessionkey;
-        }
-        gomNs.write_allowed = data.write_allowed;
-        if (data.write_allowed) {
-            $("#partagerw").show();
-        } else {
-            $("#partagerw").hide();
-        }
-        var _baseUrl = document.location.href.split("#")[0];
-        gomNs.hash = "#" + data.sessionid + (data.sessionkey ? (':' + data.sessionkey) : '');
-        document.location.hash = gomNs.hash;
-        gomNs.sessiondata = typeof data.data == "string" ? JSON.parse(data.data) : (typeof data.data == "object" ? data.data : {});
-        if (!gomNs.sessiondata.title) {
-            gomNs.sessiondata.title = gettext('Nouvelle session');
-        }
-        if (!gomNs.sessiondata.views) {
-            gomNs.sessiondata.views = [];
-        }
-        if (!gomNs.sessiondata.views.length) {
-            addView( 'filter', gettext('Mes resultats de recherche') );
-            addView( 'list', gettext('Ma liste') );
-        }
-        if (!gomNs.sessiondata.annotations) {
-            gomNs.sessiondata.annotations = {};
-        }
-        if (data.write_allowed) {
-            $("#bloc_gestvue").show();
-        } else {
-            $("#bloc_gestvue").hide();
-        }
-        $("#sessionname").html(_.escape(gomNs.sessiondata.title)
-            + ( data.write_allowed ? '' : '<span class="lectseul"> ('+gettext("lecture seule")+')</span>' ) );
-        gomNs.hrefinterval = setInterval(function() {
-            if (document.location.hash != gomNs.hash) {
-                clearInterval(gomNs.hrefinterval);
-                getInitialView();
-            }
-        }, 500);
-        displayViewList();
-        showView();
-    });
-}
-
-function changeSessionTitle(title) {
-    gomNs.sessiondata.title = title;
-    $("#sessionname").html(_.escape(gomNs.sessiondata.title));
-    debouncedSaveChanges();
-}
-
-function addView(viewtype, viewname) {
-    var _content = {
-        type: viewtype,
-        name: viewname,
-        hiddenWidgets: [],
-    };
-    switch(viewtype) {
-        case 'filter':
-            _content.period = [ gomNs.minYear, gomNs.maxYear ];
-            _content.tag = [];
-            _content.country = [];
-            gomNs.sessiondata.view = gomNs.sessiondata.views.length;
-            break;
-        case 'list':
-            _content.list = [];
-            break;
-    }
-    gomNs.sessiondata.views.push(_content);
-    debouncedSaveChanges();
-}
-
-function animLoad() {
-    //console.log("animLoad");
-    var _d = $("#waiting"),
-        _w = _d.width(),
-        _h = _d.height(),
-        _r = .33*Math.min(_w,_h),
-        _count = 24,
-        _html = '',
-        _f = 2* Math.PI / _count;
-    _d.empty().show();
-    for (var _i = 0; _i < _count; _i++) {
-        var _x = Math.floor(Math.sin(_i * _f)*_r + _w/2),
-            _y = Math.floor(-Math.cos(_i * _f)*_r + _h/2),
-            _el = document.createElement('div');
-        _el.className = 'waittick';
-        _d.append(_el);
-        $(_el).css({
-            "left": _x + "px",
-            "top": _y + "px"
-        }).delay(200*_i).fadeIn(400).delay(600 + 200* _i).fadeOut();
-    }
-}
-
-function animStop() {
-    $("#waiting").empty().fadeOut();
-}
-function ellipse(_text, _length) {
-    var _rgxp = new RegExp('(^.{0,' + _length + '})([\s]|$)(.*)')
-    return _text.replace(/(\n|\r|\r\n)/mg,' ').trim().replace(_rgxp,'$1…')
-}
-
-function highlightText(_text, _search) {
-    var _rgxp = new RegExp('(' + _search.replace(/(\W)/g, '\\$1') + ')','gi');
-    return _text.replace(_rgxp, '<strong>$1</strong>');
-}
-
-function wikipediaUrl(_text) {
-    return "http://" + gomNs.languageCode + ".wikipedia.org/wiki/" + encodeURI(_text.replace(/ /g,'_'))
-}
-
-wpTemplate = _.template(
-    '<h4 class="wptitle"><% print(highlightText(item.label, inputvalue)); %></h4><% if (item.thumbnail) { %><img class="wpimg" src="<%-item.thumbnail%>" /><% };'
-    + ' if (item.abstract) { %><p class="wpabstract"><% print(ellipse(item.abstract,250))%></p><p class="wpsource"><a href="<% print(wikipediaUrl(item.label)) %>" target="_blank"><% print(gettext("Source&nbsp;: Wikipédia")) %></a></p><% }; %><div class="clear"></div>'
-);
-
-acTemplate = _.template(
-    '<a><span class="acnb"><%- item.nb %></span><h4 class="actitle"><% print(highlightText(item.label, inputvalue)); %></h4></a>'
-);
-
-$(document).ready(function() {
-    switch(gomNs.mappingLibrary) {
-        case 'gmaps':
-            gomNs.map = new google.maps.Map(document.getElementById("map"),
-                {
-                    center: new google.maps.LatLng(30, 0),
-                    zoom: 1,
-                    mapTypeId: google.maps.MapTypeId.SATELLITE
-                });
-            $.getJSON(gomNs.urls['countries'], showCountriesGmap);
-            break;
-        case 'leaflet':
-            gomNs.map = new L.Map('map', {
-                center: new L.LatLng(30, 0),
-                zoom: 1
-            });
-            //gomNs.map.addLayer(new L.TileLayer("http://s3.amazonaws.com/com.modestmaps.bluemarble/{z}-r{y}-c{x}.jpg", {maxZoom: 9}));
-            $.getJSON(gomNs.urls['countries'], showCountriesLeaflet);
-            break;
-    }
-    var _html = gomNs.displayedDates.map(function(_v) {
-        return '<li style="left: '
-            + parseInt(yearToPx(_v))
-            + 'px"><div class="datelabel">'
-            + _v
-            + '</div></li>'
-    }).join('');
-    $("#dates").html(_html);
-    $("#apartager").click(function() {
-        var _pu = $("#partageurls");
-        if (_pu.is(":visible")) {
-            $(this).removeClass("actif");
-        } else {
-            $(this).addClass("actif");
-            $("#partagero").addClass("actif");
-            $("#partagerw").removeClass("actif");
-            var _url = document.location.href.split("#")[0] + "#" + gomNs.sessionid;
-            $("#zc-partageinput").val( _url.replace(/^(.{30}).{3,1000}(.{20})$/,'$1 … $2') );
-        }
-        $(this).attr("class",_pu.is(":visible") ? "" : "actif");
-        _pu.slideToggle(function() {
-            if ($(this).is(":visible")) {
-                if (typeof gomNs.clip == "undefined") {
-                    gomNs.clip = new ZeroClipboard.Client();
-                    gomNs.clip.setHandCursor( true );
-                    gomNs.clip.glue('zc-partageinput');
-                }
-                gomNs.clip.show();
-                gomNs.clip.setText( _url );
-            } else {
-                gomNs.clip.hide();
-            }
-        });
-        return false;
-    })
-    $("#partagero").click(function() {
-        $("#partagero").addClass("actif");
-        $("#partagerw").removeClass("actif");
-        var _url = document.location.href.split("#")[0] + "#" + gomNs.sessionid;
-        $("#zc-partageinput").val( _url.replace(/^(.{30}).{3,1000}(.{20})$/,'$1 … $2') );
-        gomNs.clip.setText( _url );
-        return false;
-    });
-    $("#partagerw").click(function() {
-        $("#partagerw").addClass("actif");
-        $("#partagero").removeClass("actif");
-        var _url = document.location.href.split("#")[0] + gomNs.hash;
-        $("#zc-partageinput").val( _url.replace(/^(.{30}).{3,1000}(.{20})$/,'$1 … $2') );
-        gomNs.clip.setText( _url );
-        return false;
-    });
-    $(".handle").draggable({
-        "axis" : "x",
-        "containment" : "parent",
-        "drag": function() {
-            $(this).attr("year",parseInt(pxToYear($(this).position().left)));
-            var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
-            if (_curView.type == 'filter') {
-                var _h0 = $("#handle_0"),
-                    _h1 = $("#handle_1"),
-                    _h0v = parseInt(_h0.attr("year")),
-                    _h1v = parseInt(_h1.attr("year"));
-                _curView.period = [ Math.min(_h0v, _h1v), Math.max(_h0v, _h1v)];
-                _h0.find(".handleinner").css({
-                    "margin-left" : (_h0v>_h1v ? "0" : "-20px")
-                })
-                _h1.find(".handleinner").css({
-                    "margin-left" : (_h1v>_h0v ? "0" : "-20px")
-                })
-                updateFilters();
-                debouncedSaveChanges();
-            }
-        }
-    });
-    $("#sessionname").click(function() {
-        if (gomNs.write_allowed && !$(this).children().length) {
-            var _el = document.createElement('input');
-            _el.value = gomNs.sessiondata.title;
-            $(_el).focusout(function() {
-                changeSessionTitle(this.value);
-            }).keypress(function(e) {
-                if (e.keyCode == 13) {
-                    changeSessionTitle(this.value);
-                }
-            });
-            $(this).html(_el);
-            _el.focus();
-            _el.select();
-        }
-    });
-    $("#titrevue").keyup(function() {
-        var _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
-        _curView.name = $(this).val();
-        $("#view_" + gomNs.sessiondata.view + " a").html(_.escape(_curView.name))
-        $("#bloc_gestvue h2").html(gettext('Gerer la vue')+' "' + _.escape(_curView.name) + '"');
-        debouncedSaveChanges();
-    });
-    $("#notes").click(function() {
-        if (gomNs.write_allowed) {
-            if (this.children[0].tagName == 'UL') {
-                var _el = document.createElement('textarea'),
-                    _curView = gomNs.sessiondata.views[gomNs.sessiondata.view];
-                _el.innerHTML = _curView.notes ? _curView.notes : '';
-                $(_el).focusout(function() {
-                    _curView.notes = this.value;
-                    this.parentNode.innerHTML = '<ul><li>' + (this.value.length ? _.escape(_curView.notes).replace(/\n/gm,"</li><li>") : gettext('Annoter cette vue')+'...' ) + '</ul>';
-                    debouncedSaveChanges();
-                });
-                $(this).html(_el);
-                _el.focus();
-                _el.select();
-            }
-        }
-    });
-/*    gomNs.disChart = d3.select("#disciplines")
-        .append("svg:svg")
-        .attr("width", 475)
-        .attr("height", 120); */
-    getInitialView();
-    $(".barrebloc").click(function() {
-        $(this).next().slideToggle(); 
-    });
-    gomNs.widgetList = [];
-    var _html = '<ul id="widgetlist">';
-    $("div.bloc").each(function() {
-       gomNs.widgetList.push(this.id);
-       _html += '<li><input type="checkbox" id="chbx_'
-        + this.id
-        + '" /><label>' + $(this).find("h2").html() + '</label></li>'
-    });
-    _html + '</ul>';
-    $("#gestvue").append(_html);
-    $("#nouvellevue").click(function() {
-        $("#plusdevues").slideToggle();
-        return false;
-    })
-    $("#widgetlist input").change(function() {
-        var _newWL = [];
-        $("#widgetlist input").each(function(_k, _e) {
-            var _id = _e.id.substr(5);
-            if (!$(_e).prop("checked")) {
-                $("#" + _id).hide();
-                _newWL.push(_id);
-            } else {
-                $("#" + _id).show();
-            }
-        });
-        gomNs.sessiondata.views[gomNs.sessiondata.view].hiddenWidgets = _newWL;
-        debouncedSaveChanges();
-    });
-    $("#nouv_resrech").click(function() {
-       var _txt = prompt(gettext("Comment souhaitez-vous nommer votre nouvelle vue ?"),gettext("Nouveaux resultats de recherche"));
-       if (_txt !== null) {
-           addView('filter', _txt); 
-           displayViewList();
-       }
-       return false;
-    });
-    $("#nouv_liste").click(function() {
-       var _txt = prompt(gettext("Comment souhaitez-vous nommer votre nouvelle vue ?"),gettext("Nouvelle liste"));
-       if (_txt !== null) {
-           addView('list', _txt);
-           displayViewList();
-       }
-       return false;
-    });
-        $(" #tagform ").submit(function() {
-        return false;
-    });
-    var cache = {}, /*CACHE => http://jqueryui.com/demos/autocomplete/#remote-with-cache */
-        lastXhr;
-    $( "#tagsearch" ).autocomplete({
-        source: function( request, response ) {
-            var term = request.term;
-            if ( term in cache ) {
-                $("#tagsearch").removeClass("waiting");
-                response( cache[ term ] );
-                return;
-            }
-            $("#tagsearch").addClass("waiting");
-            lastXhr = $.getJSON( gomNs.urls['tag_search'], request, function( data, status, xhr ) {
-                cache[ term ] = data;
-                if ( xhr === lastXhr ) {
-                    response( data );
-                    $("#tagsearch").removeClass("waiting");
-                }
-            });
-        },
-        minLength: ( gomNs.languageCode == 'ja' ? 1 : 2 ),
-        focus: function( event, ui ) {
-            $(".wpinfo").html(wpTemplate({
-                item: ui.item,
-                inputvalue: $("#tagsearch").val()
-            }));
-        },
-        select: function( event, ui ) {
-            addFilter('tag', ui.item.original_label);
-        }
-    })
-    .data("autocomplete")._renderItem = function(ul, item) {
-        var _contents = acTemplate({
-            item: item,
-            inputvalue: $("#tagsearch").val()
-        });
-        return $( "<li>" )
-            .data( "item.autocomplete", item )
-            .html( _contents )
-            .appendTo( ul );
-    };
-});
--- a/web/hdalab/static/hdalab/js/notice.js	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,99 +0,0 @@
-var selectedelement = null;
-
-function drawlinks() {
-    var w$ = $(window)
-        scroll = w$.scrollTop(),
-        windowheight = w$.height();
-    $(".tags-main, .main-datasheet").css({
-        "margin-top": Math.max(0, scroll - 60) + "px"
-    });
-    var cvheight = Math.max($(".tags-main").outerHeight(), $(".related-datasheets").outerHeight()),
-        cvwidth = $(".tag-container").width(),
-        cv$ = $(".tag-canvas"),
-        cvo = cv$.offset(),
-        colors = ["#1f77b4","#aec7e8","#ff7f0e","#ffbb78","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5","#8c564b","#c49c94","#e377c2","#f7b6d2","#7f7f7f","#c7c7c7","#bcbd22","#dbdb8d","#17becf","#9edae5"];
-    cv$.attr({
-        width: cvwidth,
-        height: cvheight
-    }).css({
-        width: cvwidth,
-        height: cvheight
-    });
-    
-    $(".main-datasheet-tag, .datasheet").css("opacity", selectedelement ? .7 : 1);
-    $(selectedelement).css("opacity",1);
-    
-    var ctx = cv$[0].getContext('2d'),
-        mds$ = $(".main-datasheet"),
-        ymain = Math.floor(mds$.height() / 2 + mds$.offset().top - cvo.top);
-    
-    $(".main-datasheet-tag").each(function() {
-        var tag$ = $(this),
-            ytag = Math.floor(tag$.offset().top + tag$.outerHeight() / 2 - cvo.top);
-        ctx.strokeStyle = "#999999";
-        ctx.lineWidth = (this === selectedelement ? 4 : 1);
-        ctx.beginPath();
-        ctx.moveTo(0, ymain);
-        ctx.bezierCurveTo(80,ymain, 40,ytag, 120, ytag);
-        ctx.lineTo(160, ytag);
-        ctx.stroke();
-        
-        var tagid = tag$.attr("data-tag-id"),
-            relds = $(".related-datasheet-tag[data-tag-id=" + tagid + "]").parent().parent();
-        
-        if (this === selectedelement) {
-            relds.css("opacity", 1);
-        }
-        
-        relds.each(function(i) {
-            var ds$ = $(this),
-                dst = ds$.offset().top,
-                dsh = ds$.outerHeight(),
-                visible = ds$.is(":visible") && (dst - scroll < windowheight) && (dst + dsh - scroll > 0);
-            if (visible) {
-                var yds = Math.floor(dst + dsh / 2 - cvo.top);
-                ctx.lineWidth = (this === selectedelement || tag$[0] === selectedelement ? 4 : 1);
-                ctx.strokeStyle = colors[ds$.index() % colors.length];
-                ctx.beginPath();
-                ctx.moveTo(160, ytag);
-                ctx.lineTo(200, ytag);
-                ctx.bezierCurveTo(280,ytag, 280,yds, 320, yds);
-                ctx.stroke();
-                if (this === selectedelement) {
-                    tag$.css("opacity",1);
-                }
-            }
-        })
-    });
-}
-
-$(function() {
-    $(window).scroll(drawlinks);
-    $(window).resize(drawlinks);
-    $(".main-datasheet-tag").click(function() {
-        var tag$ = $(this);
-        if (tag$.hasClass("selected")) {
-            $(".datasheet").show();
-            tag$.removeClass("selected");
-        } else {
-            $(".datasheet").hide();
-            var tagid = tag$.attr("data-tag-id");
-            $(".related-datasheet-tag[data-tag-id=" + tagid + "]").parent().parent().show();
-            $(".main-datasheet-tag").removeClass("selected");
-            tag$.addClass("selected");
-        }
-        drawlinks();
-    });
-    $(".main-datasheet-tag, .datasheet").mouseover(function() {
-        if (selectedelement !== this) {
-            selectedelement = this;
-            drawlinks();
-        }
-    }).mouseout(function() {
-        if (selectedelement) {
-            selectedelement = null;
-            drawlinks();
-        }
-    });
-    drawlinks();
-});
--- a/web/hdalab/static/hdalab/js/thesaurus.js	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,178 +0,0 @@
-var trees = [
-    {
-        title: "Thésaurus de l'Architecture et de l'Urbanisme : Secteur urbain",
-        tree: {
-            label: "secteur urbain",
-            contents: [
-                {
-                    label: "banlieue",
-                    contents: [
-                        {
-                            label: "faubourg"
-                        }
-                    ]
-                },
-                {
-                    label: "îlot"
-                },
-                {
-                    label: "quartier",
-                    contents: [
-                        {
-                            label: "centre-ville"
-                        }
-                    ]
-                },
-                {
-                    label: "secteur urbain concerté",
-                    contents: [
-                        {
-                            label: "grand ensemble"
-                        },
-                        {
-                            label: "lotissement",
-                            contents: [
-                                {
-                                    label: "lotissement concerté",
-                                    contents: [
-                                        {
-                                            label: "cité-jardin"
-                                        },
-                                        {
-                                            label: "cité ouvrière"
-                                        },
-                                        {
-                                            label: "courée"
-                                        },
-                                    ]
-                                }
-                            ]
-                        }
-                    ]
-                },
-            ]
-        }
-    },
-    {
-        title: "Thésaurus Garnier : Architecture d'habitation",
-        tree: {
-            label: "architecture d'habitation",
-            contents: [
-                {
-                    label: "cité-jardin"
-                },
-                {
-                    label: "édifice d'habitation",
-                    contents: [
-                        {
-                            label: "demeure",
-                            contents: [
-                                {
-                                    label: "chalet"
-                                },
-                                {
-                                    label: "château"
-                                },
-                                {
-                                    label: "château-fort",
-                                    contents: [
-                                        {
-                                            label: "chemin de ronde"
-                                        },
-                                        {
-                                            label: "donjon"
-                                        }
-                                    ]
-                                },
-                                {
-                                    label: "hôtel particulier"
-                                },
-                                {
-                                    label: "maison"
-                                },
-                                {
-                                    label: "manoir"
-                                },
-                                {
-                                    label: "palais"
-                                }
-                            ]
-                        },
-                        {
-                            label: "abri",
-                            contents: [
-                                {
-                                    label: "buron"
-                                },
-                                {
-                                    label: "cabane"
-                                },
-                                {
-                                    label: "campement",
-                                    contents: [
-                                        {
-                                            label: "tente"
-                                        },
-                                        {
-                                            label: "tipi"
-                                        },
-                                        {
-                                            label: "igloo"
-                                        }
-                                    ]
-                                }
-                            ]
-                        }
-                    ]
-                }
-            ]
-        }
-    },
-    {
-        title: "Thésaurus Garnier : Sciences occultes",
-        tree: {
-            label: "sciences occultes",
-            contents: [
-                {
-                    label: "alchimie"
-                },
-                {
-                    label: "astrologie"
-                },
-                {
-                    label: "divination"
-                },
-                {
-                    label: "magie",
-                    contents: [
-                        {
-                            label: "sorcellerie"
-                        },
-                        {
-                            label: "sorcière"
-                        }
-                    ]
-                }
-            ]
-        }
-    }
-];
-$(function() {
-    $(".column").each(function(_key) {
-        var _tree = trees[_key],
-            _el = $(this);
-        _el.find("h3").text(_tree.title);
-        $.getJSON(
-            endpoints.fill_tree,
-            { tree: JSON.stringify(_tree.tree) },
-            function(_data) {
-                renderData(_el.find(".cattree"), _data, 2);
-                _el.find("p.theme:contains('cité-jardin')")
-                    .css("background-color","#ffff80")
-                    .parent()
-                    .parentsUntil(".cattree")
-                        .removeClass("folded");
-            }
-        );
-    });
-});
--- a/web/hdalab/static/hdalab/js/trees.js	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-
-function countContentsAndThemes(_data) {
-    _data.counts = {
-        contents: (typeof _data.contents == "object" && typeof _data.contents.slice == "function" ? _data.contents.length : 0),
-        themes: (typeof _data.themes == "object" && typeof _data.themes.slice == "function" ? _data.themes.length : 0)
-    }
-    if (typeof _data.themes == "object" && typeof _data.themes.slice == "function") {
-        for (var _i = 0; _i < _data.themes.length; _i++) {
-            countContentsAndThemes(_data.themes[_i]);
-            var _subres = _data.themes[_i].counts;
-            _data.counts.contents += _subres.contents;
-            _data.counts.themes += _subres.themes;
-        }
-    }
-}
-
-function renderTemplate(_data, _level, _scale, _maxlevel) {
-    _data.isfolded = _level >= _maxlevel;
-    _(_data.tags).each(function(_tag) {
-        _(_tag.contents).each(function(_content, _key) {
-            _content.trimmed_description = _content.description.trim().replace(/(\n|\r|\r\n)/mg,' ').replace(/(^.{150,200})[\s].+$/m,'$1&hellip;');
-            _content.hidden = (_key >= 5);
-        });
-        _tag.show_more = _tag.contents && _tag.contents.length > 5 ? _tag.contents.length - 5 : 0;
-    });
-    _(_data.contents).each(function(_content, _key) {
-        _content.trimmed_description = _content.description.trim().replace(/(\n|\r|\r\n)/mg,' ').replace(/(^.{150,200})[\s].+$/m,'$1&hellip;');
-        _content.hidden = (_key >= 5);
-    });
-    _data.show_more = _data.contents && _data.contents.length > 5 ? _data.contents.length - 5 : 0;
-    _data.font_size = (10+Math.log(_data.counts.contents)*_scale);
-    var _dsurl = endpoints.datasheet.replace(/ID$/,'');
-    var _prefix = '<li class="themeli{{#isfolded}} folded{{/isfolded}}"><p class="theme"><span style="font-size: {{font_size}}px">{{label}}</span> &mdash; {{#counts.themes}}{{counts.themes}} thème(s){{#counts.contents}}, {{/counts.contents}}{{/counts.themes}}{{#counts.contents}}{{counts.contents}} notice(s){{/counts.contents}}</p><ul>',
-        _suffix = '{{#contents}}<li class="content{{#hidden}} hidden{{/hidden}}" id="content_{{id}}"><p class="title score_{{score}}"><a href="'
-            + _dsurl
-            + '{{hda_id}}">{{title}}</a></p><div class="foldedcontent"><div class="img-container"><img src="http://www.histoiredesarts.culture.fr/images/cached/images/{{hda_id}}.jpg" />'
-            + '</div><p class="description">Source: <a href="{{organization_url}}" target="_blank">{{organization}}</a><br /><a href="'
-            + _dsurl
-            + '{{hda_id}}" class="content">{{trimmed_description}}</a></p></div></li>{{/contents}}{{#show_more}}<li class="show_more">Plus de contenus (<span class="show_more_count">{{show_more}}</span>)&hellip;</li>{{/show_more}}</ul></li>',
-        _html = Mustache.to_html(_prefix, _data);
-    if (typeof _data.themes == "object" && typeof _data.themes.slice == "function") {
-        for (var _i = 0; _i < _data.themes.length; _i++) {
-            _html += renderTemplate(_data.themes[_i], _level + 1, _scale, _maxlevel);
-        }
-    }
-    _html += Mustache.to_html(_suffix, _data);
-    return _html;
-}
-
-function renderData(_selector, _data, _maxlevel) {
-    countContentsAndThemes(_data);
-    var _scale = 8 / Math.max(1,Math.log(_data.counts.contents));
-    _selector.html(renderTemplate(_data, 0, _scale, _maxlevel));
-    _selector.find("p.theme").click(function() {
-        $(this).parent().toggleClass("folded")
-        return false;
-    });
-    _selector.find("li.content").mouseenter(function() {
-        $(this).find(".foldedcontent")
-        .dequeue()
-        .animate({
-            height: 5 + $(this).find("p.description").outerHeight()
-        },
-        500);
-    }).mouseleave(function() {
-        $(this).find(".foldedcontent")
-        .dequeue()
-        .animate({
-            height: "0"
-        },
-        500);
-    });
-    _selector.find(".show_more").click(function() {
-        $(this).siblings(".hidden:lt(5)").removeClass("hidden");
-        var _l = $(this).siblings(".hidden").length;
-        $(this).find(".show_more_count").html(_l);
-        if (!_l) {
-            $(this).detach();
-        } 
-    });
-}
\ No newline at end of file
--- a/web/hdalab/static/hdalab/lib/ZeroClipboard.js	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,311 +0,0 @@
-// Simple Set Clipboard System
-// Author: Joseph Huckaby
-
-var ZeroClipboard = {
-	
-	version: "1.0.7",
-	clients: {}, // registered upload clients on page, indexed by id
-	moviePath: 'ZeroClipboard.swf', // URL to movie
-	nextId: 1, // ID of next movie
-	
-	$: function(thingy) {
-		// simple DOM lookup utility function
-		if (typeof(thingy) == 'string') thingy = document.getElementById(thingy);
-		if (!thingy.addClass) {
-			// extend element with a few useful methods
-			thingy.hide = function() { this.style.display = 'none'; };
-			thingy.show = function() { this.style.display = ''; };
-			thingy.addClass = function(name) { this.removeClass(name); this.className += ' ' + name; };
-			thingy.removeClass = function(name) {
-				var classes = this.className.split(/\s+/);
-				var idx = -1;
-				for (var k = 0; k < classes.length; k++) {
-					if (classes[k] == name) { idx = k; k = classes.length; }
-				}
-				if (idx > -1) {
-					classes.splice( idx, 1 );
-					this.className = classes.join(' ');
-				}
-				return this;
-			};
-			thingy.hasClass = function(name) {
-				return !!this.className.match( new RegExp("\\s*" + name + "\\s*") );
-			};
-		}
-		return thingy;
-	},
-	
-	setMoviePath: function(path) {
-		// set path to ZeroClipboard.swf
-		this.moviePath = path;
-	},
-	
-	dispatch: function(id, eventName, args) {
-		// receive event from flash movie, send to client		
-		var client = this.clients[id];
-		if (client) {
-			client.receiveEvent(eventName, args);
-		}
-	},
-	
-	register: function(id, client) {
-		// register new client to receive events
-		this.clients[id] = client;
-	},
-	
-	getDOMObjectPosition: function(obj, stopObj) {
-		// get absolute coordinates for dom element
-		var info = {
-			left: 0, 
-			top: 0, 
-			width: obj.width ? obj.width : obj.offsetWidth, 
-			height: obj.height ? obj.height : obj.offsetHeight
-		};
-
-		while (obj && (obj != stopObj)) {
-			info.left += obj.offsetLeft;
-			info.top += obj.offsetTop;
-			obj = obj.offsetParent;
-		}
-
-		return info;
-	},
-	
-	Client: function(elem) {
-		// constructor for new simple upload client
-		this.handlers = {};
-		
-		// unique ID
-		this.id = ZeroClipboard.nextId++;
-		this.movieId = 'ZeroClipboardMovie_' + this.id;
-		
-		// register client with singleton to receive flash events
-		ZeroClipboard.register(this.id, this);
-		
-		// create movie
-		if (elem) this.glue(elem);
-	}
-};
-
-ZeroClipboard.Client.prototype = {
-	
-	id: 0, // unique ID for us
-	ready: false, // whether movie is ready to receive events or not
-	movie: null, // reference to movie object
-	clipText: '', // text to copy to clipboard
-	handCursorEnabled: true, // whether to show hand cursor, or default pointer cursor
-	cssEffects: true, // enable CSS mouse effects on dom container
-	handlers: null, // user event handlers
-	
-	glue: function(elem, appendElem, stylesToAdd) {
-		// glue to DOM element
-		// elem can be ID or actual DOM element object
-		this.domElement = ZeroClipboard.$(elem);
-		
-		// float just above object, or zIndex 99 if dom element isn't set
-		var zIndex = 99;
-		if (this.domElement.style.zIndex) {
-			zIndex = parseInt(this.domElement.style.zIndex, 10) + 1;
-		}
-		
-		if (typeof(appendElem) == 'string') {
-			appendElem = ZeroClipboard.$(appendElem);
-		}
-		else if (typeof(appendElem) == 'undefined') {
-			appendElem = document.getElementsByTagName('body')[0];
-		}
-		
-		// find X/Y position of domElement
-		var box = ZeroClipboard.getDOMObjectPosition(this.domElement, appendElem);
-		
-		// create floating DIV above element
-		this.div = document.createElement('div');
-		var style = this.div.style;
-		style.position = 'absolute';
-		style.left = '' + box.left + 'px';
-		style.top = '' + box.top + 'px';
-		style.width = '' + box.width + 'px';
-		style.height = '' + box.height + 'px';
-		style.zIndex = zIndex;
-		
-		if (typeof(stylesToAdd) == 'object') {
-			for (addedStyle in stylesToAdd) {
-				style[addedStyle] = stylesToAdd[addedStyle];
-			}
-		}
-		
-		// style.backgroundColor = '#f00'; // debug
-		
-		appendElem.appendChild(this.div);
-		
-		this.div.innerHTML = this.getHTML( box.width, box.height );
-	},
-	
-	getHTML: function(width, height) {
-		// return HTML for movie
-		var html = '';
-		var flashvars = 'id=' + this.id + 
-			'&width=' + width + 
-			'&height=' + height;
-			
-		if (navigator.userAgent.match(/MSIE/)) {
-			// IE gets an OBJECT tag
-			var protocol = location.href.match(/^https/i) ? 'https://' : 'http://';
-			html += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="'+protocol+'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="'+width+'" height="'+height+'" id="'+this.movieId+'" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="'+ZeroClipboard.moviePath+'" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="'+flashvars+'"/><param name="wmode" value="transparent"/></object>';
-		}
-		else {
-			// all other browsers get an EMBED tag
-			html += '<embed id="'+this.movieId+'" src="'+ZeroClipboard.moviePath+'" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="'+width+'" height="'+height+'" name="'+this.movieId+'" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="'+flashvars+'" wmode="transparent" />';
-		}
-		return html;
-	},
-	
-	hide: function() {
-		// temporarily hide floater offscreen
-		if (this.div) {
-			this.div.style.left = '-2000px';
-		}
-	},
-	
-	show: function() {
-		// show ourselves after a call to hide()
-		this.reposition();
-	},
-	
-	destroy: function() {
-		// destroy control and floater
-		if (this.domElement && this.div) {
-			this.hide();
-			this.div.innerHTML = '';
-			
-			var body = document.getElementsByTagName('body')[0];
-			try { body.removeChild( this.div ); } catch(e) {;}
-			
-			this.domElement = null;
-			this.div = null;
-		}
-	},
-	
-	reposition: function(elem) {
-		// reposition our floating div, optionally to new container
-		// warning: container CANNOT change size, only position
-		if (elem) {
-			this.domElement = ZeroClipboard.$(elem);
-			if (!this.domElement) this.hide();
-		}
-		
-		if (this.domElement && this.div) {
-			var box = ZeroClipboard.getDOMObjectPosition(this.domElement);
-			var style = this.div.style;
-			style.left = '' + box.left + 'px';
-			style.top = '' + box.top + 'px';
-		}
-	},
-	
-	setText: function(newText) {
-		// set text to be copied to clipboard
-		this.clipText = newText;
-		if (this.ready) this.movie.setText(newText);
-	},
-	
-	addEventListener: function(eventName, func) {
-		// add user event listener for event
-		// event types: load, queueStart, fileStart, fileComplete, queueComplete, progress, error, cancel
-		eventName = eventName.toString().toLowerCase().replace(/^on/, '');
-		if (!this.handlers[eventName]) this.handlers[eventName] = [];
-		this.handlers[eventName].push(func);
-	},
-	
-	setHandCursor: function(enabled) {
-		// enable hand cursor (true), or default arrow cursor (false)
-		this.handCursorEnabled = enabled;
-		if (this.ready) this.movie.setHandCursor(enabled);
-	},
-	
-	setCSSEffects: function(enabled) {
-		// enable or disable CSS effects on DOM container
-		this.cssEffects = !!enabled;
-	},
-	
-	receiveEvent: function(eventName, args) {
-		// receive event from flash
-		eventName = eventName.toString().toLowerCase().replace(/^on/, '');
-				
-		// special behavior for certain events
-		switch (eventName) {
-			case 'load':
-				// movie claims it is ready, but in IE this isn't always the case...
-				// bug fix: Cannot extend EMBED DOM elements in Firefox, must use traditional function
-				this.movie = document.getElementById(this.movieId);
-				if (!this.movie) {
-					var self = this;
-					setTimeout( function() { self.receiveEvent('load', null); }, 1 );
-					return;
-				}
-				
-				// firefox on pc needs a "kick" in order to set these in certain cases
-				if (!this.ready && navigator.userAgent.match(/Firefox/) && navigator.userAgent.match(/Windows/)) {
-					var self = this;
-					setTimeout( function() { self.receiveEvent('load', null); }, 100 );
-					this.ready = true;
-					return;
-				}
-				
-				this.ready = true;
-				this.movie.setText( this.clipText );
-				this.movie.setHandCursor( this.handCursorEnabled );
-				break;
-			
-			case 'mouseover':
-				if (this.domElement && this.cssEffects) {
-					this.domElement.addClass('hover');
-					if (this.recoverActive) this.domElement.addClass('active');
-				}
-				break;
-			
-			case 'mouseout':
-				if (this.domElement && this.cssEffects) {
-					this.recoverActive = false;
-					if (this.domElement.hasClass('active')) {
-						this.domElement.removeClass('active');
-						this.recoverActive = true;
-					}
-					this.domElement.removeClass('hover');
-				}
-				break;
-			
-			case 'mousedown':
-				if (this.domElement && this.cssEffects) {
-					this.domElement.addClass('active');
-				}
-				break;
-			
-			case 'mouseup':
-				if (this.domElement && this.cssEffects) {
-					this.domElement.removeClass('active');
-					this.recoverActive = false;
-				}
-				break;
-		} // switch eventName
-		
-		if (this.handlers[eventName]) {
-			for (var idx = 0, len = this.handlers[eventName].length; idx < len; idx++) {
-				var func = this.handlers[eventName][idx];
-			
-				if (typeof(func) == 'function') {
-					// actual function reference
-					func(this, args);
-				}
-				else if ((typeof(func) == 'object') && (func.length == 2)) {
-					// PHP style object + method, i.e. [myObject, 'myMethod']
-					func[0][ func[1] ](this, args);
-				}
-				else if (typeof(func) == 'string') {
-					// name of function
-					window[func](this, args);
-				}
-			} // foreach event handler defined
-		} // user defined handler for event
-	}
-	
-};
Binary file web/hdalab/static/hdalab/lib/ZeroClipboard.swf has changed
--- a/web/hdalab/static/hdalab/lib/countries.geo.json	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-{"type": "FeatureCollection", "features": [{"geometry": {"type": "Polygon", "coordinates": [[[61.210816999999999, 35.650072000000002], [62.230651000000002, 35.270663999999996], [62.984662, 35.404040999999999], [63.193537999999997, 35.857165999999999], [63.982895999999997, 36.007956999999998], [64.546479000000005, 36.312072999999998], [64.746105, 37.111818], [65.588948000000002, 37.305216999999999], [65.745631000000003, 37.661163999999999], [66.217384999999993, 37.393790000000003], [66.518607000000003, 37.362783999999998], [67.075782000000004, 37.356144], [67.829999999999998, 37.144993999999997], [68.135561999999993, 37.023114999999997], [68.859446000000005, 37.344335999999998], [69.196273000000005, 37.151144000000002], [69.518784999999994, 37.608997000000002], [70.116578000000004, 37.588222999999999], [70.270573999999996, 37.735165000000002], [70.376304000000005, 38.138396], [70.806820999999999, 38.486282000000003], [71.348130999999995, 38.258904999999999], [71.239403999999993, 37.953265000000002], [71.541917999999995, 37.905774000000001], [71.448693000000006, 37.065645000000004], [71.844638000000003, 36.738171000000001], [72.193040999999994, 36.948287999999998], [72.636889999999994, 37.047558000000002], [73.260056000000006, 37.495257000000002], [73.948695999999998, 37.421565999999999], [74.980001999999999, 37.419989999999999], [75.158028000000002, 37.133031000000003], [74.575892999999994, 37.020840999999997], [74.067552000000006, 36.836176000000002], [72.920024999999995, 36.720007000000003], [71.846292000000005, 36.509942000000002], [71.262348000000003, 36.074387999999999], [71.498767999999998, 35.650562999999998], [71.613076000000007, 35.153202999999998], [71.115019000000004, 34.733125999999999], [71.156773000000001, 34.348911000000001], [70.881803000000005, 33.988855999999998], [69.930543, 34.020119999999999], [70.323594, 33.358533000000001], [69.687146999999996, 33.105499000000002], [69.262522000000004, 32.501944000000002], [69.317763999999997, 31.901412000000001], [68.926676999999998, 31.620189], [68.556932000000003, 31.71331], [67.792688999999996, 31.582930000000001], [67.683394000000007, 31.303153999999999], [66.938890999999998, 31.304911000000001], [66.381457999999995, 30.738899], [66.346473000000003, 29.887943], [65.046862000000004, 29.472180999999999], [64.350419000000002, 29.560030999999999], [64.148002000000005, 29.340819], [63.550260999999999, 29.468330999999999], [62.549857000000003, 29.318572], [60.874248000000001, 29.829239000000001], [61.781222, 30.735849999999999], [61.699314000000001, 31.379505999999999], [60.941944999999997, 31.548075000000001], [60.863655000000001, 32.182920000000003], [60.536078000000003, 32.981268999999998], [60.963700000000003, 33.528832000000001], [60.52843, 33.676445999999999], [60.803193, 34.404102000000002], [61.210816999999999, 35.650072000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u0444\u0433\u0430\u043d\u0438\u0441\u0442\u0430\u043d", "fr": "Afghanistan", "en": "Afghanistan", "nl": "Afghanistan", "pt": "Afeganist\u00e3o", "no": "Afghanistan", "de": "Afghanistan", "it": "Afghanistan", "sv": "Afghanistan", "pl": "Afganistan", "fi": "Afganistan", "zh": "\u963f\u5bcc\u6c57", "ja": "\u30a2\u30d5\u30ac\u30cb\u30b9\u30bf\u30f3", "es": "Afganist\u00e1n"}, "label_fr": "Afghanistan", "name": "Afghanistan", "dbpedia_uri": "http://dbpedia.org/resource/Afghanistan"}, "id": "AFG"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[16.326528, -5.8774699999999998], [16.573180000000001, -6.6226450000000003], [16.860191, -7.2222980000000003], [17.089995999999999, -7.5456890000000003], [17.47297, -8.0685509999999994], [18.134222000000001, -7.9876779999999998], [18.464175999999998, -7.8470139999999997], [19.016752, -7.9882460000000002], [19.166613000000002, -7.7381840000000004], [19.417501999999999, -7.1554289999999998], [20.037723, -7.1163610000000004], [20.091622000000001, -6.9430899999999998], [20.601823, -6.9393180000000001], [20.514748000000001, -7.2996059999999998], [21.728110999999998, -7.2908720000000002], [21.746455999999998, -7.9200850000000003], [21.949131000000001, -8.3059010000000004], [21.801801000000001, -8.9087069999999997], [21.875181999999999, -9.5237079999999992], [22.208753000000002, -9.8947959999999995], [22.155268, -11.084801000000001], [22.402798000000001, -10.993074999999999], [22.837344999999999, -11.017621999999999], [23.456790999999999, -10.867863], [23.912215, -10.926826], [24.017893999999998, -11.237297999999999], [23.904153999999998, -11.722282], [24.079905, -12.191297], [23.930921999999999, -12.565848000000001], [24.016137000000001, -12.911046000000001], [21.933886000000001, -12.898436999999999], [21.887843, -16.080310000000001], [22.562477999999999, -16.898451000000001], [23.215047999999999, -17.523116000000002], [21.377175999999999, -17.930636], [18.956187, -17.789095], [18.263309, -17.309951000000002], [14.209707, -17.353100999999999], [14.058501, -17.423380999999999], [13.462362000000001, -16.971212000000001], [12.814081, -16.941343], [12.215460999999999, -17.111668000000002], [11.734199, -17.301888999999999], [11.640096, -16.673141999999999], [11.778537, -15.793816], [12.123581, -14.878316], [12.175618999999999, -14.449144], [12.500095, -13.547700000000001], [12.738479, -13.137905999999999], [13.312913999999999, -12.48363], [13.633721, -12.038645000000001], [13.738728, -11.297863], [13.686379000000001, -10.731076], [13.387328, -10.373578], [13.120988000000001, -9.7668970000000002], [12.87537, -9.1669339999999995], [12.929061000000001, -8.9590910000000008], [13.236433, -8.5626289999999994], [12.93304, -7.5965389999999999], [12.728298000000001, -6.9271219999999998], [12.227347, -6.294448], [12.322431999999999, -6.1000920000000001], [12.735170999999999, -5.9656820000000002], [13.024869000000001, -5.9843890000000002], [13.375597000000001, -5.8642409999999998], [16.326528, -5.8774699999999998]]], [[[12.436688, -5.684304], [12.182337, -5.7899310000000002], [11.914963, -5.0379870000000002], [12.318607999999999, -4.60623], [12.620760000000001, -4.4380230000000003], [12.995517, -4.7811029999999999], [12.631612000000001, -4.9912710000000002], [12.468004000000001, -5.2483620000000002], [12.436688, -5.684304]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u043d\u0433\u043e\u043b\u0430", "fr": "Angola", "en": "Angola", "nl": "Angola", "pt": "Angola", "no": "Angola", "de": "Angola", "it": "Angola", "sv": "Angola", "pl": "Angola", "fi": "Angola", "zh": "\u5b89\u54e5\u62c9", "ja": "\u30a2\u30f3\u30b4\u30e9", "es": "Angola"}, "label_fr": "Angola", "name": "Angola", "dbpedia_uri": "http://dbpedia.org/resource/Angola"}, "id": "AGO"}, {"geometry": {"type": "Polygon", "coordinates": [[[20.590247000000002, 41.855404], [20.463175, 41.515089000000003], [20.605181999999999, 41.086226000000003], [21.020040000000002, 40.842726999999996], [20.99999, 40.580004000000002], [20.674997000000001, 40.435000000000002], [20.614999999999998, 40.110007000000003], [20.150016000000001, 39.624997999999998], [19.98, 39.694992999999997], [19.960001999999999, 39.915005999999998], [19.406082000000001, 40.250773000000002], [19.319058999999999, 40.727229999999999], [19.403549999999999, 41.409565999999998], [19.540026999999998, 41.719985999999999], [19.371769, 41.877547999999997], [19.304486000000001, 42.195745000000002], [19.738050999999999, 42.688246999999997], [19.801613, 42.500093], [20.070699999999999, 42.588630000000002], [20.283754999999999, 42.320259999999998], [20.522950000000002, 42.217869999999998], [20.590247000000002, 41.855404]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u043b\u0431\u0430\u043d\u0438\u044f", "fr": "Albanie", "en": "Albania", "nl": "Albani\u00eb", "pt": "Alb\u00e2nia", "no": "Albania", "de": "Albanien", "it": "Albania", "sv": "Albanien", "pl": "Albania", "fi": "Albania", "zh": "\u963f\u5c14\u5df4\u5c3c\u4e9a", "ja": "\u30a2\u30eb\u30d0\u30cb\u30a2", "es": "Albania"}, "label_fr": "Albanie", "name": "Albania", "dbpedia_uri": "http://dbpedia.org/resource/Albania"}, "id": "ALB"}, {"geometry": {"type": "Polygon", "coordinates": [[[51.579518999999998, 24.245497], [51.757441, 24.294073000000001], [51.794389000000002, 24.019825999999998], [52.577081, 24.177439], [53.404007, 24.151316999999999], [54.008001, 24.121758], [54.693024000000001, 24.797892000000001], [55.439025000000001, 25.439145], [56.070821000000002, 26.055464000000001], [56.261042000000003, 25.714606], [56.396847000000001, 24.924731999999999], [55.886232999999997, 24.920831], [55.804119, 24.269604000000001], [55.981214000000001, 24.130542999999999], [55.528632000000002, 23.933603999999999], [55.525841, 23.524868999999999], [55.234489000000004, 23.110993000000001], [55.208340999999997, 22.70833], [55.006802999999998, 22.496948], [52.000732999999997, 23.001154], [51.617708, 24.014219000000001], [51.579518999999998, 24.245497]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0435 \u0410\u0440\u0430\u0431\u0441\u043a\u0438\u0435 \u042d\u043c\u0438\u0440\u0430\u0442\u044b", "fr": "\u00c9mirats arabes unis", "en": "United Arab Emirates", "nl": "Verenigde Arabische Emiraten", "pt": "Emirados \u00c1rabes Unidos", "no": "De forente arabiske emirater", "de": "Vereinigte Arabische Emirate", "it": "Emirati Arabi Uniti", "sv": "F\u00f6renade Arabemiraten", "pl": "Zjednoczone Emiraty Arabskie", "fi": "Yhdistyneet arabiemiirikunnat", "zh": "\u963f\u62c9\u4f2f\u8054\u5408\u914b\u957f\u56fd", "ja": "\u30a2\u30e9\u30d6\u9996\u9577\u56fd\u9023\u90a6", "es": "Emiratos \u00c1rabes Unidos"}, "label_fr": "\u00c9mirats arabes unis", "name": "United Arab Emirates", "dbpedia_uri": "http://dbpedia.org/resource/United_Arab_Emirates"}, "id": "ARE"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-65.5, -55.200000000000003], [-66.450000000000003, -55.25], [-66.959919999999997, -54.896810000000002], [-67.562439999999995, -54.870010000000001], [-68.633349999999993, -54.869500000000002], [-68.634010000000004, -52.636369999999999], [-68.25, -53.100000000000001], [-67.75, -53.850000000000001], [-66.450000000000003, -54.450000000000003], [-65.049999999999997, -54.700000000000003], [-65.5, -55.200000000000003]]], [[[-64.964892000000006, -22.075862000000001], [-64.377020999999999, -22.798090999999999], [-63.986837999999999, -21.993644], [-62.846468000000002, -22.034984999999999], [-62.685057, -22.249029], [-60.846564999999998, -23.880713], [-60.028965999999997, -24.032796000000001], [-58.807127999999999, -24.771459], [-57.777217, -25.16234], [-57.633659999999999, -25.603656999999998], [-58.618174000000003, -27.123719000000001], [-57.609760000000001, -27.395899], [-56.486702000000001, -27.548499], [-55.695846000000003, -27.387837000000001], [-54.788795, -26.621786], [-54.625290999999997, -25.739255], [-54.130049999999997, -25.547639], [-53.628349, -26.124865], [-53.648735000000002, -26.923473000000001], [-54.490724999999998, -27.474757], [-55.162286000000002, -27.881914999999999], [-56.290900000000001, -28.852761000000001], [-57.625132999999998, -30.216294999999999], [-57.874937000000003, -31.016556000000001], [-58.142440000000001, -32.044504000000003], [-58.132648000000003, -33.040567000000003], [-58.349611000000003, -33.263188999999997], [-58.427073999999998, -33.909453999999997], [-58.495441999999997, -34.431489999999997], [-57.225830000000002, -35.288027], [-57.362358999999998, -35.97739], [-56.737487000000002, -36.413125999999998], [-56.788285000000002, -36.901572000000002], [-57.749156999999997, -38.183871000000003], [-59.231856999999998, -38.720219999999998], [-61.237445000000001, -38.928424999999997], [-62.335957000000001, -38.827706999999997], [-62.125762999999999, -39.424104999999997], [-62.330531000000001, -40.172586000000003], [-62.145994000000002, -40.676896999999997], [-62.745803000000002, -41.028761000000003], [-63.770494999999997, -41.166789000000001], [-64.732089999999999, -40.802677000000003], [-65.118035000000006, -41.064315000000001], [-64.978560999999999, -42.058000999999997], [-64.303408000000005, -42.359015999999997], [-63.755947999999997, -42.043686999999998], [-63.458058999999999, -42.563138000000002], [-64.378804000000002, -42.873558000000003], [-65.181804, -43.495381000000002], [-65.328823, -44.501365999999997], [-65.565269000000001, -45.036785999999999], [-66.509966000000006, -45.039628], [-67.293794000000005, -45.551895999999999], [-67.580545999999998, -46.301772999999997], [-66.597065999999998, -47.033925000000004], [-65.641026999999994, -47.236134999999997], [-65.985088000000005, -48.133288999999998], [-67.166179, -48.697336999999997], [-67.816087999999993, -49.869669000000002], [-68.728745000000004, -50.264218], [-69.138538999999994, -50.732509999999998], [-68.815561000000002, -51.771104000000001], [-68.149995000000004, -52.349983000000002], [-68.571545, -52.299444000000001], [-69.498362, -52.142761], [-71.914804000000004, -52.009022000000002], [-72.329403999999997, -51.425955999999999], [-72.309973999999997, -50.677010000000003], [-72.975746999999998, -50.74145], [-73.328051000000002, -50.378785000000001], [-73.415436, -49.318435999999998], [-72.648246999999998, -48.878618000000003], [-72.331160999999994, -48.244238000000003], [-72.447355000000002, -47.738532999999997], [-71.917258000000004, -46.884838000000002], [-71.552008999999998, -45.560732999999999], [-71.659316000000004, -44.973689], [-71.222779000000003, -44.784242999999996], [-71.329801000000003, -44.407522], [-71.793622999999997, -44.207172], [-71.464055999999999, -43.787610999999998], [-71.915424000000002, -43.408565000000003], [-72.148898000000003, -42.254888000000001], [-71.746803999999997, -42.051386000000001], [-71.915734, -40.832338999999997], [-71.680761000000004, -39.808163999999998], [-71.413516999999999, -38.916021999999998], [-70.814663999999993, -38.552995000000003], [-71.118624999999994, -37.576827000000002], [-71.121881000000002, -36.658124000000001], [-70.364768999999995, -36.005088999999998], [-70.388048999999995, -35.169688000000001], [-69.817308999999995, -34.193570999999999], [-69.814777000000007, -33.273885999999997], [-70.074399, -33.091209999999997], [-70.535068999999993, -31.365010000000002], [-69.919008000000005, -30.336338999999999], [-70.013549999999995, -29.367923000000001], [-69.656130000000005, -28.459140999999999], [-69.001234999999994, -27.521214000000001], [-68.295541999999998, -26.899339999999999], [-68.594800000000006, -26.506909], [-68.386000999999993, -26.185016000000001], [-68.417653000000001, -24.518554999999999], [-67.328442999999993, -24.025303000000001], [-66.985234000000005, -22.986349000000001], [-67.106673999999998, -22.735925000000002], [-66.273339000000007, -21.83231], [-64.964892000000006, -22.075862000000001]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u0440\u0433\u0435\u043d\u0442\u0438\u043d\u0430", "fr": "Argentine", "en": "Argentina", "nl": "Argentini\u00eb", "pt": "Argentina", "no": "Argentina", "de": "Argentinien", "it": "Argentina", "sv": "Argentina", "pl": "Argentyna", "fi": "Argentiina", "zh": "\u963f\u6839\u5ef7", "ja": "\u30a2\u30eb\u30bc\u30f3\u30c1\u30f3", "es": "Argentina"}, "label_fr": "Argentine", "name": "Argentina", "dbpedia_uri": "http://dbpedia.org/resource/Argentina"}, "id": "ARG"}, {"geometry": {"type": "Polygon", "coordinates": [[[43.582746, 41.092143], [44.972479999999997, 41.248128999999999], [45.179496, 40.985354000000001], [45.560350999999997, 40.812289999999997], [45.359175, 40.561503999999999], [45.891907000000003, 40.218476000000003], [45.610011999999998, 39.899994], [46.034534000000001, 39.628020999999997], [46.483499000000002, 39.464154999999998], [46.505719999999997, 38.770605000000003], [46.143622999999998, 38.741200999999997], [45.735379000000002, 39.319718999999999], [45.739978000000001, 39.473998999999999], [45.298144999999998, 39.471750999999998], [45.001987, 39.740003999999999], [44.793990000000001, 39.713003], [44.400008999999997, 40.005000000000003], [43.656435999999999, 40.253563999999997], [43.752657999999997, 40.740200999999999], [43.582746, 41.092143]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u0440\u043c\u0435\u043d\u0438\u044f", "fr": "Arm\u00e9nie", "en": "Armenia", "nl": "Armeni\u00eb", "pt": "Arm\u00e9nia", "no": "Armenia", "de": "Armenien", "it": "Armenia", "sv": "Armenien", "pl": "Armenia", "fi": "Armenia", "zh": "\u4e9e\u7f8e\u5c3c\u4e9e", "ja": "\u30a2\u30eb\u30e1\u30cb\u30a2", "es": "Armenia"}, "label_fr": "Arm\u00e9nie", "name": "Armenia", "dbpedia_uri": "http://dbpedia.org/resource/Armenia"}, "id": "ARM"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-59.572094999999997, -80.040178999999995], [-59.865848999999997, -80.549656999999996], [-60.159655999999998, -81.000326999999999], [-62.255392999999998, -80.863178000000005], [-64.488124999999997, -80.921933999999993], [-65.741665999999995, -80.588826999999995], [-65.741665999999995, -80.549656999999996], [-66.290030999999999, -80.255773000000005], [-64.037688000000003, -80.294944000000001], [-61.883246, -80.392870000000002], [-61.138976, -79.981370999999996], [-60.610118999999997, -79.628679000000005], [-59.572094999999997, -80.040178999999995]]], [[[-159.20818399999999, -79.497058999999993], [-161.127601, -79.634208999999998], [-162.43984699999999, -79.281464999999997], [-163.02740800000001, -78.928774000000004], [-163.06660400000001, -78.869966000000005], [-163.712896, -78.595667000000006], [-163.712896, -78.595667000000006], [-163.10580100000001, -78.223337999999998], [-161.245113, -78.380176000000006], [-160.246208, -78.693645000000004], [-159.482405, -79.046338000000006], [-159.20818399999999, -79.497058999999993]]], [[[-45.154758000000001, -78.047070000000005], [-43.920828, -78.478103000000004], [-43.48995, -79.085560000000001], [-43.372438000000002, -79.516644999999997], [-43.333266999999999, -80.026122999999998], [-44.880536999999997, -80.339644000000007], [-46.506174000000001, -80.594357000000002], [-48.386420999999999, -80.829485000000005], [-50.482106999999999, -81.025441999999998], [-52.851987999999999, -80.966684999999998], [-54.164259000000001, -80.633527999999998], [-53.987991000000001, -80.222027999999995], [-51.853133999999997, -79.947730000000007], [-50.991326000000001, -79.614622999999995], [-50.364595000000001, -79.183487], [-49.914130999999998, -78.811209000000005], [-49.306958999999999, -78.458568999999997], [-48.660615999999997, -78.047017999999994], [-48.660615999999997, -78.047019000000006], [-48.151395999999998, -78.047070000000005], [-46.662857000000002, -77.831475999999995], [-45.154758000000001, -78.047070000000005]]], [[[-121.211511, -73.500990000000002], [-119.918851, -73.657724999999999], [-118.724143, -73.481352999999999], [-119.292119, -73.834097], [-120.23221700000001, -74.088809999999995], [-121.62282999999999, -74.010468000000003], [-122.621735, -73.657777999999993], [-122.621735, -73.657776999999996], [-122.406245, -73.324618999999998], [-121.211511, -73.500990000000002]]], [[[-125.559566, -73.481352999999999], [-124.031882, -73.873267999999996], [-124.619469, -73.834097], [-125.912181, -73.736118000000005], [-127.28313, -73.461769000000004], [-127.28313, -73.461768000000006], [-126.55847199999999, -73.246225999999993], [-125.559566, -73.481352999999999]]], [[[-98.981549999999999, -71.933334000000002], [-97.884743, -72.070535000000007], [-96.787936999999999, -71.952971000000005], [-96.20035, -72.521204999999995], [-96.983765000000005, -72.442864], [-98.198082999999997, -72.482034999999996], [-99.432012999999998, -72.442864], [-100.783455, -72.501620000000003], [-101.801868, -72.305662999999996], [-102.330725, -71.894164000000004], [-102.330725, -71.894164000000004], [-101.70396700000001, -71.717792000000003], [-100.430919, -71.854992999999993], [-98.981549999999999, -71.933334000000002]]], [[[-68.451346000000001, -70.955822999999995], [-68.333833999999996, -71.406492999999998], [-68.510127999999995, -71.798406999999997], [-68.784296999999995, -72.170736000000005], [-69.959470999999994, -72.307884999999999], [-71.075889000000004, -72.503842000000006], [-72.388133999999994, -72.484256999999999], [-71.898499999999999, -72.092343], [-73.073622, -72.229491999999993], [-74.190039999999996, -72.366692999999998], [-74.953895000000003, -72.072756999999996], [-75.012625, -71.661258000000004], [-73.915818999999999, -71.269345000000001], [-73.915818999999999, -71.269344000000004], [-73.230331000000007, -71.151780000000002], [-72.074717000000007, -71.190950999999998], [-71.780962000000002, -70.681472999999997], [-71.722179999999994, -70.309196], [-71.741791000000006, -69.505781999999996], [-71.173815000000005, -69.035475000000005], [-70.253252000000003, -68.878739999999993], [-69.724446999999998, -69.251017000000004], [-69.489422000000005, -69.623345999999998], [-69.058518000000007, -70.074016], [-68.725541000000007, -70.505153000000007], [-68.451346000000001, -70.955822999999995]]], [[[-58.614142999999999, -64.152467000000001], [-59.045073000000002, -64.368009999999998], [-59.789341999999998, -64.211223000000004], [-60.611927999999999, -64.309201999999999], [-61.297415999999998, -64.544330000000002], [-62.022100000000002, -64.799093999999997], [-62.511760000000002, -65.093029999999999], [-62.648857999999997, -65.484942000000004], [-62.590128, -65.857219000000001], [-62.120078999999997, -66.190325999999999], [-62.805567000000003, -66.425505000000001], [-63.745690000000003, -66.503846999999993], [-64.294105999999999, -66.837003999999993], [-64.881692999999999, -67.150474000000003], [-65.508425000000003, -67.581609999999998], [-65.665081999999998, -67.953886999999995], [-65.312545, -68.365335000000002], [-64.783715000000001, -68.678908000000007], [-63.961103000000001, -68.913983999999999], [-63.197299999999998, -69.227556000000007], [-62.785955000000001, -69.619418999999994], [-62.570515999999998, -69.991747000000004], [-62.276736, -70.383661000000004], [-61.806660999999998, -70.716768000000002], [-61.512906000000001, -71.089044999999999], [-61.375808999999997, -72.010074000000003], [-61.081977000000002, -72.382351], [-61.003661000000001, -72.774265], [-60.690269000000001, -73.166179], [-60.827367000000002, -73.695241999999993], [-61.375808999999997, -74.106741999999997], [-61.963369999999998, -74.439847999999998], [-63.295200999999999, -74.576997000000006], [-63.745690000000003, -74.929739999999995], [-64.352835999999996, -75.262846999999994], [-65.860986999999994, -75.635124000000005], [-67.192818000000003, -75.791910000000001], [-68.446281999999997, -76.007452000000001], [-69.797724000000002, -76.222994999999997], [-70.600724, -76.634494000000004], [-72.206776000000005, -76.673665], [-73.969536000000005, -76.634494000000004], [-75.555976999999999, -76.712886999999995], [-77.240369999999999, -76.712886999999995], [-76.926979000000003, -77.104802000000007], [-75.399293999999998, -77.28107], [-74.282876000000002, -77.555419999999998], [-73.656119000000004, -77.908112000000003], [-74.772536000000002, -78.221632999999997], [-76.496099999999998, -78.123654000000002], [-77.925858000000005, -78.378418999999994], [-77.984666000000004, -78.789918], [-78.023785000000004, -79.181832999999997], [-76.848636999999997, -79.514938999999998], [-76.633223999999998, -79.887215999999995], [-75.360096999999996, -80.259545000000003], [-73.244851999999995, -80.416331], [-71.442946000000006, -80.690629999999999], [-70.013163000000006, -81.004150999999993], [-68.191646000000006, -81.317672000000002], [-65.704279, -81.474457999999998], [-63.256030000000003, -81.748756999999998], [-61.552025999999998, -82.042692000000002], [-59.691415999999997, -82.37585], [-58.712121000000003, -82.846106000000006], [-58.222487000000001, -83.218434000000002], [-57.008116999999999, -82.865690999999998], [-55.362893999999997, -82.571754999999996], [-53.619771, -82.258234999999999], [-51.543644, -82.003521000000006], [-49.76135, -81.729170999999994], [-47.273930999999997, -81.709586000000002], [-44.825707999999999, -81.846734999999995], [-42.808363, -82.081914999999995], [-42.162019999999998, -81.650829999999999], [-40.771433000000002, -81.356893999999997], [-38.244818000000002, -81.337309000000005], [-36.266669999999998, -81.121714999999995], [-34.386397000000002, -80.906171999999998], [-32.310296000000001, -80.769023000000004], [-30.097097999999999, -80.592651000000004], [-28.549802, -80.337937999999994], [-29.254901, -79.985195000000004], [-29.685804999999998, -79.632503], [-29.685804999999998, -79.260226000000003], [-31.624808000000002, -79.299396999999999], [-33.681323999999996, -79.456131999999997], [-35.639912000000002, -79.456131999999997], [-35.914107000000001, -79.083855], [-35.777009999999997, -78.339247999999998], [-35.326546, -78.123654000000002], [-33.896763, -77.888525999999999], [-32.212369000000002, -77.653450000000007], [-30.998051, -77.359515000000002], [-29.783732000000001, -77.065579], [-28.882778999999999, -76.673665], [-27.511752000000001, -76.497344999999996], [-26.160336000000001, -76.360144000000005], [-25.474822, -76.281802999999996], [-23.927551999999999, -76.242580000000004], [-22.458597999999999, -76.105430999999996], [-21.224694, -75.909474000000003], [-20.010375, -75.674346], [-18.913543000000001, -75.439217999999997], [-17.522981999999999, -75.125698], [-16.641589, -74.792540000000002], [-15.701491000000001, -74.498604], [-15.40771, -74.106741999999997], [-16.465319999999998, -73.871613999999994], [-16.112784000000001, -73.460114000000004], [-15.446854999999999, -73.146541999999997], [-14.408804999999999, -72.950585000000004], [-13.311973, -72.715457000000001], [-12.293507999999999, -72.401936000000006], [-11.510066999999999, -72.010074000000003], [-11.020433000000001, -71.539766999999998], [-10.295774, -71.265416000000002], [-9.1010150000000003, -71.324224000000001], [-8.6113809999999997, -71.657330000000002], [-7.4166220000000003, -71.696500999999998], [-7.3774509999999998, -71.324224000000001], [-6.8682319999999999, -70.932310000000001], [-5.790985, -71.030288999999996], [-5.5363749999999996, -71.402617000000006], [-4.3416670000000002, -71.461372999999995], [-3.0489809999999999, -71.285053000000005], [-1.7954920000000001, -71.167438000000004], [-0.65948899999999999, -71.226246000000003], [-0.22863700000000001, -71.637744999999995], [0.86819500000000005, -71.304638999999995], [1.8866860000000001, -71.128266999999994], [3.0226380000000002, -70.991118], [4.1390549999999999, -70.853916999999996], [5.157546, -70.618789000000007], [6.2739120000000002, -70.462055000000007], [7.1357200000000001, -70.246511999999996], [7.7428660000000002, -69.893769000000006], [8.4871099999999995, -70.148533999999998], [9.5251350000000006, -70.011332999999993], [10.249845000000001, -70.481639999999999], [10.817821, -70.834332000000003], [11.953823999999999, -70.638374999999996], [12.404287, -70.246511999999996], [13.422777999999999, -69.972161999999997], [14.734997999999999, -70.030918], [15.126757, -70.403246999999993], [15.949342, -70.030918], [17.026589000000001, -69.913353999999998], [18.201711, -69.874183000000002], [19.259373, -69.893769000000006], [20.375738999999999, -70.011332999999993], [21.452985000000002, -70.070139999999995], [21.923034000000001, -70.403246999999993], [22.569403000000001, -70.697181999999998], [23.666184000000001, -70.520810999999995], [24.841356999999999, -70.481639999999999], [25.977309000000002, -70.481639999999999], [27.093726, -70.462055000000007], [28.092580000000002, -70.324854000000002], [29.150241999999999, -70.20729], [30.031583000000001, -69.932940000000002], [30.971733, -69.756619999999998], [31.990172000000001, -69.658641000000003], [32.754052999999999, -69.384291000000005], [33.302442999999997, -68.835642000000007], [33.870418999999998, -68.502588000000003], [34.908495000000002, -68.659271000000004], [35.300201999999999, -69.012013999999994], [36.162010000000002, -69.247141999999997], [37.200035, -69.168747999999994], [37.905107999999998, -69.521439999999998], [38.649403999999997, -69.776205000000004], [39.667893999999997, -69.541077000000001], [40.020431000000002, -69.109941000000006], [40.921357999999998, -68.933621000000002], [41.959434000000002, -68.600514000000004], [42.938701999999999, -68.463312999999999], [44.113875999999998, -68.267408000000003], [44.897291000000003, -68.051866000000004], [45.719928000000003, -67.816738000000001], [46.503343000000001, -67.601196000000002], [47.443440000000002, -67.718759000000006], [48.344419000000002, -67.366067999999999], [48.990735999999998, -67.091718], [49.930885000000004, -67.111303000000007], [50.753470999999998, -66.876175000000003], [50.949325000000002, -66.523483999999996], [51.791547000000001, -66.249133], [52.614133000000002, -66.053175999999993], [53.613038000000003, -65.896389999999997], [54.533549999999998, -65.818049000000002], [55.414943000000001, -65.876805000000004], [56.355041, -65.974783000000002], [57.158093000000001, -66.249133], [57.255968000000003, -66.680217999999996], [58.137360999999999, -67.013323999999997], [58.744508000000003, -67.287674999999993], [59.939318, -67.405238999999995], [60.605221, -67.679589000000007], [61.427805999999997, -67.953886999999995], [62.387489000000002, -68.012694999999994], [63.190489999999997, -67.816738000000001], [64.052349000000007, -67.405238999999995], [64.992446999999999, -67.620728999999997], [65.971715000000003, -67.738344999999995], [66.911863999999994, -67.855908999999997], [67.891132999999996, -67.934302000000002], [68.890038000000004, -67.934302000000002], [69.712624000000005, -68.972791000000001], [69.673452999999995, -69.227556000000007], [69.555941000000004, -69.678225999999995], [68.596258000000006, -69.932940000000002], [67.812740000000005, -70.305267999999998], [67.949888999999999, -70.697181999999998], [69.066306999999995, -70.677544999999995], [68.929157000000004, -71.069458999999995], [68.419989000000001, -71.441788000000003], [67.949888999999999, -71.853286999999995], [68.713769999999997, -72.166808000000003], [69.869307000000006, -72.264786999999998], [71.024895000000001, -72.088414999999998], [71.573284999999998, -71.696500999999998], [71.906288000000004, -71.324224000000001], [72.454627000000002, -71.010703000000007], [73.081410000000005, -70.716768000000002], [73.336020000000005, -70.364024000000001], [73.864877000000007, -69.874183000000002], [74.491557, -69.776205000000004], [75.627560000000003, -69.737033999999994], [76.626464999999996, -69.619418999999994], [77.644903999999997, -69.462683999999996], [78.134539000000004, -69.070769999999996], [78.428370999999999, -68.698441000000003], [79.113859000000005, -68.326216000000002], [80.093126999999996, -68.071503000000007], [80.93535, -67.875546], [81.483791999999994, -67.542388000000003], [82.051766999999998, -67.366067999999999], [82.776426000000001, -67.209282000000002], [83.775330999999994, -67.307259999999999], [84.676205999999993, -67.209282000000002], [85.655527000000006, -67.091718], [86.752358999999998, -67.150474000000003], [87.477017000000004, -66.876175000000003], [87.986288999999999, -66.209911000000005], [88.358411000000004, -66.484261000000004], [88.828407999999996, -66.954567999999995], [89.670630000000003, -67.150474000000003], [90.630364999999998, -67.228866999999994], [91.590100000000007, -67.111303000000007], [92.608538999999993, -67.189695999999998], [93.548636999999999, -67.209282000000002], [94.175420000000003, -67.111303000000007], [95.017590999999996, -67.170111000000006], [95.781471999999994, -67.385653000000005], [96.682399000000004, -67.248503999999997], [97.759646000000004, -67.248503999999997], [98.680210000000002, -67.111303000000007], [99.718181999999999, -67.248503999999997], [100.38418799999999, -66.915346], [100.893356, -66.582239999999999], [101.578896, -66.30789], [102.83241099999999, -65.563283999999996], [103.47867599999999, -65.700485], [104.24255700000001, -65.974783000000002], [104.90846000000001, -66.327527000000003], [106.181561, -66.934931000000006], [107.160881, -66.954567999999995], [108.08139300000001, -66.954567999999995], [109.15864000000001, -66.837003999999993], [110.23583499999999, -66.699804], [111.05847199999999, -66.425505000000001], [111.74396, -66.131569999999996], [112.860378, -66.092347000000004], [113.60467300000001, -65.876805000000004], [114.388088, -66.072761999999997], [114.897308, -66.386283000000006], [115.60238099999999, -66.699804], [116.699161, -66.660633000000004], [117.38470100000001, -66.915346], [118.57946, -67.170111000000006], [119.83292400000001, -67.268089000000003], [120.871, -67.189695999999998], [121.654415, -66.876175000000003], [122.320369, -66.562653999999995], [123.221296, -66.484261000000004], [124.122274, -66.621461999999994], [125.160247, -66.719389000000007], [126.100396, -66.562653999999995], [127.00142700000001, -66.562653999999995], [127.882768, -66.660633000000004], [128.80328, -66.758611000000002], [129.70425900000001, -66.582239999999999], [130.781454, -66.425505000000001], [131.79994500000001, -66.386283000000006], [132.93589600000001, -66.386283000000006], [133.85646, -66.288303999999997], [134.75738699999999, -66.209963000000002], [135.03158199999999, -65.720070000000007], [135.070753, -65.308571000000001], [135.697485, -65.582869000000002], [135.873805, -66.033591000000001], [136.206705, -66.445089999999993], [136.61804900000001, -66.778197000000006], [137.46027100000001, -66.954567999999995], [138.59622300000001, -66.895760999999993], [139.90844200000001, -66.876175000000003], [140.80942099999999, -66.817367000000004], [142.121692, -66.817367000000004], [143.06184200000001, -66.797781999999998], [144.37406100000001, -66.837003999999993], [145.49042700000001, -66.915346], [146.19555199999999, -67.228866999999994], [145.99969899999999, -67.601196000000002], [146.64606699999999, -67.895131000000006], [147.723263, -68.130258999999995], [148.839629, -68.385024000000001], [150.13231400000001, -68.561291999999995], [151.48370499999999, -68.718130000000002], [152.50224700000001, -68.874813000000003], [153.63819899999999, -68.894502000000003], [154.28456700000001, -68.561291999999995], [155.16585699999999, -68.835642000000007], [155.92979, -69.149214999999998], [156.81113199999999, -69.384291000000005], [158.02552800000001, -69.482269000000002], [159.18101300000001, -69.599833000000004], [159.67069900000001, -69.991747000000004], [160.80664999999999, -70.226875000000007], [161.57047900000001, -70.579617999999996], [162.68689699999999, -70.736352999999994], [163.842434, -70.716768000000002], [164.919681, -70.775524000000004], [166.11444, -70.755938], [167.30909500000001, -70.834332000000003], [168.42561599999999, -70.971480999999997], [169.46358900000001, -71.206659999999999], [170.501665, -71.402617000000006], [171.20679000000001, -71.696500999999998], [171.08922699999999, -72.088414999999998], [170.56042199999999, -72.441158999999999], [170.10995800000001, -72.891829000000001], [169.75737000000001, -73.244519999999994], [169.28732099999999, -73.656019999999998], [167.975101, -73.812805999999995], [167.38748899999999, -74.165497999999999], [166.09480300000001, -74.381039999999999], [165.64439100000001, -74.772953999999999], [164.95885100000001, -75.145283000000006], [164.234193, -75.458804000000001], [163.82279700000001, -75.870303000000007], [163.56823900000001, -76.242580000000004], [163.47026, -76.693302000000003], [163.48989700000001, -77.065579], [164.057873, -77.457442], [164.27336299999999, -77.829769999999996], [164.74346399999999, -78.182513999999998], [166.60412600000001, -78.319610999999995], [166.99578099999999, -78.750748000000002], [165.19387599999999, -78.907482999999999], [163.66621699999999, -79.123024999999998], [161.76638500000001, -79.162248000000005], [160.924162, -79.730481999999995], [160.747894, -80.200737000000004], [160.31696400000001, -80.573065999999997], [159.78821099999999, -80.945395000000005], [161.12001599999999, -81.278501000000006], [161.62928700000001, -81.690000999999995], [162.49099200000001, -82.062278000000006], [163.70533599999999, -82.395435000000006], [165.09594899999999, -82.708956000000001], [166.60412600000001, -83.022476999999995], [168.89566500000001, -83.335998000000004], [169.40478200000001, -83.825890999999999], [172.28393399999999, -84.041432999999998], [172.47704899999999, -84.117913999999999], [173.22408300000001, -84.413709999999995], [175.98567199999999, -84.158996999999999], [178.27721199999999, -84.472517999999994], [180, -84.713380000000001], [-179.942499, -84.721442999999994], [-179.05867699999999, -84.139411999999993], [-177.25677200000001, -84.452933000000002], [-177.140807, -84.417940999999999], [-176.08467300000001, -84.099259000000004], [-175.94723500000001, -84.110449000000003], [-175.829882, -84.117913999999999], [-174.38250300000001, -84.534323000000001], [-173.116559, -84.117913999999999], [-172.889106, -84.061019000000002], [-169.951223, -83.884647000000001], [-168.999989, -84.117913999999999], [-168.53019900000001, -84.237390000000005], [-167.022099, -84.570497000000003], [-164.18214399999999, -84.825209999999998], [-161.92977500000001, -85.138731000000007], [-158.07138, -85.373909999999995], [-155.19225299999999, -85.099559999999997], [-150.94209900000001, -85.295517000000004], [-148.533073, -85.609037999999998], [-145.88891799999999, -85.315101999999996], [-143.10771800000001, -85.040751999999998], [-142.892279, -84.570497000000003], [-146.82906800000001, -84.531273999999996], [-150.060732, -84.296145999999993], [-150.902928, -83.904231999999993], [-153.58620099999999, -83.688689999999994], [-153.409907, -83.238020000000006], [-153.03775899999999, -82.826520000000002], [-152.665637, -82.454192000000006], [-152.86151699999999, -82.042692000000002], [-154.52629899999999, -81.768394000000001], [-155.29017999999999, -81.415649999999999], [-156.83744999999999, -81.102129000000005], [-154.40878699999999, -81.160937000000004], [-152.09766200000001, -81.004150999999993], [-150.648293, -81.337309000000005], [-148.86599799999999, -81.043373000000003], [-147.22075000000001, -80.671045000000007], [-146.41774899999999, -80.337937999999994], [-146.770286, -79.926439000000002], [-148.06294700000001, -79.652089000000004], [-149.531901, -79.358204999999998], [-151.588416, -79.299396999999999], [-153.390322, -79.162248000000005], [-155.329376, -79.064268999999996], [-155.97566800000001, -78.691940000000002], [-157.26830200000001, -78.378418999999994], [-158.05176800000001, -78.025676000000004], [-158.36513400000001, -76.889206999999999], [-157.875474, -76.987238000000005], [-156.97457299999999, -77.300758999999999], [-155.329376, -77.202727999999993], [-153.74283199999999, -77.065579], [-152.92024699999999, -77.496663999999996], [-151.33377999999999, -77.398736999999997], [-150.00194999999999, -77.183143000000001], [-148.74848600000001, -76.908844999999999], [-147.612483, -76.575738000000001], [-146.104409, -76.477760000000004], [-146.143528, -76.105430999999996], [-146.49609100000001, -75.733153999999999], [-146.20231000000001, -75.380410999999995], [-144.90962400000001, -75.204038999999995], [-144.32203699999999, -75.537197000000006], [-142.794353, -75.341239999999999], [-141.63876400000001, -75.086474999999993], [-140.20900700000001, -75.066890000000001], [-138.85758999999999, -74.968911000000006], [-137.50620000000001, -74.733783000000003], [-136.428901, -74.518241000000003], [-135.214583, -74.302699000000004], [-134.431194, -74.361455000000007], [-133.745654, -74.439847999999998], [-132.25716800000001, -74.302699000000004], [-130.92531099999999, -74.479018999999994], [-129.554284, -74.459433000000004], [-128.24203800000001, -74.322283999999996], [-126.89062199999999, -74.420263000000006], [-125.40208199999999, -74.518241000000003], [-124.01149599999999, -74.479018999999994], [-122.562152, -74.498604], [-121.07361299999999, -74.518241000000003], [-119.70256000000001, -74.479018999999994], [-118.684145, -74.185083000000006], [-117.469801, -74.028347999999994], [-116.216312, -74.243891000000005], [-115.021552, -74.067519000000004], [-113.94433100000001, -73.714827999999997], [-113.297988, -74.028347999999994], [-112.945452, -74.381039999999999], [-112.299083, -74.714197999999996], [-111.261059, -74.420263000000006], [-110.06632500000001, -74.792540000000002], [-108.71490900000001, -74.910103000000007], [-107.55934600000001, -75.184454000000002], [-106.149148, -75.125698], [-104.876074, -74.949325999999999], [-103.367949, -74.988496999999995], [-102.016507, -75.125698], [-100.64553100000001, -75.302018000000004], [-100.11669999999999, -74.870932999999994], [-100.763043, -74.537825999999995], [-101.252703, -74.185083000000006], [-102.545337, -74.106741999999997], [-103.11331300000001, -73.734413000000004], [-103.32875199999999, -73.362083999999996], [-103.68128900000001, -72.617530000000002], [-102.917485, -72.754678999999996], [-101.60523999999999, -72.813435999999996], [-100.312528, -72.754678999999996], [-99.137379999999993, -72.911413999999994], [-98.118888999999996, -73.205349999999996], [-97.688036999999994, -73.558041000000003], [-96.336595000000003, -73.616849000000002], [-95.043960999999996, -73.479699999999994], [-93.672906999999995, -73.283743000000001], [-92.439003, -73.166179], [-91.420563999999999, -73.401307000000003], [-90.088733000000005, -73.322913999999997], [-89.226951, -72.558722000000003], [-88.423951000000002, -73.009393000000003], [-87.268337000000002, -73.185764000000006], [-86.014821999999995, -73.087785999999994], [-85.192235999999994, -73.479699999999994], [-83.879991000000004, -73.518871000000004], [-82.665645999999995, -73.636433999999994], [-81.470912999999996, -73.851977000000005], [-80.687447000000006, -73.479699999999994], [-80.295790999999994, -73.126956000000007], [-79.296886000000001, -73.518871000000004], [-77.925858000000005, -73.420891999999995], [-76.907366999999994, -73.636433999999994], [-76.221879000000001, -73.969541000000007], [-74.890049000000005, -73.871613999999994], [-73.852024, -73.656019999999998], [-72.833533000000003, -73.401307000000003], [-71.619214999999997, -73.264156999999997], [-70.209041999999997, -73.146541999999997], [-68.935916000000006, -73.009393000000003], [-67.956621999999996, -72.793850000000006], [-67.369061000000002, -72.480328999999998], [-67.134035999999995, -72.049244000000002], [-67.251548, -71.637744999999995], [-67.564940000000007, -71.245830999999995], [-67.917477000000005, -70.853916999999996], [-68.230842999999993, -70.462055000000007], [-68.485451999999995, -70.109311000000005], [-68.544208999999995, -69.717397000000005], [-68.446281999999997, -69.325535000000002], [-67.976232999999993, -68.953205999999994], [-67.584500000000006, -68.541707000000002], [-67.427842999999996, -68.149844000000002], [-67.623670000000004, -67.718759000000006], [-67.741183000000007, -67.326845000000006], [-67.251548, -66.876175000000003], [-66.703183999999993, -66.582239999999999], [-66.056815, -66.209963000000002], [-65.371326999999994, -65.896389999999997], [-64.568275999999997, -65.602506000000005], [-64.176541999999998, -65.171423000000004], [-63.628152, -64.897073000000006], [-63.001393999999998, -64.642308], [-62.041685999999999, -64.583551999999997], [-61.414928000000003, -64.270031000000003], [-60.709854999999997, -64.074073999999996], [-59.887269000000003, -63.956510000000002], [-59.162585, -63.701745000000003], [-58.594557000000002, -63.388224000000001], [-57.811143000000001, -63.270659999999999], [-57.223582, -63.525424999999998], [-57.595730000000003, -63.858531999999997], [-58.614142999999999, -64.152467000000001]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u043d\u0442\u0430\u0440\u043a\u0442\u0438\u0434\u0430", "fr": "Antarctique", "en": "Antarctica", "nl": "Antarctica", "pt": "Ant\u00e1rtica", "no": "Antarktika", "de": "Antarktika", "it": "Antartide", "sv": "Antarktis", "pl": "Antarktyda", "fi": "Etel\u00e4manner", "zh": "\u5357\u6781\u6d32", "ja": "\u5357\u6975\u5927\u9678", "es": "Ant\u00e1rtida"}, "label_fr": "Antarctique", "name": "Antarctica", "dbpedia_uri": "http://dbpedia.org/resource/Antarctica"}, "id": "ATA"}, {"geometry": {"type": "Polygon", "coordinates": [[[68.935000000000002, -48.625], [69.579999999999998, -48.939999999999998], [70.525000000000006, -49.064999999999998], [70.560000000000002, -49.255000000000003], [70.280000000000001, -49.710000000000001], [68.745000000000005, -49.774999999999999], [68.719999999999999, -49.2425], [68.867500000000007, -48.829999999999998], [68.935000000000002, -48.625]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0424\u0440\u0430\u043d\u0446\u0443\u0437\u0441\u043a\u0438\u0435 \u042e\u0436\u043d\u044b\u0435 \u0438 \u0410\u043d\u0442\u0430\u0440\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0438", "fr": "Terres australes et antarctiques fran\u00e7aises", "en": "French Southern and Antarctic Lands", "nl": "Franse Zuidelijke en Antarctische Gebieden", "pt": "Terras Austrais e Ant\u00e1rticas Francesas", "no": "De franske s\u00f8rterritorier", "de": "Franz\u00f6sische S\u00fcd- und Antarktisgebiete", "it": "Terre australi e antartiche francesi", "sv": "Franska sydterritorierna", "pl": "Francuskie Terytoria Po\u0142udniowe i Antarktyczne", "fi": "Ranskan etel\u00e4iset ja antarktiset alueet", "zh": "\u6cd5\u5c5e\u5357\u90e8\u9886\u5730", "ja": "\u30d5\u30e9\u30f3\u30b9\u9818\u5357\u65b9\u30fb\u5357\u6975\u5730\u57df", "es": "Tierras Australes y Ant\u00e1rticas Francesas"}, "label_fr": "Terres australes et antarctiques fran\u00e7aises", "name": "French Southern and Antarctic Lands", "dbpedia_uri": "http://dbpedia.org/resource/French_Southern_and_Antarctic_Lands"}, "id": "ATF"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[145.39797799999999, -40.792549000000001], [146.36412100000001, -41.137695000000001], [146.90858399999999, -41.000546], [147.68925899999999, -40.808258000000002], [148.28906799999999, -40.875438000000003], [148.35986500000001, -42.062444999999997], [148.017301, -42.407024], [147.914052, -43.211522000000002], [147.56456399999999, -42.937688999999999], [146.87034299999999, -43.634596999999999], [146.66332700000001, -43.580854000000002], [146.04837800000001, -43.549745000000001], [145.43192999999999, -42.693776], [145.29508999999999, -42.033610000000003], [144.71807100000001, -41.162551999999998], [144.74375499999999, -40.703975], [145.39797799999999, -40.792549000000001]]], [[[143.56181100000001, -13.763655999999999], [143.922099, -14.548311], [144.563714, -14.171176000000001], [144.89490799999999, -14.594457999999999], [145.37472399999999, -14.984976], [145.27199100000001, -15.428205], [145.48526000000001, -16.285672000000002], [145.637033, -16.784918000000001], [145.888904, -16.906925999999999], [146.16030900000001, -17.761655000000001], [146.06367399999999, -18.280073000000002], [146.38747799999999, -18.958273999999999], [147.471082, -19.480723000000001], [148.17760200000001, -19.955939000000001], [148.84841399999999, -20.391210000000001], [148.717465, -20.633469000000002], [149.28942000000001, -21.260511000000001], [149.678337, -22.342511999999999], [150.077382, -22.122783999999999], [150.48293899999999, -22.556142000000001], [150.72726499999999, -22.402405000000002], [150.89955399999999, -23.462236999999998], [151.60917499999999, -24.076256000000001], [152.07354000000001, -24.457886999999999], [152.855197, -25.267500999999999], [153.13616200000001, -26.071173000000002], [153.16194899999999, -26.641318999999999], [153.09290899999999, -27.260300000000001], [153.569469, -28.110067000000001], [153.51210800000001, -28.995076999999998], [153.33909499999999, -29.458202], [153.06924100000001, -30.350239999999999], [153.08960200000001, -30.923642000000001], [152.89157800000001, -31.640446000000001], [152.45000200000001, -32.550002999999997], [151.70911699999999, -33.041342], [151.34397200000001, -33.816023000000001], [151.01055500000001, -34.310360000000003], [150.71413899999999, -35.173459999999999], [150.32821999999999, -35.671878999999997], [150.07521199999999, -36.420206], [149.946124, -37.109051999999998], [149.99728400000001, -37.425260999999999], [149.42388199999999, -37.772680999999999], [148.30462199999999, -37.809061], [147.381733, -38.219217], [146.922123, -38.606532000000001], [146.31792200000001, -39.035756999999997], [145.48965200000001, -38.593767999999997], [144.87697600000001, -38.417448], [145.03221199999999, -37.896188000000002], [144.485682, -38.085324], [143.60997399999999, -38.809465000000003], [142.74542700000001, -38.538268000000002], [142.17832999999999, -38.380034000000002], [141.606582, -38.308514000000002], [140.63857899999999, -38.019333000000003], [139.99215799999999, -37.402935999999997], [139.806588, -36.643602999999999], [139.57414800000001, -36.138362000000001], [139.082808, -35.732754], [138.12074799999999, -35.612296000000001], [138.44946200000001, -35.127260999999997], [138.20756399999999, -34.384723000000001], [137.71916999999999, -35.076824999999999], [136.82940600000001, -35.260534999999997], [137.35237100000001, -34.707338999999997], [137.50388599999999, -34.130268000000001], [137.89011600000001, -33.640478999999999], [137.810328, -32.900007000000002], [136.996837, -33.752771000000003], [136.37206900000001, -34.094766], [135.98904300000001, -34.890118000000001], [135.208213, -34.478670000000001], [135.23921799999999, -33.947952999999998], [134.613417, -33.222777999999998], [134.085904, -32.848072000000002], [134.27390299999999, -32.617234000000003], [132.99077700000001, -32.011223999999999], [132.28808100000001, -31.982647], [131.32633100000001, -31.495802999999999], [129.53579400000001, -31.590423000000001], [128.240938, -31.948488999999999], [127.102867, -32.282266999999997], [126.148714, -32.215966000000002], [125.088623, -32.728751000000003], [124.221648, -32.959487000000003], [124.028947, -33.483846999999997], [123.659667, -33.890179000000003], [122.811036, -33.914467000000002], [122.183064, -34.003402000000001], [121.29919099999999, -33.821035999999999], [120.580268, -33.930177], [119.89369499999999, -33.976064999999998], [119.29889900000001, -34.509366], [119.007341, -34.464148999999999], [118.505718, -34.746819000000002], [118.02497200000001, -35.064732999999997], [117.295507, -35.025458999999998], [116.62510899999999, -35.025097000000002], [115.564347, -34.386428000000002], [115.026809, -34.196517], [115.048616, -33.623424999999997], [115.545123, -33.487257999999997], [115.714674, -33.259571999999999], [115.679379, -32.900368999999998], [115.80164499999999, -32.205061999999998], [115.689611, -31.612437], [115.160909, -30.601593999999999], [114.99704300000001, -30.030725], [115.040038, -29.461095], [114.641974, -28.810231000000002], [114.61649800000001, -28.516399], [114.173579, -28.118077], [114.048884, -27.334765000000001], [113.477498, -26.543133999999998], [113.338953, -26.116544999999999], [113.778358, -26.549025], [113.440962, -25.621278], [113.93690100000001, -25.911235000000001], [114.23285199999999, -26.298445999999998], [114.216161, -25.786280999999999], [113.721255, -24.998939], [113.625344, -24.683971], [113.393523, -24.384764000000001], [113.502044, -23.806349999999998], [113.706993, -23.560214999999999], [113.843418, -23.059987], [113.736552, -22.475474999999999], [114.149756, -21.755880999999999], [114.225307, -22.517488], [114.647762, -21.829519999999999], [115.460167, -21.495173000000001], [115.947373, -21.068688000000002], [116.71161499999999, -20.701682000000002], [117.16631599999999, -20.623598999999999], [117.441545, -20.746898999999999], [118.22955899999999, -20.374207999999999], [118.836085, -20.263311000000002], [118.987807, -20.044203], [119.252494, -19.952942], [119.80522499999999, -19.976506000000001], [120.85621999999999, -19.683707999999999], [121.399856, -19.239756], [121.65513799999999, -18.705317999999998], [122.241665, -18.197648999999998], [122.286624, -17.798603], [122.312772, -17.254967000000001], [123.012574, -16.405200000000001], [123.433789, -17.268557999999999], [123.859345, -17.069035], [123.503242, -16.596506000000002], [123.81707299999999, -16.111315999999999], [124.258287, -16.327943999999999], [124.37972600000001, -15.56706], [124.926153, -15.075100000000001], [125.167275, -14.680396], [125.670087, -14.510070000000001], [125.685796, -14.230656], [126.12514899999999, -14.347341], [126.14282300000001, -14.095986999999999], [126.582589, -13.952790999999999], [127.065867, -13.817968], [127.804633, -14.276906], [128.35969, -14.86917], [128.98554300000001, -14.875991000000001], [129.62147300000001, -14.969784000000001], [129.40960000000001, -14.420669999999999], [129.88864100000001, -13.618703], [130.33946599999999, -13.357376], [130.18350599999999, -13.107519999999999], [130.617795, -12.536391999999999], [131.22349500000001, -12.183649000000001], [131.73509100000001, -12.302453], [132.575298, -12.114041], [132.55721199999999, -11.603012], [131.82469800000001, -11.273782000000001], [132.357224, -11.128519000000001], [133.01956100000001, -11.376410999999999], [133.55084600000001, -11.786515], [134.393068, -12.042365], [134.67863199999999, -11.941183000000001], [135.29849100000001, -12.248606000000001], [135.88269299999999, -11.962267000000001], [136.25838100000001, -12.049341999999999], [136.49247500000001, -11.857208999999999], [136.95161999999999, -12.351959000000001], [136.685125, -12.887223000000001], [136.305407, -13.291230000000001], [135.961758, -13.324509000000001], [136.077617, -13.724278], [135.78383600000001, -14.223989], [135.428664, -14.715432], [135.50018399999999, -14.997741], [136.295175, -15.550265], [137.06536, -15.870761999999999], [137.58047099999999, -16.215081999999999], [138.30321699999999, -16.807604000000001], [138.58516399999999, -16.806622000000001], [139.108543, -17.062678999999999], [139.26057499999999, -17.371600999999998], [140.21524500000001, -17.710805000000001], [140.875463, -17.369069], [141.07111, -16.832046999999999], [141.27409499999999, -16.388870000000001], [141.398222, -15.840532], [141.70218299999999, -15.044921], [141.56338, -14.561332999999999], [141.63552000000001, -14.270395000000001], [141.519869, -13.698078000000001], [141.65092000000001, -12.944687999999999], [141.842691, -12.741548], [141.68699000000001, -12.407614000000001], [141.928629, -11.877466], [142.11848800000001, -11.328042], [142.14370600000001, -11.042737000000001], [142.51526000000001, -10.668186], [142.79731000000001, -11.157355000000001], [142.86676299999999, -11.784706999999999], [143.11594700000001, -11.90563], [143.15863200000001, -12.325656], [143.52212399999999, -12.834358], [143.59715800000001, -13.400422000000001], [143.56181100000001, -13.763655999999999]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0438\u044f", "fr": "Australie", "en": "Australia", "nl": "Australi\u00eb (land)", "pt": "Austr\u00e1lia", "no": "Australia", "de": "Australien", "it": "Australia", "sv": "Australien", "pl": "Australia", "fi": "Australia", "zh": "\u6fb3\u5927\u5229\u4e9a", "ja": "\u30aa\u30fc\u30b9\u30c8\u30e9\u30ea\u30a2", "es": "Australia"}, "label_fr": "Australie", "name": "Australia", "dbpedia_uri": "http://dbpedia.org/resource/Australia"}, "id": "AUS"}, {"geometry": {"type": "Polygon", "coordinates": [[[16.979666999999999, 48.123497], [16.903753999999999, 47.714866000000001], [16.340584, 47.712902], [16.534268000000001, 47.496170999999997], [16.202297999999999, 46.852386000000003], [16.011664, 46.683610999999999], [15.137092000000001, 46.658703000000003], [14.632472, 46.431817000000002], [13.806475000000001, 46.509306000000002], [12.376485000000001, 46.767558999999999], [12.153088, 47.115392999999997], [11.164828, 46.941578999999997], [11.048556, 46.751359000000001], [10.442701, 46.893546000000001], [9.9324480000000008, 46.920727999999997], [9.4799699999999998, 47.102809999999998], [9.6329320000000003, 47.347600999999997], [9.5942260000000008, 47.525058000000001], [9.8960679999999996, 47.580196999999998], [10.402084, 47.302487999999997], [10.544504, 47.566398999999997], [11.426413999999999, 47.523766000000002], [12.141356999999999, 47.703082999999999], [12.620760000000001, 47.672387999999998], [12.932627, 47.467646000000002], [13.025850999999999, 47.637583999999997], [12.884103, 48.289146000000002], [13.243357, 48.416114999999998], [13.595946, 48.877172000000002], [14.338898, 48.555304999999997], [14.901446999999999, 48.964402], [15.253416, 49.039073999999999], [16.029647000000001, 48.733899000000001], [16.499282999999998, 48.785808000000003], [16.960287999999998, 48.596981999999997], [16.879982999999999, 48.470013000000002], [16.979666999999999, 48.123497]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u0432\u0441\u0442\u0440\u0438\u044f", "fr": "Autriche", "en": "Austria", "nl": "Oostenrijk", "pt": "\u00c1ustria", "no": "\u00d8sterrike", "de": "\u00d6sterreich", "it": "Austria", "sv": "\u00d6sterrike", "pl": "Austria", "fi": "It\u00e4valta", "zh": "\u5965\u5730\u5229", "ja": "\u30aa\u30fc\u30b9\u30c8\u30ea\u30a2", "es": "Austria"}, "label_fr": "Autriche", "name": "Austria", "dbpedia_uri": "http://dbpedia.org/resource/Austria"}, "id": "AUT"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[45.001987, 39.740003999999999], [45.298144999999998, 39.471750999999998], [45.739978000000001, 39.473998999999999], [45.735379000000002, 39.319718999999999], [46.143622999999998, 38.741200999999997], [45.457721999999997, 38.874139], [44.952688000000002, 39.335765000000002], [44.793990000000001, 39.713003], [45.001987, 39.740003999999999]]], [[[47.373314999999998, 41.219732], [47.815666, 41.151415999999998], [47.987282999999998, 41.405819000000001], [48.584353, 41.808869999999999], [49.110264000000001, 41.282286999999997], [49.618915000000001, 40.572924], [50.084829999999997, 40.526156999999998], [50.392820999999998, 40.256560999999998], [49.569201999999997, 40.176101000000003], [49.395259000000003, 39.399481999999999], [49.223227999999999, 39.049219000000001], [48.856532000000001, 38.815486], [48.883248999999999, 38.320245], [48.634374999999999, 38.270378000000001], [48.010744000000003, 38.794015000000002], [48.355528999999997, 39.288764999999998], [48.060094999999997, 39.582234999999997], [47.685079000000002, 39.508364], [46.505719999999997, 38.770605000000003], [46.483499000000002, 39.464154999999998], [46.034534000000001, 39.628020999999997], [45.610011999999998, 39.899994], [45.891907000000003, 40.218476000000003], [45.359175, 40.561503999999999], [45.560350999999997, 40.812289999999997], [45.179496, 40.985354000000001], [44.972479999999997, 41.248128999999999], [45.217426000000003, 41.411451999999997], [45.962600999999999, 41.123873000000003], [46.501637000000002, 41.064444999999999], [46.637908000000003, 41.181673000000004], [46.145432, 41.722802000000001], [46.404950999999997, 41.860675000000001], [46.686070999999998, 41.827137], [47.373314999999998, 41.219732]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d", "fr": "Azerba\u00efdjan", "en": "Azerbaijan", "nl": "Azerbeidzjan", "pt": "Azerbaij\u00e3o", "no": "Aserbajdsjan", "de": "Aserbaidschan", "it": "Azerbaigian", "sv": "Azerbajdzjan", "pl": "Azerbejd\u017can", "fi": "Azerbaid\u017ean", "zh": "\u963f\u585e\u62dc\u7586", "ja": "\u30a2\u30bc\u30eb\u30d0\u30a4\u30b8\u30e3\u30f3", "es": "Azerbaiy\u00e1n"}, "label_fr": "Azerba\u00efdjan", "name": "Azerbaijan", "dbpedia_uri": "http://dbpedia.org/resource/Azerbaijan"}, "id": "AZE"}, {"geometry": {"type": "Polygon", "coordinates": [[[29.339998000000001, -4.4999830000000003], [29.276384, -3.2939069999999999], [29.024926000000001, -2.8392580000000001], [29.632176000000001, -2.9178579999999998], [29.938358999999998, -2.348487], [30.469695999999999, -2.4138579999999998], [30.527677000000001, -2.8076319999999999], [30.743013000000001, -3.0342850000000001], [30.752262999999999, -3.3593299999999999], [30.505559999999999, -3.5685669999999998], [30.116333000000001, -4.0901379999999996], [29.753512000000001, -4.4523890000000002], [29.339998000000001, -4.4999830000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0443\u0440\u0443\u043d\u0434\u0438", "fr": "Burundi", "en": "Burundi", "nl": "Burundi", "pt": "Burundi", "no": "Burundi", "de": "Burundi", "it": "Burundi", "sv": "Burundi", "pl": "Burundi", "fi": "Burundi", "zh": "\u84b2\u9686\u5730", "ja": "\u30d6\u30eb\u30f3\u30b8", "es": "Burundi"}, "label_fr": "Burundi", "name": "Burundi", "dbpedia_uri": "http://dbpedia.org/resource/Burundi"}, "id": "BDI"}, {"geometry": {"type": "Polygon", "coordinates": [[[3.3149709999999999, 51.345781000000002], [4.0470709999999999, 51.267259000000003], [4.9739909999999998, 51.475023999999998], [5.6069760000000004, 51.037298], [6.1566580000000002, 50.803721000000003], [6.0430729999999997, 50.128051999999997], [5.7824169999999997, 50.090328], [5.6740519999999997, 49.529483999999997], [4.7992220000000003, 49.985373000000003], [4.2860230000000001, 49.907496999999999], [3.588184, 50.378991999999997], [3.1232519999999999, 50.780363000000001], [2.6584219999999998, 50.796847999999997], [2.5135730000000001, 51.148505999999998], [3.3149709999999999, 51.345781000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0435\u043b\u044c\u0433\u0438\u044f", "fr": "Belgique", "en": "Belgium", "nl": "Belgi\u00eb", "pt": "B\u00e9lgica", "no": "Belgia", "de": "Belgien", "it": "Belgio", "sv": "Belgien", "pl": "Belgia", "fi": "Belgia", "zh": "\u6bd4\u5229\u65f6", "ja": "\u30d9\u30eb\u30ae\u30fc", "es": "B\u00e9lgica"}, "label_fr": "Belgique", "name": "Belgium", "dbpedia_uri": "http://dbpedia.org/resource/Belgium"}, "id": "BEL"}, {"geometry": {"type": "Polygon", "coordinates": [[[2.6917019999999998, 6.2588169999999996], [1.8652409999999999, 6.1421580000000002], [1.618951, 6.8320379999999998], [1.6644779999999999, 9.1285900000000009], [1.4630430000000001, 9.3346239999999998], [1.4250609999999999, 9.8253950000000003], [1.0777950000000001, 10.175606999999999], [0.77233600000000002, 10.470808], [0.899563, 10.997339], [1.2434700000000001, 11.110511000000001], [1.4471780000000001, 11.547719000000001], [1.935986, 11.64115], [2.154474, 11.940149999999999], [2.490164, 12.233052000000001], [2.848643, 12.235636], [3.6111800000000001, 11.660167], [3.5722160000000001, 11.327939000000001], [3.7971119999999998, 10.734745999999999], [3.6000700000000001, 10.332186], [3.705438, 10.06321], [3.2203520000000001, 9.444153], [2.9123079999999999, 9.1376080000000002], [2.7237930000000001, 8.5068450000000002], [2.749063, 7.8707339999999997], [2.6917019999999998, 6.2588169999999996]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0435\u043d\u0438\u043d", "fr": "B\u00e9nin", "en": "Benin", "nl": "Benin", "pt": "Cultura do Benim", "no": "Benin", "de": "Benin", "it": "Benin", "sv": "Benin", "pl": "Benin", "fi": "Benin", "zh": "\u8d1d\u5b81", "ja": "\u30d9\u30ca\u30f3", "es": "Ben\u00edn"}, "label_fr": "B\u00e9nin", "name": "Benin", "dbpedia_uri": "http://dbpedia.org/resource/Benin"}, "id": "BEN"}, {"geometry": {"type": "Polygon", "coordinates": [[[-2.827496, 9.6424610000000008], [-3.5118990000000001, 9.9003259999999997], [-3.9804490000000001, 9.8623440000000002], [-4.330247, 9.6108349999999998], [-4.779884, 9.8219849999999997], [-4.9546530000000004, 10.152714], [-5.4043419999999998, 10.370737], [-5.4705649999999997, 10.951269999999999], [-5.1978429999999998, 11.375146000000001], [-5.220942, 11.713858999999999], [-4.4271659999999997, 12.542646], [-4.280405, 13.228444], [-4.0063909999999998, 13.472485000000001], [-3.5228030000000001, 13.337662], [-3.103707, 13.541266999999999], [-2.9676939999999998, 13.79815], [-2.1918250000000001, 14.246418], [-2.0010349999999999, 14.559008], [-1.0663629999999999, 14.973815], [-0.51585400000000003, 15.116158], [-0.26625700000000002, 14.924308999999999], [0.374892, 14.928908], [0.29564600000000002, 14.444235000000001], [0.42992799999999998, 13.988733], [0.99304599999999998, 13.335750000000001], [1.024103, 12.851826000000001], [2.177108, 12.625018000000001], [2.154474, 11.940149999999999], [1.935986, 11.64115], [1.4471780000000001, 11.547719000000001], [1.2434700000000001, 11.110511000000001], [0.899563, 10.997339], [0.023803000000000001, 11.018682], [-0.43870199999999998, 11.098341], [-0.76157600000000003, 10.93693], [-1.2033579999999999, 11.009819], [-2.9404089999999998, 10.96269], [-2.9638960000000001, 10.395334999999999], [-2.827496, 9.6424610000000008]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0443\u0440\u043a\u0438\u043d\u0430 \u0424\u0430\u0441\u043e", "fr": "Burkina Faso", "en": "Burkina Faso", "nl": "Burkina Faso", "pt": "Burkina Faso", "no": "Burkina Faso", "de": "Burkina Faso", "it": "Burkina Faso", "sv": "Burkina Faso", "pl": "Burkina Faso", "fi": "Burkina Faso", "zh": "\u5e03\u5409\u7d0d\u6cd5\u7d22", "ja": "\u30d6\u30eb\u30ad\u30ca\u30d5\u30a1\u30bd", "es": "Burkina Faso"}, "label_fr": "Burkina Faso", "name": "Burkina Faso", "dbpedia_uri": "http://dbpedia.org/resource/Burkina_Faso"}, "id": "BFA"}, {"geometry": {"type": "Polygon", "coordinates": [[[92.672720999999996, 22.041239000000001], [92.652257000000006, 21.324048000000001], [92.303234000000003, 21.475484999999999], [92.368554000000003, 20.670883], [92.082886000000002, 21.192195000000002], [92.025215000000003, 21.70157], [91.834890999999999, 22.182936000000002], [91.417086999999995, 22.765018999999999], [90.496005999999994, 22.805016999999999], [90.586956999999998, 22.392793999999999], [90.272970999999998, 21.836368], [89.847466999999995, 22.039145999999999], [89.70205, 21.857116000000001], [89.418863000000002, 21.966179], [89.031960999999995, 22.055707999999999], [88.876311999999999, 22.879145999999999], [88.529769999999999, 23.631142000000001], [88.699939999999998, 24.233715], [88.084422000000004, 24.501657000000002], [88.306372999999994, 24.866078999999999], [88.931554000000006, 25.238692], [88.209789000000001, 25.768066000000001], [88.563049000000007, 26.446525999999999], [89.355093999999994, 26.014406999999999], [89.832481000000001, 25.965081999999999], [89.920693, 25.269749999999998], [90.872210999999993, 25.132601000000001], [91.799595999999994, 25.147431999999998], [92.376202000000006, 24.976693000000001], [91.915092999999999, 24.130413999999998], [91.467730000000003, 24.072638999999999], [91.158963, 23.503526999999998], [91.706474999999998, 22.985264000000001], [91.869928000000002, 23.624345999999999], [92.146034999999998, 23.627499], [92.672720999999996, 22.041239000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0430\u043d\u0433\u043b\u0430\u0434\u0435\u0448", "fr": "Bangladesh", "en": "Bangladesh", "nl": "Bangladesh", "pt": "Bangladesh", "no": "Bangladesh", "de": "Bangladesch", "it": "Bangladesh", "sv": "Bangladesh", "pl": "Bangladesz", "fi": "Bangladesh", "zh": "\u5b5f\u52a0\u62c9\u56fd", "ja": "\u30d0\u30f3\u30b0\u30e9\u30c7\u30b7\u30e5", "es": "Banglad\u00e9s"}, "label_fr": "Bangladesh", "name": "Bangladesh", "dbpedia_uri": "http://dbpedia.org/resource/Bangladesh"}, "id": "BGD"}, {"geometry": {"type": "Polygon", "coordinates": [[[22.657150000000001, 44.234923000000002], [22.944832000000002, 43.823785000000001], [23.332301999999999, 43.897010999999999], [24.100679, 43.741050999999999], [25.569272000000002, 43.688445000000002], [26.065159000000001, 43.943494000000001], [27.2424, 44.175986000000002], [27.970106999999999, 43.812468000000003], [28.558081000000001, 43.707462], [28.039095, 43.293171999999998], [27.673898000000001, 42.577891999999999], [27.99672, 42.007359000000001], [27.135739000000001, 42.141485000000003], [26.117042000000001, 41.826904999999996], [26.106138000000001, 41.328899], [25.197201, 41.234485999999997], [24.492645, 41.583896000000003], [23.692074000000002, 41.309080999999999], [22.952376999999998, 41.337994000000002], [22.881374000000001, 41.999296999999999], [22.380526, 42.320259999999998], [22.545012, 42.461362000000001], [22.436595000000001, 42.580320999999998], [22.604800999999998, 42.898519], [22.986018999999999, 43.211160999999997], [22.500157000000002, 43.642814000000001], [22.410446, 44.008063], [22.657150000000001, 44.234923000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u043e\u043b\u0433\u0430\u0440\u0438\u044f", "fr": "Bulgarie", "en": "Bulgaria", "nl": "Bulgarije", "pt": "Bulg\u00e1ria", "no": "Bulgaria", "de": "Bulgarien", "it": "Bulgaria", "sv": "Bulgarien", "pl": "Bu\u0142garia", "fi": "Bulgaria", "zh": "\u4fdd\u52a0\u5229\u4e9a", "ja": "\u30d6\u30eb\u30ac\u30ea\u30a2", "es": "Bulgaria"}, "label_fr": "Bulgarie", "name": "Bulgaria", "dbpedia_uri": "http://dbpedia.org/resource/Bulgaria"}, "id": "BGR"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-77.534660000000002, 23.75975], [-77.780000000000001, 23.710000000000001], [-78.034049999999993, 24.286149999999999], [-78.408479999999997, 24.57564], [-78.190870000000004, 25.2103], [-77.890000000000001, 25.170000000000002], [-77.540000000000006, 24.34], [-77.534660000000002, 23.75975]]], [[[-77.819999999999993, 26.579999999999998], [-78.909999999999997, 26.420000000000002], [-78.980000000000004, 26.789999999999999], [-78.510000000000005, 26.870000000000001], [-77.849999999999994, 26.84], [-77.819999999999993, 26.579999999999998]]], [[[-77, 26.59], [-77.172550000000001, 25.879180000000002], [-77.356409999999997, 26.007349999999999], [-77.340000000000003, 26.530000000000001], [-77.788020000000003, 26.925160000000002], [-77.790000000000006, 27.039999999999999], [-77, 26.59]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0430\u0433\u0430\u043c\u0441\u043a\u0438\u0435 \u041e\u0441\u0442\u0440\u043e\u0432\u0430", "fr": "Bahamas", "en": "The Bahamas", "nl": "Bahama's", "pt": "Bahamas", "no": "Bahamas", "de": "Bahamas", "it": "Bahamas", "sv": "Bahamas", "pl": "Bahamy", "fi": "Bahama", "zh": "\u5df4\u54c8\u9a6c", "ja": "\u30d0\u30cf\u30de", "es": "Bahamas"}, "label_fr": "Bahamas", "name": "The Bahamas", "dbpedia_uri": "http://dbpedia.org/resource/The_Bahamas"}, "id": "BHS"}, {"geometry": {"type": "Polygon", "coordinates": [[[19.005486000000001, 44.860233999999998], [19.368030000000001, 44.863], [19.117609999999999, 44.423070000000003], [19.59976, 44.038469999999997], [19.454000000000001, 43.568100000000001], [19.218520000000002, 43.52384], [19.031649999999999, 43.43253], [18.706479999999999, 43.200110000000002], [18.559999999999999, 42.649999999999999], [17.674921999999999, 43.028562999999998], [17.297373, 43.446340999999997], [16.916156000000001, 43.667721999999998], [16.456443, 44.041240000000002], [16.239660000000001, 44.351143], [15.750026, 44.818711999999998], [15.959367, 45.233777000000003], [16.318156999999999, 45.004126999999997], [16.534939000000001, 45.211607999999998], [17.002146, 45.233777000000003], [17.861782999999999, 45.067740000000001], [18.553214000000001, 45.081589999999998], [19.005486000000001, 44.860233999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u043e\u0441\u043d\u0438\u044f \u0438 \u0413\u0435\u0440\u0446\u0435\u0433\u043e\u0432\u0438\u043d\u0430", "fr": "Bosnie-Herz\u00e9govine", "en": "Bosnia and Herzegovina", "nl": "Bosni\u00eb en Herzegovina", "pt": "B\u00f3snia e Herzegovina", "no": "Bosnia-Hercegovina", "de": "Bosnien und Herzegowina", "it": "Bosnia-Erzegovina", "sv": "Bosnien och Hercegovina", "pl": "Bo\u015bnia i Hercegowina", "fi": "Bosnia ja Hertsegovina", "zh": "\u6ce2\u65af\u5c3c\u4e9a\u548c\u9ed1\u585e\u54e5\u7ef4\u90a3", "ja": "\u30dc\u30b9\u30cb\u30a2\u30fb\u30d8\u30eb\u30c4\u30a7\u30b4\u30d3\u30ca", "es": "Bosnia y Herzegovina"}, "label_fr": "Bosnie-Herz\u00e9govine", "name": "Bosnia and Herzegovina", "dbpedia_uri": "http://dbpedia.org/resource/Bosnia_and_Herzegovina"}, "id": "BIH"}, {"geometry": {"type": "Polygon", "coordinates": [[[23.484127999999998, 53.912497999999999], [24.450683999999999, 53.905701999999998], [25.536353999999999, 54.282423000000001], [25.768433000000002, 54.846963000000002], [26.588279, 55.167175999999998], [26.494330999999999, 55.615107000000002], [27.102460000000001, 55.783313999999997], [28.176708999999999, 56.169130000000003], [29.229513000000001, 55.918343999999998], [29.371572, 55.670090999999999], [29.896294000000001, 55.789462999999998], [30.873909000000001, 55.550975999999999], [30.971836, 55.081547999999998], [30.757534, 54.811771], [31.384471999999999, 54.157055999999997], [31.791423999999999, 53.974639000000003], [31.731273000000002, 53.794029000000002], [32.405599000000002, 53.618045000000002], [32.693643000000002, 53.351421000000002], [32.304518999999999, 53.132725999999998], [31.497644000000001, 53.167427000000004], [31.305201, 53.073996000000001], [31.540018, 52.742052000000001], [31.785997999999999, 52.101678], [30.927548999999999, 52.042352999999999], [30.619454000000001, 51.822806], [30.555116999999999, 51.319502999999997], [30.157364000000001, 51.416137999999997], [29.254937999999999, 51.368234000000001], [28.992834999999999, 51.602043999999999], [28.617612999999999, 51.427714000000002], [28.241614999999999, 51.572226999999998], [27.454066000000001, 51.592303000000001], [26.337959000000001, 51.832289000000003], [25.327788000000002, 51.910656000000003], [24.553106, 51.888461], [24.005078000000001, 51.617443999999999], [23.527070999999999, 51.578454000000001], [23.508002000000001, 52.023646999999997], [23.199494000000001, 52.486977000000003], [23.799199000000002, 52.691099000000001], [23.804935, 53.089731], [23.527536000000001, 53.470122000000003], [23.484127999999998, 53.912497999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0435\u043b\u043e\u0440\u0443\u0441\u0441\u0438\u044f", "fr": "Bi\u00e9lorussie", "en": "Belarus", "nl": "Wit-Rusland", "pt": "Bielorr\u00fassia", "no": "Hviterussland", "de": "Wei\u00dfrussland", "it": "Bielorussia", "sv": "Vitryssland", "pl": "Bia\u0142oru\u015b", "fi": "Valko-Ven\u00e4j\u00e4", "zh": "\u767d\u4fc4\u7f57\u65af", "ja": "\u30d9\u30e9\u30eb\u30fc\u30b7", "es": "Bielorrusia"}, "label_fr": "Bi\u00e9lorussie", "name": "Belarus", "dbpedia_uri": "http://dbpedia.org/resource/Belarus"}, "id": "BLR"}, {"geometry": {"type": "Polygon", "coordinates": [[[-89.143079999999998, 17.808319000000001], [-89.150908999999999, 17.955468], [-89.029857000000007, 18.001511000000001], [-88.848343999999997, 17.883198], [-88.490122999999997, 18.486830999999999], [-88.300031000000004, 18.499981999999999], [-88.296335999999997, 18.353273000000002], [-88.106813000000002, 18.348673999999999], [-88.123479000000003, 18.076675000000002], [-88.285354999999996, 17.644143], [-88.197867000000002, 17.489474999999999], [-88.302640999999994, 17.131694], [-88.239518000000004, 17.036066000000002], [-88.355428000000003, 16.530774000000001], [-88.551824999999994, 16.265467000000001], [-88.732433999999998, 16.233635], [-88.930612999999994, 15.887273], [-89.229122000000004, 15.886938000000001], [-89.150806000000003, 17.015577], [-89.143079999999998, 17.808319000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0435\u043b\u0438\u0437", "fr": "Belize", "en": "Belize", "nl": "Belize (land)", "pt": "Belize", "no": "Belize", "de": "Belize", "it": "Belize", "sv": "Belize", "pl": "Belize", "fi": "Belize", "zh": "\u4f2f\u5229\u5179", "ja": "\u30d9\u30ea\u30fc\u30ba", "es": "Belice"}, "label_fr": "Belize", "name": "Belize", "dbpedia_uri": "http://dbpedia.org/resource/Belize"}, "id": "BLZ"}, {"geometry": {"type": "Polygon", "coordinates": [[[-62.846468000000002, -22.034984999999999], [-63.986837999999999, -21.993644], [-64.377020999999999, -22.798090999999999], [-64.964892000000006, -22.075862000000001], [-66.273339000000007, -21.83231], [-67.106673999999998, -22.735925000000002], [-67.828180000000003, -22.872919], [-68.219913000000005, -21.494347000000001], [-68.757166999999995, -20.372658000000001], [-68.442224999999993, -19.405068], [-68.966818000000004, -18.981683], [-69.100246999999996, -18.260124999999999], [-69.590423999999999, -17.580012], [-68.959635000000006, -16.500698], [-69.389764, -15.660129], [-69.160347000000002, -15.323974], [-69.339534999999998, -14.953194999999999], [-68.948886999999999, -14.453639000000001], [-68.929224000000005, -13.602684], [-68.880080000000007, -12.899729000000001], [-68.665080000000003, -12.561299999999999], [-69.529678000000004, -10.951734], [-68.786158, -11.036379999999999], [-68.271253999999999, -11.014521], [-68.048192, -10.712059], [-67.173800999999997, -10.306812000000001], [-66.646907999999996, -9.9313310000000001], [-65.338435000000004, -9.7619880000000006], [-65.444837000000007, -10.511450999999999], [-65.321899000000002, -10.895872000000001], [-65.402281000000002, -11.566269999999999], [-64.316353000000007, -12.461978], [-63.196499000000003, -12.627033000000001], [-62.803060000000002, -13.000653], [-62.127080999999997, -13.198781], [-61.713203999999998, -13.489202000000001], [-61.084121000000003, -13.479384], [-60.503304, -13.775955], [-60.459198000000001, -14.354006999999999], [-60.264325999999997, -14.645979000000001], [-60.251148999999998, -15.077218999999999], [-60.542966, -15.093909999999999], [-60.158389999999997, -16.258284], [-58.241219999999998, -16.299572999999999], [-58.388058000000001, -16.877109000000001], [-58.280804000000003, -17.271709999999999], [-57.734558, -17.552468000000001], [-57.498370999999999, -18.174188000000001], [-57.676009000000001, -18.961839999999999], [-57.949997000000003, -19.400003999999999], [-57.853802000000002, -19.969995000000001], [-58.166392000000002, -20.176701000000001], [-58.183470999999997, -19.868399], [-59.115042000000003, -19.356905999999999], [-60.043565000000001, -19.342746999999999], [-61.786326000000003, -19.633737], [-62.265960999999997, -20.513735], [-62.291179, -21.051635000000001], [-62.685057, -22.249029], [-62.846468000000002, -22.034984999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u043e\u043b\u0438\u0432\u0438\u044f", "fr": "Bolivie", "en": "Bolivia", "nl": "Bolivia", "pt": "Bol\u00edvia", "no": "Bolivia", "de": "Bolivien", "it": "Bolivia", "sv": "Bolivia", "pl": "Boliwia", "fi": "Bolivia", "zh": "\u73bb\u5229\u7dad\u4e9e", "ja": "\u30dc\u30ea\u30d3\u30a2", "es": "Bolivia"}, "label_fr": "Bolivie", "name": "Bolivia", "dbpedia_uri": "http://dbpedia.org/resource/Bolivia"}, "id": "BOL"}, {"geometry": {"type": "Polygon", "coordinates": [[[-57.625132999999998, -30.216294999999999], [-56.290900000000001, -28.852761000000001], [-55.162286000000002, -27.881914999999999], [-54.490724999999998, -27.474757], [-53.648735000000002, -26.923473000000001], [-53.628349, -26.124865], [-54.130049999999997, -25.547639], [-54.625290999999997, -25.739255], [-54.428946000000003, -25.162185000000001], [-54.293475999999998, -24.570799999999998], [-54.292960000000001, -24.021014000000001], [-54.652833999999999, -23.839577999999999], [-55.027901999999997, -24.001273999999999], [-55.400747000000003, -23.956935000000001], [-55.517639000000003, -23.571998000000001], [-55.610683000000002, -22.655619000000002], [-55.797958000000001, -22.356929999999998], [-56.473317000000002, -22.086300000000001], [-56.881509999999999, -22.282153999999998], [-57.937156000000002, -22.090176], [-57.870674000000001, -20.732688], [-58.166392000000002, -20.176701000000001], [-57.853802000000002, -19.969995000000001], [-57.949997000000003, -19.400003999999999], [-57.676009000000001, -18.961839999999999], [-57.498370999999999, -18.174188000000001], [-57.734558, -17.552468000000001], [-58.280804000000003, -17.271709999999999], [-58.388058000000001, -16.877109000000001], [-58.241219999999998, -16.299572999999999], [-60.158389999999997, -16.258284], [-60.542966, -15.093909999999999], [-60.251148999999998, -15.077218999999999], [-60.264325999999997, -14.645979000000001], [-60.459198000000001, -14.354006999999999], [-60.503304, -13.775955], [-61.084121000000003, -13.479384], [-61.713203999999998, -13.489202000000001], [-62.127080999999997, -13.198781], [-62.803060000000002, -13.000653], [-63.196499000000003, -12.627033000000001], [-64.316353000000007, -12.461978], [-65.402281000000002, -11.566269999999999], [-65.321899000000002, -10.895872000000001], [-65.444837000000007, -10.511450999999999], [-65.338435000000004, -9.7619880000000006], [-66.646907999999996, -9.9313310000000001], [-67.173800999999997, -10.306812000000001], [-68.048192, -10.712059], [-68.271253999999999, -11.014521], [-68.786158, -11.036379999999999], [-69.529678000000004, -10.951734], [-70.093751999999995, -11.123972], [-70.548686000000004, -11.009147], [-70.481893999999997, -9.4901180000000007], [-71.302412000000004, -10.079435999999999], [-72.184890999999993, -10.053597999999999], [-72.563033000000004, -9.520194], [-73.226713000000004, -9.4622130000000002], [-73.015383, -9.0328330000000001], [-73.571059000000005, -8.4244470000000007], [-73.987234999999998, -7.5238300000000002], [-73.723400999999996, -7.3409990000000001], [-73.724486999999996, -6.9185949999999998], [-73.120026999999993, -6.629931], [-73.219711000000004, -6.0891890000000002], [-72.964506999999998, -5.7412510000000001], [-72.891927999999993, -5.2745610000000003], [-71.748406000000003, -4.5939829999999997], [-70.928843000000001, -4.4015909999999998], [-70.794769000000002, -4.2512650000000001], [-69.893635000000003, -4.2981870000000004], [-69.444102000000001, -1.556287], [-69.420485999999997, -1.122619], [-69.577065000000005, -0.54999200000000004], [-70.020656000000002, -0.18515599999999999], [-70.015566000000007, 0.54141399999999995], [-69.452395999999993, 0.70615899999999998], [-69.252433999999994, 0.60265100000000005], [-69.218637999999999, 0.98567700000000003], [-69.804597000000001, 1.089081], [-69.816973000000004, 1.7148049999999999], [-67.868565000000004, 1.692455], [-67.537809999999993, 2.0371630000000001], [-67.259997999999996, 1.7199990000000001], [-67.065048000000004, 1.130112], [-66.876326000000006, 1.2533609999999999], [-66.325765000000004, 0.72445199999999998], [-65.548266999999996, 0.78925400000000001], [-65.354713000000004, 1.0952820000000001], [-64.611012000000002, 1.3287310000000001], [-64.199306000000007, 1.492855], [-64.083084999999997, 1.916369], [-63.368788000000002, 2.2008999999999999], [-63.422866999999997, 2.4110680000000002], [-64.269998999999999, 2.4970059999999998], [-64.408828, 3.1267860000000001], [-64.368493999999998, 3.7972100000000002], [-64.816063999999997, 4.0564450000000001], [-64.628658999999999, 4.1484810000000003], [-63.888342999999999, 4.0205299999999999], [-63.093198000000001, 3.7705709999999999], [-62.804532999999999, 4.0069650000000001], [-62.085430000000002, 4.1621240000000004], [-60.966892999999999, 4.5364680000000002], [-60.601179000000002, 4.9180979999999996], [-60.733573999999997, 5.2002769999999998], [-60.213683000000003, 5.2444860000000002], [-59.980958999999999, 5.0140609999999999], [-60.111001999999999, 4.574967], [-59.767406000000001, 4.4235030000000002], [-59.538040000000002, 3.9588030000000001], [-59.815412999999999, 3.6064989999999999], [-59.974525, 2.755233], [-59.718546000000003, 2.2496299999999998], [-59.646044000000003, 1.786894], [-59.030861999999999, 1.317698], [-58.540013000000002, 1.2680880000000001], [-58.429476999999999, 1.4639420000000001], [-58.11345, 1.5071950000000001], [-57.660971000000004, 1.682585], [-57.335822999999998, 1.9485380000000001], [-56.782704000000003, 1.8637109999999999], [-56.539386, 1.8995230000000001], [-55.995697999999997, 1.8176669999999999], [-55.9056, 2.0219960000000001], [-56.073341999999997, 2.2207949999999999], [-55.973322000000003, 2.510364], [-55.569755000000001, 2.4215059999999999], [-55.097586999999997, 2.5237479999999999], [-54.524754000000001, 2.311849], [-54.088062999999998, 2.1055570000000001], [-53.778520999999998, 2.376703], [-53.554839000000001, 2.3348969999999998], [-53.418464999999998, 2.0533890000000001], [-52.939656999999997, 2.1248580000000001], [-52.556424999999997, 2.504705], [-52.249338000000002, 3.2410939999999999], [-51.657797000000002, 4.1562320000000001], [-51.317146000000001, 4.2034909999999996], [-51.069771000000003, 3.650398], [-50.508875000000003, 1.901564], [-49.974075999999997, 1.736483], [-49.947101000000004, 1.04619], [-50.699250999999997, 0.22298399999999999], [-50.388210999999998, -0.078445000000000001], [-48.620567000000001, -0.235489], [-48.584496999999999, -1.237805], [-47.824956, -0.58161799999999997], [-46.566583999999999, -0.94102799999999998], [-44.905703000000003, -1.5517399999999999], [-44.417619000000002, -2.13775], [-44.581589000000001, -2.6913079999999998], [-43.418790999999999, -2.3831099999999998], [-41.472656999999998, -2.9120180000000002], [-39.978664999999999, -2.8730540000000002], [-38.500382999999999, -3.7006519999999998], [-37.223252000000002, -4.8209460000000002], [-36.452936999999999, -5.1094039999999996], [-35.597796000000002, -5.1495040000000003], [-35.235388999999998, -5.4649369999999999], [-34.896030000000003, -6.7381929999999999], [-34.729993, -7.3432209999999998], [-35.128211999999998, -8.9964010000000005], [-35.636966999999999, -9.6492819999999995], [-37.046519000000004, -11.040721], [-37.683611999999997, -12.171195000000001], [-38.423876999999997, -13.038119], [-38.673887000000001, -13.057651999999999], [-38.953276000000002, -13.793369999999999], [-38.882297999999999, -15.667054], [-39.161091999999996, -17.208407000000001], [-39.267339, -17.867746], [-39.583520999999998, -18.262295999999999], [-39.760823000000002, -19.599112999999999], [-40.774740999999999, -20.904512], [-40.944755999999998, -21.937317], [-41.754164000000003, -22.370676], [-41.988284, -22.97007], [-43.074703999999997, -22.967693000000001], [-44.647812000000002, -23.351959000000001], [-45.352136000000002, -23.796842000000002], [-46.472093000000001, -24.088968999999999], [-47.648972000000001, -24.885199], [-48.495457999999999, -25.877025], [-48.641005, -26.623698000000001], [-48.474736, -27.175912], [-48.661520000000003, -28.186135], [-48.888457000000002, -28.674115], [-49.587328999999997, -29.224468999999999], [-50.696874000000001, -30.984465], [-51.576225999999998, -31.777698000000001], [-52.256081000000002, -32.245370000000001], [-52.7121, -33.196578000000002], [-53.373662000000003, -33.768377999999998], [-53.650543999999996, -33.202004000000002], [-53.209589000000001, -32.727665999999999], [-53.787951999999997, -32.047243000000002], [-54.572451999999998, -31.494510999999999], [-55.601509999999998, -30.853878999999999], [-55.973244999999999, -30.883075999999999], [-56.976025999999997, -30.109686], [-57.625132999999998, -30.216294999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0440\u0430\u0437\u0438\u043b\u0438\u044f", "fr": "Br\u00e9sil", "en": "Brazil", "nl": "Brazili\u00eb", "pt": "Brasil", "no": "Brasil", "de": "Brasilien", "it": "Brasile", "sv": "Brasilien", "pl": "Brazylia", "fi": "Brasilia", "zh": "\u5df4\u897f", "ja": "\u30d6\u30e9\u30b8\u30eb", "es": "Brasil"}, "label_fr": "Br\u00e9sil", "name": "Brazil", "dbpedia_uri": "http://dbpedia.org/resource/Brazil"}, "id": "BRA"}, {"geometry": {"type": "Polygon", "coordinates": [[[114.20401699999999, 4.525874], [114.59996099999999, 4.9000110000000001], [115.45071, 5.44773], [115.4057, 4.955228], [115.347461, 4.3166359999999999], [114.869557, 4.3483140000000002], [114.65959599999999, 4.0076369999999999], [114.20401699999999, 4.525874]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0440\u0443\u043d\u0435\u0439", "fr": "Brunei", "en": "Brunei", "nl": "Brunei", "pt": "Brunei", "no": "Brunei", "de": "Brunei", "it": "Brunei", "sv": "Brunei", "pl": "Brunei", "fi": "Brunei", "zh": "\u6587\u83b1", "ja": "\u30d6\u30eb\u30cd\u30a4", "es": "Brun\u00e9i"}, "label_fr": "Brunei", "name": "Brunei", "dbpedia_uri": "http://dbpedia.org/resource/Brunei"}, "id": "BRN"}, {"geometry": {"type": "Polygon", "coordinates": [[[91.696657000000002, 27.771742], [92.103712000000002, 27.452614000000001], [92.033484000000001, 26.83831], [91.217512999999997, 26.808648000000002], [90.373275000000007, 26.875724000000002], [89.744528000000003, 26.719403], [88.835643000000005, 27.098966000000001], [88.814248000000006, 27.299316000000001], [89.475809999999996, 28.042759], [90.015828999999997, 28.296438999999999], [90.730513999999999, 28.064954], [91.258853999999999, 28.040614000000001], [91.696657000000002, 27.771742]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u0443\u0442\u0430\u043d", "fr": "Bhoutan", "en": "Bhutan", "nl": "Bhutan", "pt": "But\u00e3o", "no": "Bhutan", "de": "Bhutan", "it": "Bhutan", "sv": "Bhutan", "pl": "Bhutan", "fi": "Bhutan", "zh": "\u4e0d\u4e39", "ja": "\u30d6\u30fc\u30bf\u30f3", "es": "But\u00e1n"}, "label_fr": "Bhoutan", "name": "Bhutan", "dbpedia_uri": "http://dbpedia.org/resource/Bhutan"}, "id": "BTN"}, {"geometry": {"type": "Polygon", "coordinates": [[[25.649163000000001, -18.536026], [25.850390999999998, -18.714413], [26.164791000000001, -19.293085999999999], [27.296505, -20.39152], [27.724747000000001, -20.499058999999999], [27.727228, -20.851801999999999], [28.021370000000001, -21.485975], [28.794656, -21.639454000000001], [29.432188, -22.091313], [28.017236, -22.827753999999999], [27.119409999999998, -23.574323], [26.786407000000001, -24.240691000000002], [26.485752999999999, -24.616326999999998], [25.941652000000001, -24.696373000000001], [25.765848999999999, -25.174845000000001], [25.664666, -25.486816000000001], [25.025171, -25.719670000000001], [24.211266999999999, -25.670216], [23.73357, -25.390129000000002], [23.312097000000001, -25.268689999999999], [22.824271, -25.500458999999999], [22.579532, -25.979448000000001], [22.105969000000002, -26.280256000000001], [21.605896000000001, -26.726534000000001], [20.889609, -26.828543], [20.66647, -26.477453000000001], [20.758609, -25.868136], [20.165725999999999, -24.917961999999999], [19.895768, -24.767790000000002], [19.895458000000001, -21.849157000000002], [20.881133999999999, -21.814326999999999], [20.910640999999998, -18.252219], [21.65504, -18.219145999999999], [23.196857999999999, -17.869038], [23.579006, -18.281261000000001], [24.217365000000001, -17.889347000000001], [24.520705, -17.887125000000001], [25.084443, -17.661816000000002], [25.264226000000001, -17.736540000000002], [25.649163000000001, -18.536026]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0411\u043e\u0442\u0441\u0432\u0430\u043d\u0430", "fr": "Botswana", "en": "Botswana", "nl": "Botswana", "pt": "Botswana", "no": "Botswana", "de": "Botsuana", "it": "Botswana", "sv": "Botswana", "pl": "Botswana", "fi": "Botswana", "zh": "\u6ce2\u672d\u90a3", "ja": "\u30dc\u30c4\u30ef\u30ca", "es": "Botsuana"}, "label_fr": "Botswana", "name": "Botswana", "dbpedia_uri": "http://dbpedia.org/resource/Botswana"}, "id": "BWA"}, {"geometry": {"type": "Polygon", "coordinates": [[[15.27946, 7.4219249999999999], [16.106231999999999, 7.4970879999999998], [16.290562000000001, 7.7543069999999998], [16.456185000000001, 7.7347739999999998], [16.705988000000001, 7.5083279999999997], [17.964929999999999, 7.8909140000000004], [18.389555000000001, 8.2813040000000004], [18.911021999999999, 8.6308950000000006], [18.812010000000001, 8.9829150000000002], [19.094007999999999, 9.0748470000000001], [20.059685000000002, 9.0127059999999997], [21.000868000000001, 9.4759849999999997], [21.723821999999998, 10.567055999999999], [22.231128999999999, 10.971888999999999], [22.864165, 11.142395], [22.977544000000002, 10.714463], [23.554303999999998, 10.089255], [23.55725, 9.6812179999999994], [23.394779, 9.2650679999999994], [23.459012999999999, 8.9542859999999997], [23.805813000000001, 8.6663189999999997], [24.567368999999999, 8.2291880000000006], [25.114932, 7.8251039999999996], [25.124130999999998, 7.5000850000000003], [25.796648000000001, 6.9793159999999999], [26.213418000000001, 6.5466030000000002], [26.465909, 5.9467169999999996], [27.213408999999999, 5.5509529999999998], [27.374226, 5.2339440000000002], [27.044065, 5.127853], [26.402761000000002, 5.1508750000000001], [25.650455000000001, 5.2560880000000001], [25.278797999999998, 5.1704080000000001], [25.128833, 4.9272450000000001], [24.805029000000001, 4.8972470000000001], [24.410530999999999, 5.108784], [23.297214, 4.609693], [22.841480000000001, 4.7101259999999998], [22.704124, 4.633051], [22.405124000000001, 4.0291600000000001], [21.659123000000001, 4.224342], [20.927591, 4.3227859999999998], [20.290679000000001, 4.6916779999999996], [19.467784000000002, 5.0315279999999998], [18.932312, 4.7095060000000002], [18.542981999999999, 4.2017850000000001], [18.453064999999999, 3.5043859999999998], [17.809899999999999, 3.5601959999999999], [17.133042, 3.7281970000000002], [16.537057999999998, 3.1982550000000001], [16.012851999999999, 2.2676400000000001], [15.907381000000001, 2.5573890000000001], [15.862731999999999, 3.0135369999999999], [15.405396, 3.3353009999999998], [15.03622, 3.8513670000000002], [14.950953, 4.2103890000000002], [14.478372, 4.7326050000000004], [14.558935999999999, 5.0305980000000003], [14.459407000000001, 5.4517610000000003], [14.53656, 6.2269589999999999], [14.776545, 6.4084979999999998], [15.27946, 7.4219249999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0430\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430\u044f \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430", "fr": "R\u00e9publique centrafricaine", "en": "Central African Republic", "nl": "Centraal-Afrikaanse Republiek", "pt": "Rep\u00fablica Centro-Africana", "no": "Den sentralafrikanske republikk", "de": "Zentralafrikanische Republik", "it": "Repubblica Centrafricana", "sv": "Centralafrikanska republiken", "pl": "Republika \u015arodkowoafryka\u0144ska", "fi": "Keski-Afrikan tasavalta", "zh": "\u4e2d\u975e\u5171\u548c\u570b", "ja": "\u4e2d\u592e\u30a2\u30d5\u30ea\u30ab\u5171\u548c\u56fd", "es": "Rep\u00fablica Centroafricana"}, "label_fr": "R\u00e9publique centrafricaine", "name": "Central African Republic", "dbpedia_uri": "http://dbpedia.org/resource/Central_African_Republic"}, "id": "CAF"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-63.664499999999997, 46.55001], [-62.939300000000003, 46.415869999999998], [-62.012079999999997, 46.44314], [-62.503909999999998, 46.033389999999997], [-62.87433, 45.968179999999997], [-64.142799999999994, 46.392650000000003], [-64.392610000000005, 46.727469999999997], [-64.014859999999999, 47.036009999999997], [-63.664499999999997, 46.55001]]], [[[-61.806305000000002, 49.105060000000002], [-62.29318, 49.08717], [-63.589260000000003, 49.400689999999997], [-64.519120000000001, 49.873040000000003], [-64.173220000000001, 49.957180000000001], [-62.858289999999997, 49.706409999999998], [-61.835585000000002, 49.288550000000001], [-61.806305000000002, 49.105060000000002]]], [[[-123.510002, 48.510010999999999], [-124.012891, 48.370846], [-125.655013, 48.825004999999997], [-125.954994, 49.179996000000003], [-126.850004, 49.530000000000001], [-127.029993, 49.814996000000001], [-128.059336, 49.994959000000001], [-128.44458399999999, 50.539138000000001], [-128.35841400000001, 50.770648000000001], [-127.308581, 50.552574], [-126.695001, 50.400903], [-125.75500700000001, 50.295017999999999], [-125.415002, 49.950001], [-124.920768, 49.475275000000003], [-123.92250900000001, 49.062483999999998], [-123.510002, 48.510010999999999]]], [[[-56.134036000000002, 50.687010000000001], [-56.795881999999999, 49.812308999999999], [-56.143104999999998, 50.150117000000002], [-55.471491999999998, 49.935814999999998], [-55.822400999999999, 49.587128999999997], [-54.935142999999997, 49.313011000000003], [-54.473775000000003, 49.556691000000001], [-53.476548999999999, 49.249139], [-53.786014000000002, 48.516781000000002], [-53.086134000000001, 48.687804], [-52.958647999999997, 48.157164000000002], [-52.648099000000002, 47.535547999999999], [-53.069158000000002, 46.655498999999999], [-53.521456000000001, 46.618291999999997], [-54.178936, 46.807065999999999], [-53.961869, 47.625207000000003], [-54.240482, 47.752279000000001], [-55.400773000000001, 46.884993999999999], [-55.997481000000001, 46.919719999999998], [-55.291218999999998, 47.389561999999998], [-56.250799000000001, 47.632545], [-57.325229, 47.572806999999997], [-59.266015000000003, 47.603347999999997], [-59.419494, 47.899453999999999], [-58.796585999999998, 48.251525000000001], [-59.231625000000001, 48.523187999999998], [-58.391804999999998, 49.125580999999997], [-57.358690000000003, 50.718274000000001], [-56.73865, 51.287438000000002], [-55.870977000000003, 51.632094000000002], [-55.406973999999998, 51.588273000000001], [-55.600217999999998, 51.317075000000003], [-56.134036000000002, 50.687010000000001]]], [[[-132.71000799999999, 54.040008999999998], [-132.71000900000001, 54.040008999999998], [-132.71000799999999, 54.040008999999998], [-132.71000799999999, 54.040008999999998], [-131.74999, 54.120004000000002], [-132.04947999999999, 52.984620999999997], [-131.17904300000001, 52.180433000000001], [-131.57783000000001, 52.182371000000003], [-132.18042800000001, 52.639707000000001], [-132.549992, 53.100014999999999], [-133.05461099999999, 53.411468999999997], [-133.239664, 53.851080000000003], [-133.180004, 54.169975000000001], [-132.71000799999999, 54.040008999999998]]], [[[-79.265820000000005, 62.158675000000002], [-79.657520000000005, 61.63308], [-80.099559999999997, 61.7181], [-80.36215, 62.016489999999997], [-80.315394999999995, 62.085565000000003], [-79.929389999999998, 62.385599999999997], [-79.520020000000002, 62.363709999999998], [-79.265820000000005, 62.158675000000002]]], [[[-81.898250000000004, 62.710799999999999], [-83.068569999999994, 62.159219999999998], [-83.774619999999999, 62.182310000000001], [-83.993669999999995, 62.452800000000003], [-83.250479999999996, 62.914090000000002], [-81.876990000000006, 62.904580000000003], [-81.898250000000004, 62.710799999999999]]], [[[-85.161308000000005, 65.657285000000002], [-84.975763999999998, 65.217517999999998], [-84.464011999999997, 65.371772000000007], [-83.882626000000002, 65.109617999999998], [-82.787576999999999, 64.766693000000004], [-81.642014000000003, 64.455135999999996], [-81.553439999999995, 63.979609000000004], [-80.817361000000005, 64.057485999999997], [-80.103451000000007, 63.725980999999997], [-80.991020000000006, 63.411245999999998], [-82.547178000000002, 63.651721999999999], [-83.108797999999993, 64.101876000000004], [-84.100416999999993, 63.569712000000003], [-85.523404999999997, 63.052379000000002], [-85.866769000000005, 63.637253000000001], [-87.221982999999994, 63.541238], [-86.352760000000004, 64.035832999999997], [-86.224885999999998, 64.822917000000004], [-85.883848, 65.738777999999996], [-85.161308000000005, 65.657285000000002]]], [[[-75.865880000000004, 67.148859999999999], [-76.986869999999996, 67.098730000000003], [-77.236400000000003, 67.588089999999994], [-76.811660000000003, 68.148560000000003], [-75.895210000000006, 68.287210000000002], [-75.114500000000007, 68.010360000000006], [-75.10333, 67.58202], [-75.215969999999999, 67.444249999999997], [-75.865880000000004, 67.148859999999999]]], [[[-95.647681000000006, 69.107690000000005], [-96.269520999999997, 68.757040000000003], [-97.617401000000001, 69.060029999999998], [-98.431800999999993, 68.950699999999998], [-99.797400999999994, 69.400030000000001], [-98.917400999999998, 69.710030000000003], [-98.218260999999998, 70.143540000000002], [-97.157400999999993, 69.860029999999995], [-96.557400999999999, 69.680030000000002], [-96.257401000000002, 69.490030000000004], [-95.647681000000006, 69.107690000000005]]], [[[-90.5471, 69.497659999999996], [-90.551509999999993, 68.474990000000005], [-89.215149999999994, 69.25873], [-88.019660000000002, 68.615080000000006], [-88.317490000000006, 67.873379999999997], [-87.350170000000006, 67.198719999999994], [-86.306070000000005, 67.921459999999996], [-85.576639999999998, 68.784559999999999], [-85.521969999999996, 69.882109999999997], [-84.100809999999996, 69.805390000000003], [-82.622579999999999, 69.658259999999999], [-81.280429999999996, 69.162019999999998], [-81.220200000000006, 68.665670000000006], [-81.964359999999999, 68.132530000000003], [-81.259280000000004, 67.597160000000002], [-81.386529999999993, 67.110780000000005], [-83.344560000000001, 66.411540000000002], [-84.735420000000005, 66.257300000000001], [-85.76943, 66.558329999999998], [-86.067599999999999, 66.056250000000006], [-87.03143, 65.212969999999999], [-87.323239999999998, 64.775630000000007], [-88.482960000000006, 64.098969999999994], [-89.914439999999999, 64.032730000000001], [-90.703980000000001, 63.610169999999997], [-90.770039999999995, 62.960209999999996], [-91.933419999999998, 62.835079999999998], [-93.156980000000004, 62.02469], [-94.241529999999997, 60.898650000000004], [-94.629310000000004, 60.110210000000002], [-94.684600000000003, 58.948819999999998], [-93.215019999999996, 58.782119999999999], [-92.764619999999994, 57.845709999999997], [-92.297030000000007, 57.087090000000003], [-90.897689999999997, 57.284680000000002], [-89.039529999999999, 56.85172], [-88.039779999999993, 56.471620000000001], [-87.324209999999994, 55.999139999999997], [-86.071209999999994, 55.72383], [-85.011809999999997, 55.302599999999998], [-83.360550000000003, 55.244889999999998], [-82.272850000000005, 55.148319999999998], [-82.436199999999999, 54.282269999999997], [-82.125020000000006, 53.277030000000003], [-81.400750000000002, 52.157879999999999], [-79.912890000000004, 51.208419999999997], [-79.143010000000004, 51.533929999999998], [-78.601910000000004, 52.562080000000002], [-79.124210000000005, 54.141449999999999], [-79.829580000000007, 54.667720000000003], [-78.228740000000002, 55.136450000000004], [-77.095600000000005, 55.837409999999998], [-76.541370000000001, 56.534230000000001], [-76.623189999999994, 57.202629999999999], [-77.302260000000004, 58.05209], [-78.51688, 58.804580000000001], [-77.336759999999998, 59.852609999999999], [-77.772720000000007, 60.75788], [-78.106870000000001, 62.31964], [-77.410669999999996, 62.550530000000002], [-75.696209999999994, 62.278399999999998], [-74.668199999999999, 62.181109999999997], [-73.839879999999994, 62.443800000000003], [-72.908529999999999, 62.105069999999998], [-71.677080000000004, 61.525350000000003], [-71.373689999999996, 61.137169999999998], [-69.590419999999995, 61.061410000000002], [-69.620329999999996, 60.221249999999998], [-69.287899999999993, 58.957360000000001], [-68.374549999999999, 58.80106], [-67.649760000000001, 58.212060000000001], [-66.201779999999999, 58.767310000000002], [-65.245170000000002, 59.870710000000003], [-64.583519999999993, 60.33558], [-63.804749999999999, 59.442599999999999], [-62.502360000000003, 58.167079999999999], [-61.396549999999998, 56.967449999999999], [-61.798659999999998, 56.339449999999999], [-60.468530000000001, 55.775480000000002], [-59.56962, 55.204070000000002], [-57.975079999999998, 54.945489999999999], [-57.333199999999998, 54.6265], [-56.936889999999998, 53.780320000000003], [-56.158110000000001, 53.647489999999998], [-55.756320000000002, 53.270359999999997], [-55.68338, 52.146639999999998], [-56.40916, 51.770699999999998], [-57.126910000000002, 51.419719999999998], [-58.774819999999998, 51.064300000000003], [-60.033090000000001, 50.24277], [-61.723660000000002, 50.080460000000002], [-63.86251, 50.290990000000001], [-65.363309999999998, 50.298200000000001], [-66.399050000000003, 50.228969999999997], [-67.236310000000003, 49.511560000000003], [-68.511139999999997, 49.068359999999998], [-69.953620000000001, 47.744880000000002], [-71.104579999999999, 46.821710000000003], [-70.255219999999994, 46.986060000000002], [-68.650000000000006, 48.299999999999997], [-66.552430000000001, 49.133099999999999], [-65.056259999999995, 49.232779999999998], [-64.170990000000003, 48.74248], [-65.115449999999996, 48.07085], [-64.798540000000003, 46.99297], [-64.472189999999998, 46.238489999999999], [-63.173290000000001, 45.739019999999996], [-61.520719999999997, 45.883769999999998], [-60.518149999999999, 47.007930000000002], [-60.448599999999999, 46.282640000000001], [-59.802869999999999, 45.920400000000001], [-61.039879999999997, 45.265250000000002], [-63.254710000000003, 44.670140000000004], [-64.246560000000002, 44.265529999999998], [-65.364059999999995, 43.545229999999997], [-66.123400000000004, 43.618670000000002], [-66.161730000000006, 44.465119999999999], [-64.425489999999996, 45.29204], [-66.026049999999998, 45.259309999999999], [-67.137410000000003, 45.137529999999998], [-67.791340000000005, 45.702809999999999], [-67.790459999999996, 47.066360000000003], [-68.234440000000006, 47.354860000000002], [-68.905000000000001, 47.185000000000002], [-69.237216000000004, 47.447780999999999], [-69.999970000000005, 46.693069999999999], [-70.305000000000007, 45.914999999999999], [-70.659999999999997, 45.460000000000001], [-71.084819999999993, 45.305239999999998], [-71.405000000000001, 45.255000000000003], [-71.50506, 45.008200000000002], [-73.347830000000002, 45.007379999999998], [-74.867000000000004, 45.000480000000003], [-75.318209999999993, 44.816450000000003], [-76.375, 44.096310000000003], [-76.5, 44.018459], [-76.820034000000007, 43.628784000000003], [-77.737885000000006, 43.629055999999999], [-78.720280000000002, 43.625089000000003], [-79.171673999999996, 43.466338999999998], [-79.010000000000005, 43.270000000000003], [-78.920000000000002, 42.965000000000003], [-78.939362000000003, 42.863610999999999], [-80.247448000000006, 42.366199999999999], [-81.277747000000005, 42.209026000000001], [-82.439278000000002, 41.675105000000002], [-82.690089, 41.675105000000002], [-83.029809999999998, 41.832796000000002], [-83.141999999999996, 41.975681000000002], [-83.120000000000005, 42.079999999999998], [-82.900000000000006, 42.43], [-82.430000000000007, 42.979999999999997], [-82.137642, 43.571088000000003], [-82.337762999999995, 44.439999999999998], [-82.550925000000007, 45.347517000000003], [-83.592850999999996, 45.816893999999998], [-83.469550999999996, 45.994686000000002], [-83.616130999999996, 46.116926999999997], [-83.890765000000002, 46.116926999999997], [-84.091851000000005, 46.275418999999999], [-84.142120000000006, 46.512225999999998], [-84.336699999999993, 46.408769999999997], [-84.604900000000001, 46.439599999999999], [-84.543749000000005, 46.538684000000003], [-84.779238000000007, 46.637101999999999], [-84.876080000000002, 46.900083000000002], [-85.652362999999994, 47.220219], [-86.461990999999998, 47.553337999999997], [-87.439792999999995, 47.939999999999998], [-88.378113999999997, 48.302917999999998], [-89.272917000000007, 48.019807999999998], [-89.599999999999994, 48.009999999999998], [-90.829999999999998, 48.270000000000003], [-91.640000000000001, 48.140000000000001], [-92.609999999999999, 48.450000000000003], [-93.630870000000002, 48.609259999999999], [-94.329139999999995, 48.670740000000002], [-94.640000000000001, 48.840000000000003], [-94.817580000000007, 49.389049999999997], [-95.156090000000006, 49.384250000000002], [-95.15907, 49], [-97.228719999999996, 49.000700000000002], [-100.65000000000001, 49], [-104.04826, 48.999859999999998], [-107.05, 49], [-110.05, 49], [-113, 49], [-116.04818, 49], [-117.03121, 49], [-120, 49], [-122.84, 49], [-122.97421, 49.002538000000001], [-124.91024, 49.984560000000002], [-125.62461, 50.416559999999997], [-127.43561, 50.83061], [-127.99276, 51.715829999999997], [-127.85032, 52.329610000000002], [-129.12979000000001, 52.755380000000002], [-129.30522999999999, 53.561590000000002], [-130.51497000000001, 54.287570000000002], [-130.53611000000001, 54.802779999999998], [-129.97999999999999, 55.284999999999997], [-130.00778, 55.91583], [-131.70780999999999, 56.552120000000002], [-132.73042000000001, 57.692889999999998], [-133.35556, 58.41028], [-134.27110999999999, 58.861109999999996], [-134.94499999999999, 59.270560000000003], [-135.47583, 59.787779999999998], [-136.47971999999999, 59.463889999999999], [-137.45249999999999, 58.905000000000001], [-138.34089, 59.562109999999997], [-139.03899999999999, 60], [-140.01300000000001, 60.276820000000001], [-140.99778000000001, 60.30639], [-140.99250000000001, 66.000029999999995], [-140.98599999999999, 69.712000000000003], [-139.12052, 69.471019999999996], [-137.54635999999999, 68.990020000000001], [-136.50358, 68.898039999999995], [-135.62576000000001, 69.315119999999993], [-134.41463999999999, 69.627430000000004], [-132.92925, 69.505340000000004], [-131.43136000000001, 69.944509999999994], [-129.79471000000001, 70.193690000000004], [-129.10773, 69.779269999999997], [-128.36156, 70.012860000000003], [-128.13817, 70.483840000000001], [-127.44712, 70.377210000000005], [-125.75632, 69.480580000000003], [-124.42483, 70.1584], [-124.28968, 69.399690000000007], [-123.06108, 69.563720000000004], [-122.6835, 69.855530000000002], [-121.47226000000001, 69.797780000000003], [-119.94288, 69.377859999999998], [-117.60268000000001, 69.011279999999999], [-116.22642999999999, 68.84151], [-115.2469, 68.905910000000006], [-113.89794000000001, 68.398899999999998], [-115.30489, 67.902609999999996], [-113.49727, 67.688149999999993], [-110.798, 67.806120000000007], [-109.94619, 67.981039999999993], [-108.8802, 67.381439999999998], [-107.79239, 67.887360000000001], [-108.81299, 68.311639999999997], [-108.16721, 68.653919999999999], [-106.95, 68.700000000000003], [-106.15000000000001, 68.799999999999997], [-105.34282, 68.561220000000006], [-104.33790999999999, 68.018000000000001], [-103.22114999999999, 68.097750000000005], [-101.45433, 67.646889999999999], [-99.901949999999999, 67.805660000000003], [-98.443200000000004, 67.781649999999999], [-98.558599999999998, 68.403940000000006], [-97.669479999999993, 68.578639999999993], [-96.119910000000004, 68.23939], [-96.125879999999995, 67.293379999999999], [-95.489429999999999, 68.090699999999998], [-94.685000000000002, 68.063829999999996], [-94.232820000000004, 69.069029999999998], [-95.304079999999999, 69.68571], [-96.471310000000003, 70.089759999999998], [-96.391149999999996, 71.194820000000007], [-95.208799999999997, 71.920529999999999], [-93.889970000000005, 71.760149999999996], [-92.87818, 71.318690000000004], [-91.519639999999995, 70.191289999999995], [-92.40692, 69.699969999999993], [-90.5471, 69.497659999999996]]], [[[-114.16717, 73.121449999999996], [-114.66634000000001, 72.652770000000004], [-112.44101999999999, 72.955399999999997], [-111.05038999999999, 72.450400000000002], [-109.92035, 72.961129999999997], [-109.00654, 72.633349999999993], [-108.18835, 71.650890000000004], [-107.68599, 72.065479999999994], [-108.39639, 73.089529999999996], [-107.51645000000001, 73.235979999999998], [-106.52258999999999, 73.076009999999997], [-105.40246, 72.67259], [-104.77484, 71.698400000000007], [-104.46476, 70.99297], [-102.78537, 70.49776], [-100.98078, 70.024320000000003], [-101.08929000000001, 69.584469999999996], [-102.73116, 69.504019999999997], [-102.09329, 69.119619999999998], [-102.43024, 68.75282], [-104.23999999999999, 68.909999999999997], [-105.95999999999999, 69.180000000000007], [-107.12254, 69.119219999999999], [-109, 68.780000000000001], [-111.534149, 68.630059000000003], [-113.31319999999999, 68.535539999999997], [-113.85496000000001, 69.007440000000003], [-115.22, 69.280000000000001], [-116.10794, 69.168210000000002], [-117.34, 69.959999999999994], [-116.67473, 70.066550000000007], [-115.13112, 70.237300000000005], [-113.72141000000001, 70.192369999999997], [-112.4161, 70.366380000000007], [-114.34999999999999, 70.599999999999994], [-116.48684, 70.520449999999997], [-117.90479999999999, 70.540559999999999], [-118.43237999999999, 70.909199999999998], [-116.11311000000001, 71.309179999999998], [-117.65568, 71.295199999999994], [-119.40199, 71.558589999999995], [-118.56267, 72.307850000000002], [-117.86642000000001, 72.705939999999998], [-115.18908999999999, 73.314589999999995], [-114.16717, 73.121449999999996]]], [[[-104.5, 73.420000000000002], [-105.38, 72.760000000000005], [-106.94, 73.459999999999994], [-106.59999999999999, 73.599999999999994], [-105.26000000000001, 73.640000000000001], [-104.5, 73.420000000000002]]], [[[-76.340000000000003, 73.102684999999994], [-76.251403999999994, 72.826385000000002], [-77.314437999999996, 72.855545000000006], [-78.391670000000005, 72.876655999999997], [-79.486251999999993, 72.742203000000003], [-79.775833000000006, 72.802902000000003], [-80.876098999999996, 73.333183000000005], [-80.833884999999995, 73.693184000000002], [-80.353058000000004, 73.759720000000002], [-78.064437999999996, 73.651932000000002], [-76.340000000000003, 73.102684999999994]]], [[[-86.562179, 73.157447000000005], [-85.774371000000002, 72.534126000000001], [-84.850111999999996, 73.340277999999998], [-82.31559, 73.750951000000001], [-80.600088, 72.716543999999999], [-80.748942, 72.061907000000005], [-78.770639000000003, 72.352172999999993], [-77.824624, 72.749617000000001], [-75.605845000000002, 72.243678000000003], [-74.228616000000002, 71.767144000000002], [-74.099141000000003, 71.330839999999995], [-72.242226000000002, 71.556925000000007], [-71.200014999999993, 70.920012999999997], [-68.786053999999993, 70.525024000000002], [-67.914969999999997, 70.121948000000003], [-66.969032999999996, 69.186087000000001], [-68.805122999999995, 68.720197999999996], [-66.449866, 68.067162999999994], [-64.862313999999998, 67.847538999999998], [-63.424934, 66.928472999999997], [-61.851981000000002, 66.862121000000002], [-62.163176999999997, 66.160251000000002], [-63.918444000000001, 64.998669000000007], [-65.148859999999999, 65.426033000000004], [-66.721219000000005, 66.388041000000001], [-68.015016000000003, 66.262726000000001], [-68.141287000000005, 65.689789000000005], [-67.089646000000002, 65.108455000000006], [-65.732079999999996, 64.648405999999994], [-65.320167999999995, 64.382737000000006], [-64.669405999999995, 63.392927], [-65.013803999999993, 62.674185000000001], [-66.275045000000006, 62.945098999999999], [-68.783186000000001, 63.745669999999997], [-67.369681, 62.883966000000001], [-66.328297000000006, 62.280074999999997], [-66.165567999999993, 61.930897000000002], [-68.877367000000007, 62.330148999999999], [-71.023437000000001, 62.910708], [-72.235378999999995, 63.397835999999998], [-71.886278000000004, 63.679988999999999], [-73.378305999999995, 64.193962999999997], [-74.834418999999997, 64.679075999999995], [-74.818503000000007, 64.389093000000003], [-77.709980000000002, 64.229541999999995], [-78.555948999999998, 64.572906000000003], [-77.897281000000007, 65.309191999999996], [-76.018274000000005, 65.326969000000005], [-73.959795, 65.454764999999995], [-74.293882999999994, 65.811770999999993], [-73.944912000000002, 66.310578000000007], [-72.651167000000001, 67.284576000000001], [-72.926060000000007, 67.726926000000006], [-73.311617999999996, 68.069436999999994], [-74.843306999999996, 68.554626999999996], [-76.869101000000001, 68.894735999999995], [-76.228649000000004, 69.147768999999997], [-77.287369999999996, 69.769540000000006], [-78.168633999999997, 69.826487999999998], [-78.957241999999994, 70.166880000000006], [-79.492455000000007, 69.871808000000001], [-81.305470999999997, 69.743184999999997], [-84.944705999999996, 69.966633999999999], [-87.060002999999995, 70.260001000000003], [-88.681713000000002, 70.410741000000002], [-89.513419999999996, 70.762038000000004], [-88.467720999999997, 71.218186000000003], [-89.888150999999993, 71.222551999999993], [-90.205160000000006, 72.235073999999997], [-89.436577, 73.129463999999999], [-88.408242000000001, 73.537889000000007], [-85.826150999999996, 73.803815999999998], [-86.562179, 73.157447000000005]]], [[[-100.35642, 73.843890000000002], [-99.163870000000003, 73.633390000000006], [-97.379999999999995, 73.760000000000005], [-97.120000000000005, 73.469999999999999], [-98.05359, 72.990520000000004], [-96.540000000000006, 72.560000000000002], [-96.719999999999999, 71.659999999999997], [-98.359660000000005, 71.272850000000005], [-99.322860000000006, 71.356390000000005], [-100.01482, 71.73827], [-102.5, 72.510000000000005], [-102.48, 72.829999999999998], [-100.43836, 72.705879999999993], [-101.54000000000001, 73.359999999999999], [-100.35642, 73.843890000000002]]], [[[-93.196296000000004, 72.771991999999997], [-94.269047, 72.024596000000003], [-95.409856000000005, 72.061881], [-96.033744999999996, 72.940276999999995], [-96.018268000000006, 73.437430000000006], [-95.495793000000006, 73.862416999999994], [-94.503658000000001, 74.134906999999998], [-92.420012, 74.100025000000002], [-90.509793000000002, 73.856731999999994], [-92.003964999999994, 72.966244000000003], [-93.196296000000004, 72.771991999999997]]], [[[-120.45999999999999, 71.383601999999996], [-123.09219, 70.90164], [-123.62, 71.340000000000003], [-125.928949, 71.868688000000006], [-125.5, 72.292260999999996], [-124.80728999999999, 73.022559999999999], [-123.94, 73.680000000000007], [-124.91775, 74.292749999999998], [-121.53788, 74.448930000000004], [-120.10978, 74.241349999999997], [-117.55564, 74.185770000000005], [-116.58441999999999, 73.896069999999995], [-115.51081000000001, 73.475189999999998], [-116.76794, 73.222920000000002], [-119.22, 72.519999999999996], [-120.45999999999999, 71.819999999999993], [-120.45999999999999, 71.383601999999996]]], [[[-93.612756000000005, 74.979996999999997], [-94.156908999999999, 74.592347000000004], [-95.608681000000004, 74.666864000000004], [-96.820931999999999, 74.927622999999997], [-96.288587000000007, 75.377827999999994], [-94.850819999999999, 75.647217999999995], [-93.977746999999994, 75.296490000000006], [-93.612756000000005, 74.979996999999997]]], [[[-98.5, 76.719999999999999], [-97.735585, 76.256559999999993], [-97.704414999999997, 75.743440000000007], [-98.159999999999997, 75], [-99.80874, 74.897440000000003], [-100.88366000000001, 75.057360000000003], [-100.86292, 75.640749999999997], [-102.50209, 75.563800000000001], [-102.56552000000001, 76.336600000000004], [-101.48972999999999, 76.305369999999996], [-99.983490000000003, 76.646339999999995], [-98.576989999999995, 76.588589999999996], [-98.5, 76.719999999999999]]], [[[-108.21141, 76.201679999999996], [-107.81943, 75.845519999999993], [-106.92892999999999, 76.012820000000005], [-105.881, 75.969399999999993], [-105.70498000000001, 75.479510000000005], [-106.31347, 75.005269999999996], [-109.7, 74.849999999999994], [-112.22307000000001, 74.416960000000003], [-113.74381, 74.394270000000006], [-113.87135000000001, 74.720290000000006], [-111.79421000000001, 75.162499999999994], [-116.31220999999999, 75.043430000000001], [-117.71040000000001, 75.222200000000001], [-116.34602, 76.199029999999993], [-115.40487, 76.478870000000001], [-112.59056, 76.14134], [-110.81422000000001, 75.549189999999996], [-109.0671, 75.473209999999995], [-110.49726, 76.429820000000007], [-109.58110000000001, 76.794169999999994], [-108.54859, 76.678319999999999], [-108.21141, 76.201679999999996]]], [[[-94.684085999999994, 77.097877999999994], [-93.573920999999999, 76.776296000000002], [-91.605023000000003, 76.778518000000005], [-90.741845999999995, 76.449596999999997], [-90.969661000000002, 76.074012999999994], [-89.822237999999999, 75.847774000000001], [-89.187083000000001, 75.610166000000007], [-87.838275999999993, 75.566188999999994], [-86.379192000000003, 75.482421000000002], [-84.789625000000001, 75.699203999999995], [-82.753444999999999, 75.784315000000007], [-81.128530999999995, 75.713982999999999], [-80.057511000000005, 75.336849000000001], [-79.833933000000002, 74.923126999999994], [-80.457770999999994, 74.657303999999996], [-81.948842999999997, 74.442458999999999], [-83.228893999999997, 74.564027999999993], [-86.097452000000004, 74.410032000000001], [-88.150350000000003, 74.392307000000002], [-89.764722000000006, 74.515555000000006], [-92.422441000000006, 74.837757999999994], [-92.768285000000006, 75.38682], [-92.889905999999996, 75.882655], [-93.893823999999995, 76.319243999999998], [-95.962457000000001, 76.441381000000007], [-97.121379000000005, 76.751078000000007], [-96.745123000000007, 77.161389], [-94.684085999999994, 77.097877999999994]]], [[[-116.198587, 77.645286999999996], [-116.335813, 76.876962000000006], [-117.10605099999999, 76.530032000000006], [-118.040412, 76.481172000000001], [-119.89931799999999, 76.053213], [-121.499995, 75.900019], [-122.854924, 76.116542999999993], [-122.85492499999999, 76.116542999999993], [-121.157535, 76.864508000000001], [-119.103939, 77.512219999999999], [-117.570131, 77.498318999999995], [-116.198587, 77.645286999999996]]], [[[-93.840002999999996, 77.519997000000004], [-94.295608000000001, 77.491343000000001], [-96.169653999999994, 77.555110999999997], [-96.436304000000007, 77.834629000000007], [-94.422577000000004, 77.820004999999995], [-93.720656000000005, 77.634331000000003], [-93.840002999999996, 77.519997000000004]]], [[[-110.186938, 77.697014999999993], [-112.051191, 77.409228999999996], [-113.534279, 77.732207000000002], [-112.724587, 78.051050000000004], [-111.264443, 78.152956000000003], [-109.85445199999999, 77.996324999999999], [-110.186938, 77.697014999999993]]], [[[-109.663146, 78.601973000000001], [-110.881314, 78.40692], [-112.542091, 78.407902000000007], [-112.525891, 78.550555000000003], [-111.50001, 78.849993999999995], [-110.963661, 78.804440999999997], [-109.663146, 78.601973000000001]]], [[[-95.830295000000007, 78.056940999999995], [-97.309843000000001, 77.850596999999993], [-98.124289000000005, 78.082857000000004], [-98.552868000000004, 78.458105000000003], [-98.631984000000003, 78.871930000000006], [-97.337231000000003, 78.831984000000006], [-96.754399000000006, 78.765812999999994], [-95.559278000000006, 78.418315000000007], [-95.830295000000007, 78.056940999999995]]], [[[-100.060192, 78.324753999999999], [-99.670939000000004, 77.907544999999999], [-101.30394, 78.018985000000001], [-102.949809, 78.343228999999994], [-105.17613299999999, 78.380331999999996], [-104.210429, 78.677419999999998], [-105.41958, 78.918335999999996], [-105.492289, 79.301593999999994], [-103.52928199999999, 79.165349000000006], [-100.825158, 78.800461999999996], [-100.060192, 78.324753999999999]]], [[[-87.019999999999996, 79.659999999999997], [-85.814350000000005, 79.3369], [-87.187560000000005, 79.039299999999997], [-89.035349999999994, 78.287229999999994], [-90.804360000000003, 78.215329999999994], [-92.876689999999996, 78.343329999999995], [-93.951160000000002, 78.750990000000002], [-93.935739999999996, 79.113730000000004], [-93.145240000000001, 79.380099999999999], [-94.974000000000004, 79.372479999999996], [-96.076139999999995, 79.705020000000005], [-96.709720000000004, 80.157769999999999], [-96.016440000000003, 80.602329999999995], [-95.323449999999994, 80.907290000000003], [-94.298429999999996, 80.977270000000004], [-94.735420000000005, 81.206460000000007], [-92.409840000000003, 81.257390000000001], [-91.132890000000003, 80.72345], [-89.450000000000003, 80.509321999999997], [-87.810000000000002, 80.319999999999993], [-87.019999999999996, 79.659999999999997]]], [[[-68.5, 83.106322000000006], [-65.827349999999996, 83.028009999999995], [-63.68, 82.900000000000006], [-61.850000000000001, 82.628600000000006], [-61.893880000000003, 82.361649999999997], [-64.334000000000003, 81.927750000000003], [-66.753420000000006, 81.725269999999995], [-67.657550000000001, 81.501410000000007], [-65.480310000000003, 81.506569999999996], [-67.840000000000003, 80.900000000000006], [-69.469700000000003, 80.616829999999993], [-71.180000000000007, 79.799999999999997], [-73.242800000000003, 79.634150000000005], [-73.879999999999995, 79.430161999999996], [-76.907730000000001, 79.323089999999993], [-75.529240000000001, 79.197659999999999], [-76.220460000000003, 79.019069999999999], [-75.393450000000001, 78.525810000000007], [-76.343540000000004, 78.182959999999994], [-77.888509999999997, 77.899910000000006], [-78.362690000000001, 77.508589999999998], [-79.759510000000006, 77.209680000000006], [-79.619649999999993, 76.983360000000005], [-77.910889999999995, 77.022045000000006], [-77.889110000000002, 76.777955000000006], [-80.561250000000001, 76.178120000000007], [-83.174390000000002, 76.454030000000003], [-86.111840000000001, 76.299009999999996], [-87.599999999999994, 76.420000000000002], [-89.490679999999998, 76.472390000000004], [-89.616100000000003, 76.952129999999997], [-87.767390000000006, 77.178330000000003], [-88.260000000000005, 77.900000000000006], [-87.650000000000006, 77.970222000000007], [-84.976339999999993, 77.538730000000001], [-86.340000000000003, 78.180000000000007], [-87.961920000000006, 78.371809999999996], [-87.151979999999995, 78.758669999999995], [-85.378680000000003, 78.996899999999997], [-85.094949999999997, 79.345429999999993], [-86.507339999999999, 79.736239999999995], [-86.931790000000007, 80.251450000000006], [-84.198440000000005, 80.208359999999999], [-83.408696000000006, 80.099999999999994], [-81.848230000000001, 80.464420000000004], [-84.099999999999994, 80.579999999999998], [-87.598950000000002, 80.516270000000006], [-89.366630000000001, 80.855689999999996], [-90.200000000000003, 81.260000000000005], [-91.367859999999993, 81.553100000000001], [-91.587019999999995, 81.894289999999998], [-90.099999999999994, 82.084999999999994], [-88.932270000000003, 82.117509999999996], [-86.970240000000004, 82.279610000000005], [-85.5, 82.652272999999994], [-84.260005000000007, 82.599999999999994], [-83.180000000000007, 82.319999999999993], [-82.420000000000002, 82.859999999999999], [-81.099999999999994, 83.019999999999996], [-79.306640000000002, 83.130560000000003], [-76.25, 83.172059000000004], [-75.718779999999995, 83.064040000000006], [-72.831530000000001, 83.233239999999995], [-70.665764999999993, 83.169781], [-68.5, 83.106322000000006]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0430\u043d\u0430\u0434\u0430", "fr": "Canada", "en": "Canada", "nl": "Canada", "pt": "Canad\u00e1", "no": "Canada", "de": "Kanada", "it": "Canada", "sv": "Kanada", "pl": "Kanada", "fi": "Kanada", "zh": "\u52a0\u62ff\u5927", "ja": "\u30ab\u30ca\u30c0", "es": "Canad\u00e1"}, "label_fr": "Canada", "name": "Canada", "dbpedia_uri": "http://dbpedia.org/resource/Canada"}, "id": "CAN"}, {"geometry": {"type": "Polygon", "coordinates": [[[9.5942260000000008, 47.525058000000001], [9.6329320000000003, 47.347600999999997], [9.4799699999999998, 47.102809999999998], [9.9324480000000008, 46.920727999999997], [10.442701, 46.893546000000001], [10.363378000000001, 46.483570999999998], [9.9228369999999995, 46.314898999999997], [9.1828819999999993, 46.440215000000002], [8.9663059999999994, 46.036932], [8.4899520000000006, 46.005150999999998], [8.31663, 46.163642000000003], [7.755992, 45.824489999999997], [7.2738509999999996, 45.776947999999997], [6.8435930000000003, 45.991146999999998], [6.5000999999999998, 46.429673000000001], [6.0226090000000001, 46.27299], [6.0373890000000001, 46.725779000000003], [6.7687140000000001, 47.287708000000002], [6.7365709999999996, 47.541801], [7.192202, 47.449765999999997], [7.4667589999999997, 47.620581999999999], [8.3173010000000005, 47.613579999999999], [8.5226120000000005, 47.830827999999997], [9.5942260000000008, 47.525058000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0428\u0432\u0435\u0439\u0446\u0430\u0440\u0438\u044f", "fr": "Suisse", "en": "Switzerland", "nl": "Zwitserland", "pt": "Su\u00ed\u00e7a", "no": "Sveits", "de": "Schweiz", "it": "Svizzera", "sv": "Schweiz", "pl": "Szwajcaria", "fi": "Sveitsi", "zh": "\u745e\u58eb", "ja": "\u30b9\u30a4\u30b9", "es": "Suiza"}, "label_fr": "Suisse", "name": "Switzerland", "dbpedia_uri": "http://dbpedia.org/resource/Switzerland"}, "id": "CHE"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-68.634010000000004, -52.636369999999999], [-68.633349999999993, -54.869500000000002], [-67.562439999999995, -54.870010000000001], [-66.959919999999997, -54.896810000000002], [-67.291030000000006, -55.30124], [-68.148629999999997, -55.611829999999998], [-68.639990999999995, -55.580018000000003], [-69.232100000000003, -55.49906], [-69.958089999999999, -55.198430000000002], [-71.005679999999998, -55.053829999999998], [-72.263900000000007, -54.495139999999999], [-73.285200000000003, -53.957520000000002], [-74.662530000000004, -52.837490000000003], [-73.838099999999997, -53.047429999999999], [-72.434179999999998, -53.715400000000002], [-71.107730000000004, -54.074330000000003], [-70.59178, -53.615830000000003], [-70.267480000000006, -52.931229999999999], [-69.345650000000006, -52.518300000000004], [-68.634010000000004, -52.636369999999999]]], [[[-68.219913000000005, -21.494347000000001], [-67.828180000000003, -22.872919], [-67.106673999999998, -22.735925000000002], [-66.985234000000005, -22.986349000000001], [-67.328442999999993, -24.025303000000001], [-68.417653000000001, -24.518554999999999], [-68.386000999999993, -26.185016000000001], [-68.594800000000006, -26.506909], [-68.295541999999998, -26.899339999999999], [-69.001234999999994, -27.521214000000001], [-69.656130000000005, -28.459140999999999], [-70.013549999999995, -29.367923000000001], [-69.919008000000005, -30.336338999999999], [-70.535068999999993, -31.365010000000002], [-70.074399, -33.091209999999997], [-69.814777000000007, -33.273885999999997], [-69.817308999999995, -34.193570999999999], [-70.388048999999995, -35.169688000000001], [-70.364768999999995, -36.005088999999998], [-71.121881000000002, -36.658124000000001], [-71.118624999999994, -37.576827000000002], [-70.814663999999993, -38.552995000000003], [-71.413516999999999, -38.916021999999998], [-71.680761000000004, -39.808163999999998], [-71.915734, -40.832338999999997], [-71.746803999999997, -42.051386000000001], [-72.148898000000003, -42.254888000000001], [-71.915424000000002, -43.408565000000003], [-71.464055999999999, -43.787610999999998], [-71.793622999999997, -44.207172], [-71.329801000000003, -44.407522], [-71.222779000000003, -44.784242999999996], [-71.659316000000004, -44.973689], [-71.552008999999998, -45.560732999999999], [-71.917258000000004, -46.884838000000002], [-72.447355000000002, -47.738532999999997], [-72.331160999999994, -48.244238000000003], [-72.648246999999998, -48.878618000000003], [-73.415436, -49.318435999999998], [-73.328051000000002, -50.378785000000001], [-72.975746999999998, -50.74145], [-72.309973999999997, -50.677010000000003], [-72.329403999999997, -51.425955999999999], [-71.914804000000004, -52.009022000000002], [-69.498362, -52.142761], [-68.571545, -52.299444000000001], [-69.461284000000006, -52.291950999999997], [-69.942779999999999, -52.537931], [-70.845101999999997, -52.899200999999998], [-71.006332, -53.833252000000002], [-71.429794999999999, -53.856454999999997], [-72.557942999999995, -53.531410000000001], [-73.702757000000005, -52.835068999999997], [-73.702757000000005, -52.835070000000002], [-74.946763000000004, -52.262754000000001], [-75.260025999999996, -51.629354999999997], [-74.976631999999995, -51.043396000000001], [-75.479754, -50.378371999999999], [-75.608014999999995, -48.673772999999997], [-75.182770000000005, -47.711919000000002], [-74.126581000000002, -46.939253000000001], [-75.644395000000003, -46.647643000000002], [-74.692154000000002, -45.763976], [-74.351709, -44.103043999999997], [-73.240356000000006, -44.454960999999997], [-72.717804000000001, -42.383355999999999], [-73.388900000000007, -42.117531999999997], [-73.701335999999998, -43.365775999999997], [-74.331942999999995, -43.224958000000001], [-74.017956999999996, -41.794812999999998], [-73.677098999999998, -39.942213000000002], [-73.217592999999994, -39.258688999999997], [-73.505559000000005, -38.282882999999998], [-73.588060999999996, -37.156284999999997], [-73.166717000000006, -37.123779999999996], [-72.553137000000007, -35.508839999999999], [-71.861732000000003, -33.909092999999999], [-71.438450000000003, -32.418899000000003], [-71.668721000000005, -30.920645], [-71.370082999999994, -30.095682], [-71.489894000000007, -28.861442], [-70.905124000000001, -27.64038], [-70.724953999999997, -25.705924], [-70.403965999999997, -23.628996999999998], [-70.091245999999998, -21.393319000000002], [-70.164420000000007, -19.756468000000002], [-70.372572000000005, -18.347975000000002], [-69.858444000000006, -18.092694000000002], [-69.590423999999999, -17.580012], [-69.100246999999996, -18.260124999999999], [-68.966818000000004, -18.981683], [-68.442224999999993, -19.405068], [-68.757166999999995, -20.372658000000001], [-68.219913000000005, -21.494347000000001]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0427\u0438\u043b\u0438", "fr": "Chili", "en": "Chile", "nl": "Chili", "pt": "Chile", "no": "Chile", "de": "Chile", "it": "Cile", "sv": "Chile", "pl": "Chile", "fi": "Chile", "zh": "\u667a\u5229", "ja": "\u30c1\u30ea", "es": "Chile"}, "label_fr": "Chili", "name": "Chile", "dbpedia_uri": "http://dbpedia.org/resource/Chile"}, "id": "CHL"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[110.33918799999999, 18.678394999999998], [109.47521, 18.197700999999999], [108.655208, 18.507681999999999], [108.626217, 19.367888000000001], [109.119056, 19.821038999999999], [110.21159900000001, 20.101254000000001], [110.786551, 20.077534], [111.010051, 19.695930000000001], [110.57064699999999, 19.255879], [110.33918799999999, 18.678394999999998]]], [[[127.65740700000001, 49.760269999999998], [129.397818, 49.440600000000003], [130.58229299999999, 48.729686999999998], [130.98728199999999, 47.790132], [132.50667200000001, 47.788969999999999], [133.37359599999999, 48.183441999999999], [135.02631099999999, 48.478230000000003], [134.50081399999999, 47.578440000000001], [134.11236199999999, 47.212466999999997], [133.769644, 46.116926999999997], [133.097127, 45.144066000000002], [131.883454, 45.321162000000001], [131.02521200000001, 44.967953000000001], [131.288555, 44.111519999999999], [131.144688, 42.929989999999997], [130.63386600000001, 42.903015000000003], [130.640016, 42.395009000000002], [129.99426700000001, 42.985387000000003], [129.59666899999999, 42.424982], [128.05221499999999, 41.994284999999998], [128.20843300000001, 41.466771999999999], [127.343783, 41.503152], [126.869083, 41.816569000000001], [126.182045, 41.107335999999997], [125.079942, 40.569823999999997], [124.265625, 39.928493000000003], [122.86757, 39.637788], [122.131388, 39.170451999999997], [121.054554, 38.897471000000003], [121.585995, 39.360854000000003], [121.376757, 39.750261000000002], [122.168595, 40.422443000000001], [121.640359, 40.946390000000001], [120.768629, 40.593387999999997], [119.639602, 39.898055999999997], [119.023464, 39.252333], [118.042749, 39.204273999999998], [117.532702, 38.737636000000002], [118.05969899999999, 38.061475999999999], [118.87815000000001, 37.897325000000002], [118.911636, 37.448464000000001], [119.70280200000001, 37.156388999999997], [120.823457, 37.870427999999997], [121.711259, 37.481122999999997], [122.35793700000001, 37.454484000000001], [122.51999499999999, 36.930613999999998], [121.104164, 36.651328999999997], [120.63700900000001, 36.111440000000002], [119.664562, 35.609791000000001], [119.151208, 34.909858999999997], [120.227525, 34.360332], [120.620369, 33.376722999999998], [121.22901400000001, 32.460318999999998], [121.908146, 31.692174000000001], [121.891919, 30.949352000000001], [121.264257, 30.676266999999999], [121.503519, 30.142914999999999], [122.092114, 29.832519999999999], [121.938428, 29.018021999999998], [121.684439, 28.225512999999999], [121.12566099999999, 28.135673000000001], [120.395473, 27.053207], [119.585497, 25.740780999999998], [118.656871, 24.547391000000001], [117.281606, 23.624500999999999], [115.89073500000001, 22.782872999999999], [114.76382700000001, 22.668074000000001], [114.152547, 22.223759999999999], [113.80678, 22.54834], [113.241078, 22.051366999999999], [111.843592, 21.550494], [110.785466, 21.397144000000001], [110.444039, 20.341032999999999], [109.889861, 20.282457000000001], [109.627655, 21.008227000000002], [109.86448799999999, 21.395050999999999], [108.522813, 21.715212000000001], [108.05018, 21.552379999999999], [107.04342, 21.811899], [106.567273, 22.218205000000001], [106.725403, 22.794267999999999], [105.81124699999999, 22.976891999999999], [105.32920900000001, 23.352063000000001], [104.47685799999999, 22.81915], [103.504515, 22.703757], [102.706992, 22.708794999999999], [102.170436, 22.464753000000002], [101.652018, 22.318199], [101.80312000000001, 21.174367], [101.270026, 21.201651999999999], [101.18000499999999, 21.436572999999999], [101.15003299999999, 21.849983999999999], [100.416538, 21.558838999999999], [99.983489000000006, 21.742937000000001], [99.240898999999999, 22.118314000000002], [99.531992000000002, 22.949038999999999], [98.898748999999995, 23.142721999999999], [98.660262000000003, 24.063286000000002], [97.60472, 23.897404999999999], [97.724609000000001, 25.083637], [98.671837999999994, 25.918703000000001], [98.712093999999993, 26.743535999999999], [98.682689999999994, 27.508811999999999], [98.246230999999995, 27.747221], [97.911987999999994, 28.335944999999999], [97.327113999999995, 28.261583000000002], [96.248833000000005, 28.411031000000001], [96.586590999999999, 28.83098], [96.117678999999995, 29.452801999999998], [95.404802000000004, 29.031717], [94.565989999999999, 29.277438], [93.413347999999999, 28.640629000000001], [92.503118999999998, 27.896875999999999], [91.696657000000002, 27.771742], [91.258853999999999, 28.040614000000001], [90.730513999999999, 28.064954], [90.015828999999997, 28.296438999999999], [89.475809999999996, 28.042759], [88.814248000000006, 27.299316000000001], [88.730326000000005, 28.086865], [88.120441, 27.876542000000001], [86.954516999999996, 27.974262], [85.823319999999995, 28.203576000000002], [85.011638000000005, 28.642773999999999], [84.234579999999994, 28.839894000000001], [83.898993000000004, 29.320226000000002], [83.337114999999997, 29.463732], [82.327512999999996, 30.115268], [81.525803999999994, 30.422716999999999], [81.111255999999997, 30.183481], [79.721367000000001, 30.882715000000001], [78.738894000000002, 31.515906000000001], [78.458445999999995, 32.618164], [79.176129000000003, 32.483780000000003], [79.208892000000006, 32.994394999999997], [78.811086000000003, 33.506197999999998], [78.912268999999995, 34.321936000000001], [77.837451000000001, 35.494010000000003], [76.192847999999998, 35.898403000000002], [75.896896999999996, 36.666806000000001], [75.158028000000002, 37.133031000000003], [74.980001999999999, 37.419989999999999], [74.829986000000005, 37.990006999999999], [74.864816000000005, 38.378846000000003], [74.257514, 38.606507000000001], [73.928852000000006, 38.505814999999998], [73.675379000000007, 39.431237000000003], [73.960013000000004, 39.660007999999998], [73.822243999999998, 39.893973000000003], [74.776861999999994, 40.366425], [75.467827999999997, 40.562072000000001], [76.526368000000005, 40.427945999999999], [76.904483999999997, 41.066485999999998], [78.187196999999998, 41.185316], [78.543661, 41.582242999999998], [80.119429999999994, 42.123941000000002], [80.259990000000002, 42.349998999999997], [80.180149999999998, 42.920068000000001], [80.866206000000005, 43.180362000000002], [79.966105999999996, 44.917516999999997], [81.947070999999994, 45.317027000000003], [82.458926000000005, 45.539650000000002], [83.180484000000007, 47.330030999999998], [85.164289999999994, 47.000956000000002], [85.720483999999999, 47.452969000000003], [85.768232999999995, 48.455750999999999], [86.598776000000001, 48.549182000000002], [87.359970000000004, 49.214981000000002], [87.751264000000006, 49.297198000000002], [88.013831999999994, 48.599463], [88.854298, 48.069082000000002], [90.280826000000005, 47.693548999999997], [90.970809000000003, 46.888145999999999], [90.585768000000002, 45.719715999999998], [90.945539999999994, 45.286073000000002], [92.133891000000006, 45.115076000000002], [93.480733999999998, 44.975472000000003], [94.688929000000002, 44.352331999999997], [95.306875000000005, 44.241331000000002], [95.762455000000003, 43.319448999999999], [96.349395999999999, 42.725634999999997], [97.451757000000001, 42.748890000000003], [99.515816999999998, 42.524690999999997], [100.845866, 42.663803999999999], [101.83304, 42.514873000000001], [103.31227800000001, 41.907468000000001], [104.522282, 41.908346999999999], [104.964994, 41.597410000000004], [106.129316, 42.134327999999996], [107.744773, 42.481515999999999], [109.243596, 42.519446000000002], [110.412103, 42.871234000000001], [111.129682, 43.406834000000003], [111.829588, 43.743118000000003], [111.667737, 44.073175999999997], [111.348377, 44.457442], [111.873306, 45.102079000000003], [112.43606200000001, 45.011645999999999], [113.46390700000001, 44.808892999999998], [114.46033199999999, 45.339816999999996], [115.985096, 45.727235], [116.717868, 46.388202], [117.421701, 46.672733000000001], [118.874326, 46.805411999999997], [119.66327, 46.692680000000003], [119.772824, 47.048059000000002], [118.866574, 47.747059999999998], [118.064143, 48.06673], [117.295507, 47.697709000000003], [116.308953, 47.853409999999997], [115.74283699999999, 47.726545000000002], [115.485282, 48.135382999999997], [116.191802, 49.134597999999997], [116.67880100000001, 49.888531], [117.879244, 49.510983000000003], [119.288461, 50.142882999999998], [119.279366, 50.582908000000003], [120.18205, 51.643566], [120.738191, 51.964115], [120.72578900000001, 52.516226000000003], [120.177089, 52.753886000000001], [121.003085, 53.251401000000001], [122.24574800000001, 53.431725999999998], [123.571507, 53.458804000000001], [125.06821100000001, 53.161045000000001], [125.946349, 52.792799000000002], [126.56439899999999, 51.784255000000002], [126.93915699999999, 51.353893999999997], [127.28745600000001, 50.739797000000003], [127.65740700000001, 49.760269999999998]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0438\u0442\u0430\u0439 (\u0441\u0442\u0440\u0430\u043d\u0430)", "fr": "Chine", "en": "China", "nl": "China", "pt": "China (civiliza\u00e7\u00e3o)", "no": "Kina", "de": "China (Kulturraum)", "sv": "Kina (region)", "pl": "Chiny", "zh": "\u4e2d\u56fd", "ja": "\u4e2d\u56fd", "es": "China (regi\u00f3n)"}, "label_fr": "Chine", "name": "China", "dbpedia_uri": "http://dbpedia.org/resource/China"}, "id": "CHN"}, {"geometry": {"type": "Polygon", "coordinates": [[[-2.856125, 4.9944759999999997], [-3.3110840000000001, 4.9842959999999996], [-4.0088200000000001, 5.1798130000000002], [-4.6499170000000003, 5.1682639999999997], [-5.8344959999999997, 4.9937009999999997], [-6.5287689999999996, 4.7050879999999999], [-7.5189409999999999, 4.3382880000000004], [-7.7121589999999998, 4.3645659999999999], [-7.6353679999999997, 5.1881589999999997], [-7.5397150000000002, 5.313345], [-7.5701530000000004, 5.7073520000000002], [-7.9936930000000004, 6.1261900000000002], [-8.3113480000000006, 6.1930329999999998], [-8.6028800000000007, 6.4675640000000003], [-8.3854520000000008, 6.9118009999999996], [-8.4854459999999996, 7.3952080000000002], [-8.4392980000000009, 7.6860429999999997], [-8.2807030000000008, 7.6871799999999997], [-8.2217920000000007, 8.123329], [-8.2990490000000001, 8.3164440000000006], [-8.2034990000000008, 8.4554530000000003], [-7.8320999999999996, 8.575704], [-8.0791140000000006, 9.3762240000000006], [-8.3096160000000001, 9.7895319999999995], [-8.2293369999999992, 10.129020000000001], [-8.0299440000000004, 10.206535000000001], [-7.8995899999999999, 10.297382000000001], [-7.6227590000000003, 10.147235999999999], [-6.8505070000000003, 10.138994], [-6.666461, 10.430811], [-6.4939650000000002, 10.411303], [-6.2052230000000002, 10.524061], [-6.0504519999999999, 10.096361], [-5.8169259999999996, 10.222555], [-5.4043419999999998, 10.370737], [-4.9546530000000004, 10.152714], [-4.779884, 9.8219849999999997], [-4.330247, 9.6108349999999998], [-3.9804490000000001, 9.8623440000000002], [-3.5118990000000001, 9.9003259999999997], [-2.827496, 9.6424610000000008], [-2.5621900000000002, 8.2196280000000002], [-2.9835850000000002, 7.3797050000000004], [-3.24437, 6.2504720000000002], [-2.8107009999999999, 5.3890510000000003], [-2.856125, 4.9944759999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u043e\u0442-\u0434\u2019\u0418\u0432\u0443\u0430\u0440", "fr": "C\u00f4te d'Ivoire", "en": "C\u00f4te d'Ivoire", "nl": "Ivoorkust", "pt": "Costa do Marfim", "no": "Elfenbenskysten", "de": "Elfenbeink\u00fcste", "it": "Costa d'Avorio", "sv": "Elfenbenskusten", "pl": "Wybrze\u017ce Ko\u015bci S\u0142oniowej", "fi": "Norsunluurannikko", "zh": "\u79d1\u7279\u8fea\u74e6", "ja": "\u30b3\u30fc\u30c8\u30b8\u30dc\u30ef\u30fc\u30eb", "es": "Costa de Marfil"}, "label_fr": "C\u00f4te d'Ivoire", "name": "Ivory Coast", "dbpedia_uri": "http://dbpedia.org/resource/C%C3%B4te_d%27Ivoire"}, "id": "CIV"}, {"geometry": {"type": "Polygon", "coordinates": [[[13.075822000000001, 2.2670970000000001], [12.951333999999999, 2.3216160000000001], [12.35938, 2.192812], [11.751664999999999, 2.3267579999999999], [11.276449, 2.2610510000000001], [9.6491579999999999, 2.2838660000000002], [9.7951960000000007, 3.073404], [9.4043670000000006, 3.7345269999999999], [8.9481160000000006, 3.9041290000000002], [8.7449239999999993, 4.3522150000000002], [8.4888159999999999, 4.4956170000000002], [8.5002879999999994, 4.7719829999999996], [8.7575330000000005, 5.4796659999999999], [9.2331629999999993, 6.4444910000000002], [9.5227059999999994, 6.4534820000000002], [10.118277000000001, 7.0387700000000004], [10.497375, 7.055358], [11.058788, 6.6444270000000003], [11.745774000000001, 6.9813830000000001], [11.839309, 7.3970419999999999], [12.063946, 7.7998079999999996], [12.218871999999999, 8.3058239999999994], [12.753672, 8.7177629999999997], [12.955468, 9.4177719999999994], [13.1676, 9.6406259999999993], [13.308676, 10.160361999999999], [13.572950000000001, 10.798565999999999], [14.415379, 11.572369], [14.468192, 11.904752], [14.577178, 12.085361000000001], [14.181336, 12.483656999999999], [14.213531, 12.802035], [14.495787, 12.859396], [14.893386, 12.219048000000001], [14.960152000000001, 11.555574], [14.923565, 10.891325], [15.467873000000001, 9.9823369999999993], [14.909354, 9.9921290000000003], [14.627200999999999, 9.9209189999999996], [14.171466000000001, 10.021378], [13.954217999999999, 9.5494950000000003], [14.544466999999999, 8.9658610000000003], [14.979996, 8.7961039999999997], [15.120865999999999, 8.3821499999999993], [15.436092, 7.692812], [15.27946, 7.4219249999999999], [14.776545, 6.4084979999999998], [14.53656, 6.2269589999999999], [14.459407000000001, 5.4517610000000003], [14.558935999999999, 5.0305980000000003], [14.478372, 4.7326050000000004], [14.950953, 4.2103890000000002], [15.03622, 3.8513670000000002], [15.405396, 3.3353009999999998], [15.862731999999999, 3.0135369999999999], [15.907381000000001, 2.5573890000000001], [16.012851999999999, 2.2676400000000001], [15.940918999999999, 1.727673], [15.146342000000001, 1.9640150000000001], [14.337813000000001, 2.227875], [13.075822000000001, 2.2670970000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0430\u043c\u0435\u0440\u0443\u043d", "fr": "Cameroun", "en": "Cameroon", "nl": "Kameroen", "pt": "Camar\u00f5es", "no": "Kamerun", "de": "Kamerun", "it": "Camerun", "sv": "Kamerun", "pl": "Kamerun", "fi": "Kamerun", "zh": "\u5580\u9ea6\u9686", "ja": "\u30ab\u30e1\u30eb\u30fc\u30f3", "es": "Camer\u00fan"}, "label_fr": "Cameroun", "name": "Cameroon", "dbpedia_uri": "http://dbpedia.org/resource/Cameroon"}, "id": "CMR"}, {"geometry": {"type": "Polygon", "coordinates": [[[30.833860000000001, 3.509166], [30.773347000000001, 2.3398829999999999], [31.174149, 2.2044649999999999], [30.85267, 1.849396], [30.468508, 1.5838049999999999], [30.086154000000001, 1.0623130000000001], [29.875779000000001, 0.59738000000000002], [29.819503000000001, -0.20530999999999999], [29.587838000000001, -0.58740599999999998], [29.579466, -1.341313], [29.291886999999999, -1.6200559999999999], [29.254835, -2.2151100000000001], [29.117478999999999, -2.292211], [29.024926000000001, -2.8392580000000001], [29.276384, -3.2939069999999999], [29.339998000000001, -4.4999830000000003], [29.519987, -5.4199789999999997], [29.419993000000002, -5.9399990000000003], [29.620031999999998, -6.5200149999999999], [30.199997, -7.0799810000000001], [30.740015, -8.3400069999999999], [30.346086, -8.2382570000000008], [29.002911999999998, -8.4070319999999992], [28.734867000000001, -8.5265590000000007], [28.449871000000002, -9.1649180000000001], [28.673681999999999, -9.6059249999999992], [28.49607, -10.789884000000001], [28.372253000000001, -11.793647], [28.642416999999998, -11.971569000000001], [29.341548, -12.360744], [29.616001000000001, -12.178895000000001], [29.699614, -13.257227], [28.934286, -13.248958], [28.523561999999998, -12.698604], [28.155108999999999, -12.272481000000001], [27.388798999999999, -12.132747], [27.16442, -11.608748], [26.553087999999999, -11.924440000000001], [25.752310000000001, -11.784965], [25.418118, -11.330935999999999], [24.783169999999998, -11.238694000000001], [24.314516000000001, -11.262826], [24.257155000000001, -10.951993], [23.912215, -10.926826], [23.456790999999999, -10.867863], [22.837344999999999, -11.017621999999999], [22.402798000000001, -10.993074999999999], [22.155268, -11.084801000000001], [22.208753000000002, -9.8947959999999995], [21.875181999999999, -9.5237079999999992], [21.801801000000001, -8.9087069999999997], [21.949131000000001, -8.3059010000000004], [21.746455999999998, -7.9200850000000003], [21.728110999999998, -7.2908720000000002], [20.514748000000001, -7.2996059999999998], [20.601823, -6.9393180000000001], [20.091622000000001, -6.9430899999999998], [20.037723, -7.1163610000000004], [19.417501999999999, -7.1554289999999998], [19.166613000000002, -7.7381840000000004], [19.016752, -7.9882460000000002], [18.464175999999998, -7.8470139999999997], [18.134222000000001, -7.9876779999999998], [17.47297, -8.0685509999999994], [17.089995999999999, -7.5456890000000003], [16.860191, -7.2222980000000003], [16.573180000000001, -6.6226450000000003], [16.326528, -5.8774699999999998], [13.375597000000001, -5.8642409999999998], [13.024869000000001, -5.9843890000000002], [12.735170999999999, -5.9656820000000002], [12.322431999999999, -6.1000920000000001], [12.182337, -5.7899310000000002], [12.436688, -5.684304], [12.468004000000001, -5.2483620000000002], [12.631612000000001, -4.9912710000000002], [12.995517, -4.7811029999999999], [13.258240000000001, -4.8829570000000002], [13.600235, -4.5001379999999997], [14.144956000000001, -4.5100090000000002], [14.209035, -4.7930919999999997], [14.582604, -4.9702390000000003], [15.170992, -4.3435069999999998], [15.753539999999999, -3.855165], [16.00629, -3.5351330000000001], [15.972803000000001, -2.7123919999999999], [16.407091999999999, -1.7409269999999999], [16.865307000000001, -1.225816], [17.523716, -0.74382999999999999], [17.638645, -0.42483199999999999], [17.663553, -0.058083999999999997], [17.826540000000001, 0.28892299999999999], [17.774191999999999, 0.85565899999999995], [17.898834999999998, 1.741832], [18.094276000000001, 2.3657219999999999], [18.393792000000001, 2.9004430000000001], [18.453064999999999, 3.5043859999999998], [18.542981999999999, 4.2017850000000001], [18.932312, 4.7095060000000002], [19.467784000000002, 5.0315279999999998], [20.290679000000001, 4.6916779999999996], [20.927591, 4.3227859999999998], [21.659123000000001, 4.224342], [22.405124000000001, 4.0291600000000001], [22.704124, 4.633051], [22.841480000000001, 4.7101259999999998], [23.297214, 4.609693], [24.410530999999999, 5.108784], [24.805029000000001, 4.8972470000000001], [25.128833, 4.9272450000000001], [25.278797999999998, 5.1704080000000001], [25.650455000000001, 5.2560880000000001], [26.402761000000002, 5.1508750000000001], [27.044065, 5.127853], [27.374226, 5.2339440000000002], [27.979977000000002, 4.4084130000000004], [28.428993999999999, 4.2871550000000003], [28.696677999999999, 4.4550770000000002], [29.159078000000001, 4.3892670000000003], [29.715994999999999, 4.6008050000000003], [29.953499999999998, 4.173699], [30.833860000000001, 3.509166]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0414\u0435\u043c\u043e\u043a\u0440\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u041a\u043e\u043d\u0433\u043e", "fr": "R\u00e9publique d\u00e9mocratique du Congo", "en": "Democratic Republic of the Congo", "nl": "Congo-Kinshasa", "pt": "Rep\u00fablica Democr\u00e1tica do Congo", "no": "Den demokratiske republikken Kongo", "de": "Demokratische Republik Kongo", "it": "Repubblica Democratica del Congo", "sv": "Demokratiska republiken Kongo", "pl": "Demokratyczna Republika Konga", "fi": "Kongon demokraattinen tasavalta", "zh": "\u521a\u679c\u6c11\u4e3b\u5171\u548c\u56fd", "ja": "\u30b3\u30f3\u30b4\u6c11\u4e3b\u5171\u548c\u56fd", "es": "Rep\u00fablica Democr\u00e1tica del Congo"}, "label_fr": "R\u00e9publique d\u00e9mocratique du Congo", "name": "Democratic Republic of the Congo", "dbpedia_uri": "http://dbpedia.org/resource/Democratic_Republic_of_the_Congo"}, "id": "COD"}, {"geometry": {"type": "Polygon", "coordinates": [[[12.995517, -4.7811029999999999], [12.620760000000001, -4.4380230000000003], [12.318607999999999, -4.60623], [11.914963, -5.0379870000000002], [11.093773000000001, -3.9788269999999999], [11.855122, -3.4268709999999998], [11.478039000000001, -2.765619], [11.820964, -2.5141610000000001], [12.495703000000001, -2.3916879999999998], [12.575284, -1.9485110000000001], [13.109619, -2.4287399999999999], [13.992407, -2.4708049999999999], [14.29921, -1.9982759999999999], [14.425456000000001, -1.333407], [14.316418000000001, -0.55262699999999998], [13.843321, 0.038758000000000001], [14.276266, 1.19693], [14.026669, 1.3956770000000001], [13.282631, 1.314184], [13.003114, 1.8308960000000001], [13.075822000000001, 2.2670970000000001], [14.337813000000001, 2.227875], [15.146342000000001, 1.9640150000000001], [15.940918999999999, 1.727673], [16.012851999999999, 2.2676400000000001], [16.537057999999998, 3.1982550000000001], [17.133042, 3.7281970000000002], [17.809899999999999, 3.5601959999999999], [18.453064999999999, 3.5043859999999998], [18.393792000000001, 2.9004430000000001], [18.094276000000001, 2.3657219999999999], [17.898834999999998, 1.741832], [17.774191999999999, 0.85565899999999995], [17.826540000000001, 0.28892299999999999], [17.663553, -0.058083999999999997], [17.638645, -0.42483199999999999], [17.523716, -0.74382999999999999], [16.865307000000001, -1.225816], [16.407091999999999, -1.7409269999999999], [15.972803000000001, -2.7123919999999999], [16.00629, -3.5351330000000001], [15.753539999999999, -3.855165], [15.170992, -4.3435069999999998], [14.582604, -4.9702390000000003], [14.209035, -4.7930919999999997], [14.144956000000001, -4.5100090000000002], [13.600235, -4.5001379999999997], [13.258240000000001, -4.8829570000000002], [12.995517, -4.7811029999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u041a\u043e\u043d\u0433\u043e", "fr": "R\u00e9publique du Congo", "en": "Republic of the Congo", "nl": "Congo-Brazzaville", "pt": "Congo", "no": "Republikken Kongo", "de": "Republik Kongo", "it": "Repubblica del Congo", "sv": "Kongo-Brazzaville", "pl": "Kongo", "fi": "Kongon tasavalta", "zh": "\u521a\u679c\u5171\u548c\u56fd", "ja": "\u30b3\u30f3\u30b4\u5171\u548c\u56fd", "es": "Rep\u00fablica del Congo"}, "label_fr": "R\u00e9publique du Congo", "name": "Republic of the Congo", "dbpedia_uri": "http://dbpedia.org/resource/Republic_of_the_Congo"}, "id": "COG"}, {"geometry": {"type": "Polygon", "coordinates": [[[-75.373222999999996, -0.152032], [-75.801466000000005, 0.084801000000000001], [-76.292314000000005, 0.416047], [-76.57638, 0.256936], [-77.424983999999995, 0.39568700000000001], [-77.668612999999993, 0.82589299999999999], [-77.855061000000006, 0.80992500000000001], [-78.855259000000004, 1.380924], [-78.990934999999993, 1.69137], [-78.617830999999995, 1.7664040000000001], [-78.662118000000007, 2.2673549999999998], [-78.427610000000001, 2.629556], [-77.931543000000005, 2.6966060000000001], [-77.510430999999997, 3.3250169999999999], [-77.127690000000001, 3.8496359999999998], [-77.496272000000005, 4.0876060000000001], [-77.307601000000005, 4.6679839999999997], [-77.533220999999998, 5.5828119999999997], [-77.318815000000001, 5.8453540000000004], [-77.476660999999993, 6.6911160000000001], [-77.881570999999994, 7.2237710000000002], [-77.753414000000006, 7.7098399999999998], [-77.431107999999995, 7.6380610000000004], [-77.242565999999997, 7.9352780000000003], [-77.474722999999997, 8.524286], [-77.353361000000007, 8.6705050000000004], [-76.836674000000002, 8.6387490000000007], [-76.086383999999995, 9.3368210000000005], [-75.674599999999998, 9.4432480000000005], [-75.664704, 9.7740030000000004], [-75.480425999999994, 10.61899], [-74.906895000000006, 11.083045], [-74.276752999999999, 11.102036], [-74.197222999999994, 11.310473], [-73.414764000000005, 11.227015], [-72.627835000000005, 11.731972000000001], [-72.238195000000005, 11.955550000000001], [-71.754090000000005, 12.437303], [-71.399822, 12.376041000000001], [-71.137461000000002, 12.112982000000001], [-71.331584000000007, 11.776284], [-71.973922000000002, 11.608672], [-72.227575000000002, 11.108701999999999], [-72.614658000000006, 10.821975], [-72.905286000000004, 10.450343999999999], [-73.027603999999997, 9.7367699999999999], [-73.304952, 9.1519999999999992], [-72.788730000000001, 9.0850270000000002], [-72.660494999999997, 8.6252879999999994], [-72.439862000000005, 8.4052749999999996], [-72.360900999999998, 8.0026379999999993], [-72.479679000000004, 7.6325060000000002], [-72.444486999999995, 7.4237849999999996], [-72.198352, 7.3404309999999997], [-71.960176000000004, 6.9916150000000004], [-70.674233999999998, 7.0877850000000002], [-70.093312999999995, 6.9603760000000001], [-69.389480000000006, 6.0998609999999998], [-68.985319000000004, 6.2068050000000001], [-68.265051999999997, 6.1532679999999997], [-67.695087000000001, 6.2673180000000004], [-67.341440000000006, 6.0954680000000003], [-67.521531999999993, 5.55687], [-67.744697000000002, 5.2211290000000004], [-67.823012000000006, 4.5039369999999996], [-67.621836000000002, 3.8394819999999998], [-67.337564, 3.5423420000000001], [-67.303173000000001, 3.318454], [-67.809938000000002, 2.8206549999999999], [-67.447091999999998, 2.6002809999999998], [-67.181293999999994, 2.2506379999999999], [-66.876326000000006, 1.2533609999999999], [-67.065048000000004, 1.130112], [-67.259997999999996, 1.7199990000000001], [-67.537809999999993, 2.0371630000000001], [-67.868565000000004, 1.692455], [-69.816973000000004, 1.7148049999999999], [-69.804597000000001, 1.089081], [-69.218637999999999, 0.98567700000000003], [-69.252433999999994, 0.60265100000000005], [-69.452395999999993, 0.70615899999999998], [-70.015566000000007, 0.54141399999999995], [-70.020656000000002, -0.18515599999999999], [-69.577065000000005, -0.54999200000000004], [-69.420485999999997, -1.122619], [-69.444102000000001, -1.556287], [-69.893635000000003, -4.2981870000000004], [-70.394043999999994, -3.766591], [-70.692682000000005, -3.7428720000000002], [-70.047708999999998, -2.7251560000000001], [-70.813475999999994, -2.2568649999999999], [-71.413646, -2.3428019999999998], [-71.774760999999998, -2.1697899999999999], [-72.325787000000005, -2.434218], [-73.070391999999998, -2.308954], [-73.659503999999998, -1.260491], [-74.122394999999997, -1.0028330000000001], [-74.441601000000006, -0.53081999999999996], [-75.106624999999994, -0.057204999999999999], [-75.373222999999996, -0.152032]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u043e\u043b\u0443\u043c\u0431\u0438\u044f", "fr": "Colombie", "en": "Colombia", "nl": "Colombia", "pt": "Col\u00f4mbia", "no": "Colombia", "de": "Kolumbien", "it": "Colombia", "sv": "Colombia", "pl": "Kolumbia", "fi": "Kolumbia", "zh": "\u54e5\u4f26\u6bd4\u4e9a", "ja": "\u30b3\u30ed\u30f3\u30d3\u30a2", "es": "Colombia"}, "label_fr": "Colombie", "name": "Colombia", "dbpedia_uri": "http://dbpedia.org/resource/Colombia"}, "id": "COL"}, {"geometry": {"type": "Polygon", "coordinates": [[[-82.965783000000002, 8.225028], [-83.508437000000001, 8.4469270000000005], [-83.711473999999995, 8.6568360000000002], [-83.596312999999995, 8.8304430000000007], [-83.632642000000004, 9.0513860000000008], [-83.909886, 9.2908030000000004], [-84.303402000000006, 9.4873539999999998], [-84.647644, 9.6155369999999998], [-84.713351000000003, 9.9080519999999996], [-84.975660000000005, 10.086722999999999], [-84.911375000000007, 9.795992], [-85.110923, 9.5570400000000006], [-85.339488000000003, 9.8345420000000008], [-85.660786999999999, 9.9333469999999995], [-85.797444999999996, 10.134886], [-85.791708999999997, 10.439337], [-85.659313999999995, 10.754331000000001], [-85.941725000000005, 10.895277999999999], [-85.712540000000004, 11.088445], [-85.561852000000002, 11.217119], [-84.903002999999998, 10.952303000000001], [-84.673068999999998, 11.082656999999999], [-84.355930999999998, 10.999226], [-84.190179000000001, 10.79345], [-83.895054000000002, 10.726839], [-83.655612000000005, 10.938764000000001], [-83.402320000000003, 10.395438], [-83.015676999999997, 9.9929819999999996], [-82.546195999999995, 9.5661349999999992], [-82.932890999999998, 9.4768120000000007], [-82.927154999999999, 9.0743299999999998], [-82.719183000000001, 8.9257089999999994], [-82.868656999999999, 8.8072660000000003], [-82.829770999999994, 8.6262950000000007], [-82.913176000000007, 8.4235170000000004], [-82.965783000000002, 8.225028]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u043e\u0441\u0442\u0430-\u0420\u0438\u043a\u0430", "fr": "Costa Rica", "en": "Costa Rica", "nl": "Costa Rica", "pt": "Costa Rica", "no": "Costa Rica", "de": "Costa Rica", "it": "Costa Rica", "sv": "Costa Rica", "pl": "Kostaryka", "fi": "Costa Rica", "zh": "\u54e5\u65af\u8fbe\u9ece\u52a0", "ja": "\u30b3\u30b9\u30bf\u30ea\u30ab", "es": "Costa Rica"}, "label_fr": "Costa Rica", "name": "Costa Rica", "dbpedia_uri": "http://dbpedia.org/resource/Costa_Rica"}, "id": "CRI"}, {"geometry": {"type": "Polygon", "coordinates": [[[-82.268151000000003, 23.188611000000002], [-81.404456999999994, 23.117270999999999], [-80.618769, 23.105979999999999], [-79.679524000000001, 22.765302999999999], [-79.281486000000001, 22.399201999999999], [-78.347434000000007, 22.512166000000001], [-77.993296000000001, 22.277194000000001], [-77.146422000000001, 21.657851000000001], [-76.523825000000002, 21.20682], [-76.19462, 21.220565000000001], [-75.598222000000007, 21.016624], [-75.671059999999997, 20.735091000000001], [-74.933896000000004, 20.693905000000001], [-74.178025000000005, 20.284628000000001], [-74.296648000000005, 20.050379], [-74.961595000000003, 19.923435000000001], [-75.634680000000003, 19.873774000000001], [-76.323656, 19.952891000000001], [-77.755481000000003, 19.855481000000001], [-77.085108000000005, 20.413354000000002], [-77.492654999999999, 20.673105], [-78.137292000000002, 20.739948999999999], [-78.482827, 21.028613], [-78.719866999999994, 21.598113999999999], [-79.284999999999997, 21.559175], [-80.217474999999993, 21.827324000000001], [-80.517534999999995, 22.037078999999999], [-81.820943, 22.192056999999998], [-82.169991999999993, 22.387108999999999], [-81.795001999999997, 22.636965], [-82.775897999999998, 22.68815], [-83.494459000000006, 22.168517999999999], [-83.908799999999999, 22.154565000000002], [-84.052150999999995, 21.910575000000001], [-84.547030000000007, 21.801227999999998], [-84.974911000000006, 21.896028000000001], [-84.447062000000003, 22.20495], [-84.230356999999998, 22.565754999999999], [-83.778239999999997, 22.788118000000001], [-83.267548000000005, 22.983042000000001], [-82.510435999999999, 23.078747], [-82.268151000000003, 23.188611000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0443\u0431\u0430", "fr": "Cuba", "en": "Cuba", "nl": "Cuba (land)", "pt": "Cuba", "no": "Cuba", "de": "Kuba", "it": "Cuba", "sv": "Kuba", "pl": "Kuba", "fi": "Kuuba", "zh": "\u53e4\u5df4", "ja": "\u30ad\u30e5\u30fc\u30d0", "es": "Cuba"}, "label_fr": "Cuba", "name": "Cuba", "dbpedia_uri": "http://dbpedia.org/resource/Cuba"}, "id": "CUB"}, {"geometry": {"type": "Polygon", "coordinates": [[[32.731780000000001, 35.140025999999999], [32.802473999999997, 35.145504000000003], [32.946961000000002, 35.386702999999997], [33.667226999999997, 35.373215999999999], [34.576473999999997, 35.671596000000001], [33.900804000000001, 35.245756], [33.973616999999997, 35.058506000000001], [33.866439999999997, 35.093595000000001], [33.675392000000002, 35.017862999999998], [33.525685000000003, 35.038688], [33.475816999999999, 35.000345000000003], [33.455922000000001, 35.101424000000002], [33.383833000000003, 35.162711999999999], [33.190976999999997, 35.173124999999999], [32.919572000000002, 35.087833000000003], [32.731780000000001, 35.140025999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0443\u0440\u0435\u0446\u043a\u0430\u044f \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u0421\u0435\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u041a\u0438\u043f\u0440\u0430", "fr": "Chypre du Nord", "en": "Northern Cyprus", "nl": "Turkse Republiek Noord-Cyprus", "pt": "Rep\u00fablica Turca do Chipre do Norte", "no": "Nord-Kypros", "de": "T\u00fcrkische Republik Nordzypern", "it": "Repubblica Turca di Cipro del Nord", "sv": "Nordcypern", "pl": "Cypr P\u00f3\u0142nocny", "fi": "Pohjois-Kyproksen turkkilainen tasavalta", "zh": "\u5317\u8cfd\u666e\u52d2\u65af\u571f\u8033\u5176\u5171\u548c\u570b", "ja": "\u5317\u30ad\u30d7\u30ed\u30b9\u30fb\u30c8\u30eb\u30b3\u5171\u548c\u56fd", "es": "Rep\u00fablica Turca del Norte de Chipre"}, "label_fr": "Chypre du Nord", "name": "Northern Cyprus", "dbpedia_uri": "http://dbpedia.org/resource/Northern_Cyprus"}, "id": "-99"}, {"geometry": {"type": "Polygon", "coordinates": [[[33.973616999999997, 35.058506000000001], [34.004880999999997, 34.978098000000003], [32.979827, 34.571869], [32.490296000000001, 34.701655000000002], [32.256667, 35.103231999999998], [32.731780000000001, 35.140025999999999], [32.919572000000002, 35.087833000000003], [33.190976999999997, 35.173124999999999], [33.383833000000003, 35.162711999999999], [33.455922000000001, 35.101424000000002], [33.475816999999999, 35.000345000000003], [33.525685000000003, 35.038688], [33.675392000000002, 35.017862999999998], [33.866439999999997, 35.093595000000001], [33.973616999999997, 35.058506000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u041a\u0438\u043f\u0440", "fr": "Chypre (pays)", "en": "Cyprus", "nl": "Cyprus", "pt": "Chipre", "no": "Kypros", "de": "Republik Zypern", "it": "Cipro", "sv": "Cypern", "pl": "Cypr", "fi": "Kyproksen tasavalta", "zh": "\u8cfd\u666e\u52d2\u65af", "ja": "\u30ad\u30d7\u30ed\u30b9", "es": "Chipre"}, "label_fr": "Chypre (pays)", "name": "Cyprus", "dbpedia_uri": "http://dbpedia.org/resource/Cyprus"}, "id": "CYP"}, {"geometry": {"type": "Polygon", "coordinates": [[[16.960287999999998, 48.596981999999997], [16.499282999999998, 48.785808000000003], [16.029647000000001, 48.733899000000001], [15.253416, 49.039073999999999], [14.901446999999999, 48.964402], [14.338898, 48.555304999999997], [13.595946, 48.877172000000002], [13.031328999999999, 49.307068000000001], [12.521024000000001, 49.547415000000001], [12.415191, 49.969121000000001], [12.240111000000001, 50.266337999999998], [12.966837, 50.484076000000002], [13.338132, 50.733234000000003], [14.056228000000001, 50.926918000000001], [14.307013, 51.117268000000003], [14.570717999999999, 51.002338999999999], [15.016996000000001, 51.106673999999998], [15.490971999999999, 50.784730000000003], [16.238627000000001, 50.697732999999999], [16.176252999999999, 50.422606999999999], [16.719476, 50.215747], [16.868769, 50.473973999999998], [17.554566999999999, 50.362146000000003], [17.649445, 50.049038000000003], [18.392914000000001, 49.988629000000003], [18.853144, 49.496229999999997], [18.554970999999998, 49.495015000000002], [18.399994, 49.315001000000002], [18.170497999999998, 49.271515000000001], [18.104973000000001, 49.043982999999997], [17.913512000000001, 48.996493000000001], [17.886485, 48.903475], [17.545006999999998, 48.800018999999999], [17.101984999999999, 48.816969], [16.960287999999998, 48.596981999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0427\u0435\u0445\u0438\u044f", "fr": "R\u00e9publique tch\u00e8que", "en": "Czech Republic", "nl": "Tsjechi\u00eb", "pt": "Rep\u00fablica Checa", "no": "Tsjekkia", "de": "Tschechien", "it": "Repubblica Ceca", "sv": "Tjeckien", "pl": "Czechy", "fi": "T\u0161ekki", "zh": "\u6377\u514b", "ja": "\u30c1\u30a7\u30b3", "es": "Rep\u00fablica Checa"}, "label_fr": "R\u00e9publique tch\u00e8que", "name": "Czech Republic", "dbpedia_uri": "http://dbpedia.org/resource/Czech_Republic"}, "id": "CZE"}, {"geometry": {"type": "Polygon", "coordinates": [[[9.9219059999999999, 54.983103999999997], [9.9395799999999994, 54.596642000000003], [10.950112000000001, 54.363607000000002], [10.939467, 54.008693000000001], [11.956251999999999, 54.196486], [12.51844, 54.470371], [13.647467000000001, 54.075510999999999], [14.119686, 53.757029000000003], [14.353315, 53.248170999999999], [14.074521000000001, 52.981262999999998], [14.4376, 52.624850000000002], [14.685026000000001, 52.089947000000002], [14.607098000000001, 51.745187999999999], [15.016996000000001, 51.106673999999998], [14.570717999999999, 51.002338999999999], [14.307013, 51.117268000000003], [14.056228000000001, 50.926918000000001], [13.338132, 50.733234000000003], [12.966837, 50.484076000000002], [12.240111000000001, 50.266337999999998], [12.415191, 49.969121000000001], [12.521024000000001, 49.547415000000001], [13.031328999999999, 49.307068000000001], [13.595946, 48.877172000000002], [13.243357, 48.416114999999998], [12.884103, 48.289146000000002], [13.025850999999999, 47.637583999999997], [12.932627, 47.467646000000002], [12.620760000000001, 47.672387999999998], [12.141356999999999, 47.703082999999999], [11.426413999999999, 47.523766000000002], [10.544504, 47.566398999999997], [10.402084, 47.302487999999997], [9.8960679999999996, 47.580196999999998], [9.5942260000000008, 47.525058000000001], [8.5226120000000005, 47.830827999999997], [8.3173010000000005, 47.613579999999999], [7.4667589999999997, 47.620581999999999], [7.5936760000000003, 48.333019], [8.0992789999999992, 49.017783999999999], [6.6582299999999996, 49.201957999999998], [6.1863200000000003, 49.463802999999999], [6.2427510000000002, 49.902225999999999], [6.0430729999999997, 50.128051999999997], [6.1566580000000002, 50.803721000000003], [5.988658, 51.851616], [6.5893969999999999, 51.852029000000002], [6.8428699999999996, 52.228439999999999], [7.0920529999999999, 53.144043000000003], [6.9051400000000003, 53.482162000000002], [7.1004250000000004, 53.693931999999997], [7.9362389999999996, 53.748296000000003], [8.1217059999999996, 53.527791999999998], [8.8007340000000003, 54.020786000000001], [8.5721179999999997, 54.395645999999999], [8.5262290000000007, 54.962744000000001], [9.2820490000000007, 54.830865000000003], [9.9219059999999999, 54.983103999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0435\u0440\u043c\u0430\u043d\u0438\u044f", "fr": "Allemagne", "en": "Germany", "nl": "Duitsland", "pt": "Alemanha", "no": "Tyskland", "de": "Deutschland", "it": "Germania", "sv": "Tyskland", "pl": "Niemcy", "fi": "Saksa", "zh": "\u5fb7\u56fd", "ja": "\u30c9\u30a4\u30c4", "es": "Alemania"}, "label_fr": "Allemagne", "name": "Germany", "dbpedia_uri": "http://dbpedia.org/resource/Germany"}, "id": "DEU"}, {"geometry": {"type": "Polygon", "coordinates": [[[43.081226000000001, 12.699638999999999], [43.317852000000002, 12.390148], [43.286380999999999, 11.974928], [42.715873999999999, 11.735640999999999], [43.145305, 11.46204], [42.776851999999998, 10.926879], [42.554929999999999, 11.10511], [42.314140000000002, 11.0342], [41.755569999999999, 11.05091], [41.73959, 11.35511], [41.661760000000001, 11.6312], [42, 12.1], [42.351559999999999, 12.54223], [42.779642000000003, 12.455416], [43.081226000000001, 12.699638999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0414\u0436\u0438\u0431\u0443\u0442\u0438", "fr": "Djibouti", "en": "Djibouti", "nl": "Djibouti (land)", "pt": "Djibouti", "no": "Djibouti", "de": "Dschibuti", "it": "Gibuti", "sv": "Djibouti", "pl": "D\u017cibuti", "fi": "Djibouti", "zh": "\u5409\u5e03\u63d0", "ja": "\u30b8\u30d6\u30c1", "es": "Yibuti"}, "label_fr": "Djibouti", "name": "Djibouti", "dbpedia_uri": "http://dbpedia.org/resource/Djibouti"}, "id": "DJI"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[12.690006, 55.609991000000001], [12.089990999999999, 54.800015000000002], [11.043543, 55.364863999999997], [10.903914, 55.779955000000001], [12.370903999999999, 56.111407], [12.690006, 55.609991000000001]]], [[[10.912182, 56.458621000000001], [10.667804, 56.081383000000002], [10.369992999999999, 56.190007000000001], [9.6499849999999991, 55.469999000000001], [9.9219059999999999, 54.983103999999997], [9.2820490000000007, 54.830865000000003], [8.5262290000000007, 54.962744000000001], [8.1203109999999992, 55.517722999999997], [8.0899769999999993, 56.540011999999997], [8.2565819999999999, 56.809969000000002], [8.5434380000000001, 57.110002999999999], [9.4244690000000002, 57.172066000000001], [9.7755589999999994, 57.447941], [10.580005999999999, 57.730016999999997], [10.546106, 57.215733], [10.25, 56.890016000000003], [10.369992999999999, 56.609982000000002], [10.912182, 56.458621000000001]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0414\u0430\u043d\u0438\u044f", "fr": "Danemark", "en": "Denmark", "nl": "Denemarken", "pt": "Dinamarca", "no": "Danmark", "de": "D\u00e4nemark", "it": "Danimarca", "sv": "Danmark", "pl": "Dania", "fi": "Tanska", "zh": "\u4e39\u9ea6", "ja": "\u30c7\u30f3\u30de\u30fc\u30af", "es": "Dinamarca"}, "label_fr": "Danemark", "name": "Denmark", "dbpedia_uri": "http://dbpedia.org/resource/Denmark"}, "id": "DNK"}, {"geometry": {"type": "Polygon", "coordinates": [[[-71.712361000000001, 19.714455999999998], [-71.587304000000003, 19.884910999999999], [-70.806706000000005, 19.880286000000002], [-70.214365000000001, 19.622885], [-69.950815000000006, 19.648], [-69.76925, 19.293267], [-69.222126000000003, 19.313213999999999], [-69.254345999999998, 19.015196], [-68.809411999999995, 18.979074000000001], [-68.317943, 18.612197999999999], [-68.689316000000005, 18.205141999999999], [-69.164946, 18.422647999999999], [-69.623987999999997, 18.380713], [-69.952933999999999, 18.428307], [-70.133233000000004, 18.245915], [-70.517137000000005, 18.184291000000002], [-70.669297999999998, 18.426886], [-70.999949999999998, 18.283328999999998], [-71.400210000000001, 17.598564], [-71.657662000000002, 17.757573000000001], [-71.708304999999996, 18.044996999999999], [-71.687737999999996, 18.316659999999999], [-71.945111999999995, 18.616900000000001], [-71.701302999999996, 18.785416999999999], [-71.624872999999994, 19.169837999999999], [-71.712361000000001, 19.714455999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0414\u043e\u043c\u0438\u043d\u0438\u043a\u0430\u043d\u0441\u043a\u0430\u044f \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430", "fr": "R\u00e9publique dominicaine", "en": "Dominican Republic", "nl": "Dominicaanse Republiek", "pt": "Rep\u00fablica Dominicana", "no": "Den dominikanske republikk", "de": "Dominikanische Republik", "it": "Repubblica Dominicana", "sv": "Dominikanska republiken", "pl": "Dominikana", "fi": "Dominikaaninen tasavalta", "zh": "\u591a\u660e\u5c3c\u52a0\u5171\u548c\u570b", "ja": "\u30c9\u30df\u30cb\u30ab\u5171\u548c\u56fd", "es": "Rep\u00fablica Dominicana"}, "label_fr": "R\u00e9publique dominicaine", "name": "Dominican Republic", "dbpedia_uri": "http://dbpedia.org/resource/Dominican_Republic"}, "id": "DOM"}, {"geometry": {"type": "Polygon", "coordinates": [[[11.999506, 23.471668000000001], [8.5728930000000005, 21.565660999999999], [5.6775659999999997, 19.601206999999999], [4.2674190000000003, 19.155265], [3.1581329999999999, 19.057364], [3.1466609999999999, 19.693579], [2.6835879999999999, 19.85623], [2.060991, 20.142233000000001], [1.8232280000000001, 20.610809], [-1.550055, 22.792666000000001], [-4.9233370000000001, 24.974574], [-8.6844000000000001, 27.395744000000001], [-8.6651240000000005, 27.589479000000001], [-8.6655899999999999, 27.656426], [-8.6741159999999997, 28.841289], [-7.0592280000000001, 29.579228000000001], [-6.060632, 29.7317], [-5.2421290000000003, 30.000443000000001], [-4.8596459999999997, 30.501187999999999], [-3.6904409999999999, 30.896951999999999], [-3.6474980000000001, 31.637294000000001], [-3.0689799999999998, 31.724498000000001], [-2.6166049999999998, 32.094346000000002], [-1.3078989999999999, 32.262889000000001], [-1.1245510000000001, 32.651522], [-1.3880490000000001, 32.864015000000002], [-1.733455, 33.919713000000002], [-1.792986, 34.527918999999997], [-2.1699139999999999, 35.168396000000001], [-1.2086030000000001, 35.714849000000001], [-0.12745400000000001, 35.888661999999997], [0.50387700000000002, 36.301273000000002], [1.4669190000000001, 36.605646999999998], [3.161699, 36.783904999999997], [4.8157579999999998, 36.865037000000001], [5.3201200000000002, 36.716518999999998], [6.2618200000000002, 37.110655000000001], [7.3303849999999997, 37.118380999999999], [7.7370780000000003, 36.885708000000001], [8.4209639999999997, 36.946427], [8.2178240000000002, 36.433177000000001], [8.3763679999999994, 35.479875999999997], [8.140981, 34.655146000000002], [7.5244819999999999, 34.097375999999997], [7.6126420000000001, 33.344115000000002], [8.4304729999999992, 32.748336999999999], [8.4391029999999994, 32.506284999999998], [9.0556029999999996, 32.102691999999998], [9.4821399999999993, 30.307556000000002], [9.8056339999999995, 29.424638000000002], [9.8599979999999992, 28.959990000000001], [9.6838850000000001, 28.144174], [9.7561280000000004, 27.688258999999999], [9.6290560000000003, 27.140953], [9.7162860000000002, 26.512205999999999], [9.3194110000000006, 26.094325000000001], [9.9106930000000002, 25.365455000000001], [9.9482610000000005, 24.936954], [10.303846999999999, 24.379313], [10.771364, 24.562532000000001], [11.560669000000001, 24.097909000000001], [11.999506, 23.471668000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0410\u043b\u0436\u0438\u0440", "fr": "Alg\u00e9rie", "en": "Algeria", "nl": "Algerije", "pt": "Arg\u00e9lia", "no": "Algerie", "de": "Algerien", "it": "Algeria", "sv": "Algeriet", "pl": "Algieria", "fi": "Algeria", "zh": "\u963f\u5c14\u53ca\u5229\u4e9a", "ja": "\u30a2\u30eb\u30b8\u30a7\u30ea\u30a2", "es": "Argelia"}, "label_fr": "Alg\u00e9rie", "name": "Algeria", "dbpedia_uri": "http://dbpedia.org/resource/Algeria"}, "id": "DZA"}, {"geometry": {"type": "Polygon", "coordinates": [[[-80.302560999999997, -3.4048560000000001], [-79.770292999999995, -2.6575120000000001], [-79.986559, -2.2207940000000002], [-80.368784000000005, -2.6851590000000001], [-80.967765, -2.2469429999999999], [-80.764805999999993, -1.9650479999999999], [-80.933659000000006, -1.057455], [-80.583370000000002, -0.906663], [-80.399325000000005, -0.28370299999999998], [-80.020898000000003, 0.36033999999999999], [-80.090609999999998, 0.76842900000000003], [-79.542761999999996, 0.98293799999999998], [-78.855259000000004, 1.380924], [-77.855061000000006, 0.80992500000000001], [-77.668612999999993, 0.82589299999999999], [-77.424983999999995, 0.39568700000000001], [-76.57638, 0.256936], [-76.292314000000005, 0.416047], [-75.801466000000005, 0.084801000000000001], [-75.373222999999996, -0.152032], [-75.233722999999998, -0.91141700000000003], [-75.544995999999998, -1.5616099999999999], [-76.635394000000005, -2.6086779999999998], [-77.837905000000006, -3.0030209999999999], [-78.450683999999995, -3.873097], [-78.639897000000005, -4.547784], [-79.205288999999993, -4.9591289999999999], [-79.624978999999996, -4.4541979999999999], [-80.028908000000001, -4.3460910000000004], [-80.442241999999993, -4.4257239999999998], [-80.469295000000002, -4.0592870000000003], [-80.184015000000002, -3.8211620000000002], [-80.302560999999997, -3.4048560000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042d\u043a\u0432\u0430\u0434\u043e\u0440", "fr": "\u00c9quateur (pays)", "en": "Ecuador", "nl": "Ecuador", "pt": "Equador", "no": "Ecuador", "de": "Ecuador", "it": "Ecuador", "sv": "Ecuador", "pl": "Ekwador", "fi": "Ecuador", "zh": "\u5384\u74dc\u591a\u5c14", "ja": "\u30a8\u30af\u30a2\u30c9\u30eb", "es": "Ecuador"}, "label_fr": "\u00c9quateur (pays)", "name": "Ecuador", "dbpedia_uri": "http://dbpedia.org/resource/Ecuador"}, "id": "ECU"}, {"geometry": {"type": "Polygon", "coordinates": [[[34.922600000000003, 29.501329999999999], [34.641739999999999, 29.099419999999999], [34.426549999999999, 28.343990000000002], [34.154510000000002, 27.8233], [33.92136, 27.648700000000002], [33.58811, 27.971360000000001], [33.136760000000002, 28.417649999999998], [32.423229999999997, 29.85108], [32.320459999999997, 29.760429999999999], [32.734819999999999, 28.70523], [33.348759999999999, 27.69989], [34.104550000000003, 26.14227], [34.473869999999998, 25.598559999999999], [34.795070000000003, 25.033750000000001], [35.692410000000002, 23.92671], [35.493720000000003, 23.752369999999999], [35.525979999999997, 23.102440000000001], [36.690689999999996, 22.20485], [36.866230000000002, 22], [32.899999999999999, 22], [29.02, 22], [25, 22], [25, 25.682500000000001], [25, 29.238655000000001], [24.70007, 30.04419], [24.957619999999999, 30.6616], [24.802869999999999, 31.089289999999998], [25.164819999999999, 31.56915], [26.495329999999999, 31.58568], [27.457619999999999, 31.321259999999999], [28.450479999999999, 31.025770000000001], [28.913530000000002, 30.870049999999999], [29.683420000000002, 31.186859999999999], [30.095030000000001, 31.473400000000002], [30.976929999999999, 31.555859999999999], [31.68796, 31.429600000000001], [31.96041, 30.933599999999998], [32.19247, 31.260339999999999], [32.993920000000003, 31.024069999999998], [33.773400000000002, 30.967459999999999], [34.265439999999998, 31.219360000000002], [34.922600000000003, 29.501329999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0415\u0433\u0438\u043f\u0435\u0442", "fr": "\u00c9gypte", "en": "Egypt", "nl": "Egypte (land)", "pt": "Egito", "no": "Egypt", "de": "\u00c4gypten", "it": "Egitto", "sv": "Egypten", "pl": "Egipt", "fi": "Egypti", "zh": "\u57c3\u53ca", "ja": "\u30a8\u30b8\u30d7\u30c8", "es": "Egipto"}, "label_fr": "\u00c9gypte", "name": "Egypt", "dbpedia_uri": "http://dbpedia.org/resource/Egypt"}, "id": "EGY"}, {"geometry": {"type": "Polygon", "coordinates": [[[42.351559999999999, 12.54223], [42.009749999999997, 12.865819999999999], [41.598559999999999, 13.45209], [41.155194000000002, 13.77332], [40.896599999999999, 14.118639999999999], [40.026218999999998, 14.519579], [39.340609999999998, 14.531549999999999], [39.099400000000003, 14.740640000000001], [38.512949999999996, 14.505470000000001], [37.90607, 14.959429999999999], [37.593769999999999, 14.213100000000001], [36.429510000000001, 14.42211], [36.323188999999999, 14.822481], [36.753860000000003, 16.291874], [36.852530000000002, 16.95655], [37.167470000000002, 17.26314], [37.904000000000003, 17.42754], [38.410089999999997, 17.998307], [38.990622999999999, 16.840626], [39.266109999999998, 15.922723], [39.814293999999997, 15.435646999999999], [41.179274999999997, 14.49108], [41.734952, 13.921037], [42.276831000000001, 13.343992], [42.589576000000001, 13.000420999999999], [43.081226000000001, 12.699638999999999], [42.779642000000003, 12.455416], [42.351559999999999, 12.54223]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042d\u0440\u0438\u0442\u0440\u0435\u044f", "fr": "\u00c9rythr\u00e9e", "en": "Eritrea", "nl": "Eritrea", "pt": "Eritreia", "no": "Eritrea", "de": "Eritrea", "it": "Eritrea", "sv": "Eritrea", "pl": "Erytrea", "fi": "Eritrea", "zh": "\u5384\u7acb\u7279\u91cc\u4e9a", "ja": "\u30a8\u30ea\u30c8\u30ea\u30a2", "es": "Eritrea"}, "label_fr": "\u00c9rythr\u00e9e", "name": "Eritrea", "dbpedia_uri": "http://dbpedia.org/resource/Eritrea"}, "id": "ERI"}, {"geometry": {"type": "Polygon", "coordinates": [[[-9.0348179999999996, 41.880571000000003], [-8.9844329999999992, 42.592775000000003], [-9.3928840000000005, 43.026625000000003], [-7.9781899999999997, 43.748337999999997], [-6.7544919999999999, 43.567909], [-5.411886, 43.574240000000003], [-4.3478430000000001, 43.403449000000002], [-3.5175320000000001, 43.455900999999997], [-1.901351, 43.422801999999997], [-1.5027710000000001, 43.034013999999999], [0.33804699999999999, 42.579546000000001], [0.70159099999999996, 42.795734000000003], [1.8267929999999999, 42.343384999999998], [2.9859990000000001, 42.473014999999997], [3.0394839999999999, 41.892119999999998], [2.0918420000000002, 41.226089000000002], [0.81052500000000005, 41.014732000000002], [0.72133100000000006, 40.678317999999997], [0.106692, 40.123933999999998], [-0.27871099999999999, 39.309978000000001], [0.111291, 38.738514000000002], [-0.46712399999999998, 38.292366000000001], [-0.68338900000000002, 37.642353999999997], [-1.438382, 37.443064], [-2.1464530000000002, 36.674143999999998], [-3.415781, 36.658900000000003], [-4.3689010000000001, 36.677838999999999], [-4.9952189999999996, 36.324708000000001], [-5.3771599999999999, 35.946849999999998], [-5.8664319999999996, 36.029817000000001], [-6.236694, 36.367677], [-6.5201909999999996, 36.942912999999997], [-7.4537259999999996, 37.097788000000001], [-7.5371050000000004, 37.428904000000003], [-7.1665080000000003, 37.803894], [-7.0292810000000001, 38.075763999999999], [-7.3740920000000001, 38.373058999999998], [-7.0980369999999997, 39.030073000000002], [-7.4986319999999997, 39.629570999999999], [-7.066592, 39.711891999999999], [-7.0264129999999998, 40.184524000000003], [-6.86402, 40.330871999999999], [-6.851127, 41.111083000000001], [-6.3890880000000001, 41.381815000000003], [-6.6686059999999996, 41.883386999999999], [-7.251309, 41.918346], [-7.4225130000000004, 41.792074999999997], [-8.0131750000000004, 41.790886], [-8.2638569999999998, 42.280468999999997], [-8.6719460000000002, 42.134689000000002], [-9.0348179999999996, 41.880571000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u0441\u043f\u0430\u043d\u0438\u044f", "fr": "Espagne", "en": "Spain", "nl": "Spanje", "pt": "Espanha", "no": "Spania", "de": "Spanien", "it": "Spagna", "sv": "Spanien", "pl": "Hiszpania", "fi": "Espanja", "zh": "\u897f\u73ed\u7259", "ja": "\u30b9\u30da\u30a4\u30f3", "es": "Espa\u00f1a"}, "label_fr": "Espagne", "name": "Spain", "dbpedia_uri": "http://dbpedia.org/resource/Spain"}, "id": "ESP"}, {"geometry": {"type": "Polygon", "coordinates": [[[24.312863, 57.793424000000002], [24.428927999999999, 58.383412999999997], [24.061198000000001, 58.257375000000003], [23.426559999999998, 58.612752999999998], [23.339794999999999, 59.187240000000003], [24.604213999999999, 59.465854], [25.864189, 59.611089999999997], [26.949135999999999, 59.445802999999998], [27.981114000000002, 59.475388000000002], [28.131699000000001, 59.300825000000003], [27.420165999999998, 58.724581000000001], [27.716685999999999, 57.791899000000001], [27.288184999999999, 57.474527999999999], [26.463532000000001, 57.476388999999998], [25.602810000000002, 57.847529000000002], [25.164594000000001, 57.970157], [24.312863, 57.793424000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042d\u0441\u0442\u043e\u043d\u0438\u044f", "fr": "Estonie", "en": "Estonia", "nl": "Estland", "pt": "Est\u00f3nia", "no": "Estland", "de": "Estland", "it": "Estonia", "sv": "Estland", "pl": "Estonia", "fi": "Viro", "zh": "\u7231\u6c99\u5c3c\u4e9a", "ja": "\u30a8\u30b9\u30c8\u30cb\u30a2", "es": "Estonia"}, "label_fr": "Estonie", "name": "Estonia", "dbpedia_uri": "http://dbpedia.org/resource/Estonia"}, "id": "EST"}, {"geometry": {"type": "Polygon", "coordinates": [[[37.90607, 14.959429999999999], [38.512949999999996, 14.505470000000001], [39.099400000000003, 14.740640000000001], [39.340609999999998, 14.531549999999999], [40.026249999999997, 14.519590000000001], [40.896599999999999, 14.118639999999999], [41.155200000000001, 13.77333], [41.598559999999999, 13.45209], [42.009749999999997, 12.865819999999999], [42.351559999999999, 12.54223], [42, 12.1], [41.661760000000001, 11.6312], [41.73959, 11.35511], [41.755569999999999, 11.05091], [42.314140000000002, 11.0342], [42.554929999999999, 11.10511], [42.776851999999998, 10.926879], [42.558759999999999, 10.57258], [42.92812, 10.021940000000001], [43.296990000000001, 9.5404800000000005], [43.678750000000001, 9.1835799999999992], [46.948340000000002, 7.99688], [47.78942, 8.0030000000000001], [44.9636, 5.00162], [43.660870000000003, 4.9575500000000003], [42.769669999999998, 4.2525899999999996], [42.128610000000002, 4.2341300000000004], [41.855083, 3.9189120000000002], [41.171799999999998, 3.9190900000000002], [40.768479999999997, 4.2570199999999998], [39.854939999999999, 3.8387899999999999], [39.559384000000001, 3.4220600000000001], [38.892510000000001, 3.50074], [38.671140000000001, 3.6160700000000001], [38.436970000000002, 3.5885099999999999], [38.120914999999997, 3.5986050000000001], [36.855092999999997, 4.447864], [36.159078999999998, 4.447864], [35.817447999999999, 4.7769659999999998], [35.817447999999999, 5.3382319999999996], [35.298006999999998, 5.5060000000000002], [34.70702, 6.59422], [34.250320000000002, 6.8260699999999996], [34.075099999999999, 7.2259500000000001], [33.568289999999998, 7.7133399999999996], [32.954180000000001, 7.7849700000000004], [33.294800000000002, 8.3545800000000003], [33.825499999999998, 8.3791600000000006], [33.974980000000002, 8.6845599999999994], [33.961620000000003, 9.5835799999999995], [34.257449999999999, 10.630089999999999], [34.73115, 10.910170000000001], [34.831629999999997, 11.318960000000001], [35.260489999999997, 12.08286], [35.863630000000001, 12.578279999999999], [36.270220000000002, 13.563330000000001], [36.429510000000001, 14.42211], [37.593769999999999, 14.213100000000001], [37.90607, 14.959429999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042d\u0444\u0438\u043e\u043f\u0438\u044f", "fr": "\u00c9thiopie", "en": "Ethiopia", "nl": "Ethiopi\u00eb", "pt": "Eti\u00f3pia", "no": "Etiopia", "de": "\u00c4thiopien", "it": "Etiopia", "sv": "Etiopien", "pl": "Etiopia", "fi": "Etiopia", "zh": "\u57c3\u585e\u4fc4\u6bd4\u4e9a", "ja": "\u30a8\u30c1\u30aa\u30d4\u30a2", "es": "Etiop\u00eda"}, "label_fr": "\u00c9thiopie", "name": "Ethiopia", "dbpedia_uri": "http://dbpedia.org/resource/Ethiopia"}, "id": "ETH"}, {"geometry": {"type": "Polygon", "coordinates": [[[28.591930000000001, 69.064777000000007], [28.445944000000001, 68.364613000000006], [29.977426000000001, 67.698296999999997], [29.054589, 66.944286000000005], [30.217649999999999, 65.805980000000005], [29.544429999999998, 64.948672000000002], [30.444685, 64.204453000000001], [30.035872000000001, 63.552813999999998], [31.516092, 62.867686999999997], [31.139990999999998, 62.357692999999998], [30.211106999999998, 61.780028000000001], [28.069997999999998, 60.503517000000002], [26.255172999999999, 60.423960999999998], [24.496624000000001, 60.057316], [22.869695, 59.846373], [22.290763999999999, 60.391921000000004], [21.322244000000001, 60.720170000000003], [21.544865999999999, 61.705328999999999], [21.059211000000001, 62.607393000000002], [21.536028999999999, 63.189734999999999], [22.442744000000001, 63.817810000000001], [24.730512000000001, 64.902343999999999], [25.398067999999999, 65.111427000000006], [25.294042999999999, 65.534345999999999], [23.903379000000001, 66.006927000000005], [23.56588, 66.396051], [23.539473000000001, 67.936008999999999], [21.978535000000001, 68.616845999999995], [20.645593000000002, 69.106246999999996], [21.244935999999999, 69.370442999999995], [22.356238000000001, 68.841740999999999], [23.662050000000001, 68.891247000000007], [24.735679000000001, 68.649557000000001], [25.689212999999999, 69.092113999999995], [26.179621999999998, 69.825299000000001], [27.732292000000001, 70.164192999999997], [29.015573, 69.766491000000002], [28.591930000000001, 69.064777000000007]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0424\u0438\u043d\u043b\u044f\u043d\u0434\u0438\u044f", "fr": "Finlande", "en": "Finland", "nl": "Finland", "pt": "Finl\u00e2ndia", "no": "Finland", "de": "Finnland", "it": "Finlandia", "sv": "Finland", "pl": "Finlandia", "fi": "Suomi", "zh": "\u82ac\u5170", "ja": "\u30d5\u30a3\u30f3\u30e9\u30f3\u30c9", "es": "Finlandia"}, "label_fr": "Finlande", "name": "Finland", "dbpedia_uri": "http://dbpedia.org/resource/Finland"}, "id": "FIN"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[178.37360000000001, -17.339919999999999], [178.71806000000001, -17.62846], [178.55270999999999, -18.150590000000001], [177.93266, -18.287990000000001], [177.38146, -18.16432], [177.28504000000001, -17.72465], [177.67087000000001, -17.381139999999998], [178.12557000000001, -17.504809999999999], [178.37360000000001, -17.339919999999999]]], [[[179.36414300000001, -16.801354], [178.72505899999999, -17.012042000000001], [178.59683899999999, -16.639150000000001], [179.096609, -16.433983999999999], [179.413509, -16.379054], [180, -16.067132999999998], [180, -16.555216999999999], [179.36414300000001, -16.801354]]], [[[-179.91736900000001, -16.501783], [-180, -16.555216999999999], [-180, -16.067132999999998], [-179.79331999999999, -16.020882], [-179.91736900000001, -16.501783]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0424\u0438\u0434\u0436\u0438", "fr": "Fidji", "en": "Fiji", "nl": "Fiji", "pt": "Fiji", "no": "Fiji", "de": "Fidschi", "it": "Figi", "sv": "Fiji", "pl": "Fid\u017ci", "fi": "Fid\u017ei", "zh": "\u6590\u6fdf", "ja": "\u30d5\u30a3\u30b8\u30fc", "es": "Fiyi"}, "label_fr": "Fidji", "name": "Fiji", "dbpedia_uri": "http://dbpedia.org/resource/Fiji"}, "id": "FJI"}, {"geometry": {"type": "Polygon", "coordinates": [[[-61.200000000000003, -51.850000000000001], [-60, -51.25], [-59.149999999999999, -51.5], [-58.549999999999997, -51.100000000000001], [-57.75, -51.549999999999997], [-58.049999999999997, -51.899999999999999], [-59.399999999999999, -52.200000000000003], [-59.850000000000001, -51.850000000000001], [-60.700000000000003, -52.299999999999997], [-61.200000000000003, -51.850000000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0424\u043e\u043b\u043a\u043b\u0435\u043d\u0434\u0441\u043a\u0438\u0435 \u043e\u0441\u0442\u0440\u043e\u0432\u0430", "fr": "\u00celes Malouines", "en": "Falkland Islands", "nl": "Falklandeilanden", "pt": "Ilhas Malvinas", "no": "Falklands\u00f8yene", "de": "Falklandinseln", "it": "Isole Falkland", "sv": "Falklands\u00f6arna", "pl": "Falklandy", "fi": "Falklandinsaaret", "zh": "\u798f\u514b\u5170\u7fa4\u5c9b", "ja": "\u30d5\u30a9\u30fc\u30af\u30e9\u30f3\u30c9\u8af8\u5cf6", "es": "Islas Malvinas (Territorio Brit\u00e1nico de Ultramar)"}, "label_fr": "\u00celes Malouines", "name": "Falkland Islands", "dbpedia_uri": "http://dbpedia.org/resource/Falkland_Islands"}, "id": "FLK"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-52.556424999999997, 2.504705], [-52.939656999999997, 2.1248580000000001], [-53.418464999999998, 2.0533890000000001], [-53.554839000000001, 2.3348969999999998], [-53.778520999999998, 2.376703], [-54.088062999999998, 2.1055570000000001], [-54.524754000000001, 2.311849], [-54.271230000000003, 2.7387480000000002], [-54.184283999999998, 3.194172], [-54.011504000000002, 3.6225700000000001], [-54.399541999999997, 4.2126109999999999], [-54.478633000000002, 4.8967559999999999], [-53.958044999999998, 5.7565480000000004], [-53.618453000000002, 5.6465290000000001], [-52.882140999999997, 5.4098509999999997], [-51.823343000000001, 4.5657680000000003], [-51.657797000000002, 4.1562320000000001], [-52.249338000000002, 3.2410939999999999], [-52.556424999999997, 2.504705]]], [[[9.5600159999999992, 42.152492000000002], [9.2297519999999995, 41.380006999999999], [8.7757229999999993, 41.583612000000002], [8.5442129999999992, 42.256517000000002], [8.7460090000000008, 42.628121999999998], [9.3900009999999998, 43.009985], [9.5600159999999992, 42.152492000000002]]], [[[3.588184, 50.378991999999997], [4.2860230000000001, 49.907496999999999], [4.7992220000000003, 49.985373000000003], [5.6740519999999997, 49.529483999999997], [5.8977589999999998, 49.442667], [6.1863200000000003, 49.463802999999999], [6.6582299999999996, 49.201957999999998], [8.0992789999999992, 49.017783999999999], [7.5936760000000003, 48.333019], [7.4667589999999997, 47.620581999999999], [7.192202, 47.449765999999997], [6.7365709999999996, 47.541801], [6.7687140000000001, 47.287708000000002], [6.0373890000000001, 46.725779000000003], [6.0226090000000001, 46.27299], [6.5000999999999998, 46.429673000000001], [6.8435930000000003, 45.991146999999998], [6.8023550000000004, 45.708579999999998], [7.0966519999999997, 45.333098999999997], [6.7499549999999999, 45.028517999999998], [7.0075620000000001, 44.254767000000001], [7.5495960000000002, 44.127901000000001], [7.4351849999999997, 43.693845000000003], [6.5292450000000004, 43.128892], [4.5569629999999997, 43.399650999999999], [3.1004109999999998, 43.075201], [2.9859990000000001, 42.473014999999997], [1.8267929999999999, 42.343384999999998], [0.70159099999999996, 42.795734000000003], [0.33804699999999999, 42.579546000000001], [-1.5027710000000001, 43.034013999999999], [-1.901351, 43.422801999999997], [-1.384225, 44.02261], [-1.1937979999999999, 46.014918000000002], [-2.225724, 47.064363], [-2.963276, 47.570326999999999], [-4.491555, 47.954954000000001], [-4.5923499999999997, 48.684159999999999], [-3.295814, 48.901691999999997], [-1.616511, 48.644421000000001], [-1.933494, 49.776342], [-0.98946900000000004, 49.347375999999997], [1.3387610000000001, 50.127172999999999], [1.6390009999999999, 50.946606000000003], [2.5135730000000001, 51.148505999999998], [2.6584219999999998, 50.796847999999997], [3.1232519999999999, 50.780363000000001], [3.588184, 50.378991999999997]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0424\u0440\u0430\u043d\u0446\u0438\u044f", "fr": "France", "en": "France", "nl": "Frankrijk", "pt": "Fran\u00e7a", "no": "Frankrike", "de": "Frankreich", "it": "Francia", "sv": "Frankrike", "pl": "Francja", "fi": "Ranska", "zh": "\u6cd5\u56fd", "ja": "\u30d5\u30e9\u30f3\u30b9", "es": "Francia"}, "label_fr": "France", "name": "France", "dbpedia_uri": "http://dbpedia.org/resource/France"}, "id": "FRA"}, {"geometry": {"type": "Polygon", "coordinates": [[[11.093773000000001, -3.9788269999999999], [10.066134999999999, -2.9694829999999999], [9.4052450000000007, -2.1443129999999999], [8.7979959999999995, -1.1113010000000001], [8.8300870000000007, -0.77907400000000004], [9.0484200000000001, -0.45935100000000001], [9.2913510000000006, 0.26866600000000002], [9.4928889999999999, 1.0101199999999999], [9.8302840000000007, 1.0678939999999999], [11.285079, 1.0576620000000001], [11.276449, 2.2610510000000001], [11.751664999999999, 2.3267579999999999], [12.35938, 2.192812], [12.951333999999999, 2.3216160000000001], [13.075822000000001, 2.2670970000000001], [13.003114, 1.8308960000000001], [13.282631, 1.314184], [14.026669, 1.3956770000000001], [14.276266, 1.19693], [13.843321, 0.038758000000000001], [14.316418000000001, -0.55262699999999998], [14.425456000000001, -1.333407], [14.29921, -1.9982759999999999], [13.992407, -2.4708049999999999], [13.109619, -2.4287399999999999], [12.575284, -1.9485110000000001], [12.495703000000001, -2.3916879999999998], [11.820964, -2.5141610000000001], [11.478039000000001, -2.765619], [11.855122, -3.4268709999999998], [11.093773000000001, -3.9788269999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0430\u0431\u043e\u043d", "fr": "Gabon", "en": "Gabon", "nl": "Gabon", "pt": "Gab\u00e3o", "no": "Gabon", "de": "Gabun", "it": "Gabon", "sv": "Gabon", "pl": "Gabon", "fi": "Gabon", "zh": "\u52a0\u84ec", "ja": "\u30ac\u30dc\u30f3", "es": "Gab\u00f3n"}, "label_fr": "Gabon", "name": "Gabon", "dbpedia_uri": "http://dbpedia.org/resource/Gabon"}, "id": "GAB"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-5.6619489999999999, 54.554603], [-6.1978850000000003, 53.867564999999999], [-6.9537300000000002, 54.073701999999997], [-7.5721679999999996, 54.059956], [-7.3660310000000004, 54.595841], [-7.5721679999999996, 55.131622], [-6.7338469999999999, 55.17286], [-5.6619489999999999, 54.554603]]], [[[-3.0050050000000001, 58.634999999999998], [-4.0738279999999998, 57.553024999999998], [-3.055002, 57.690018999999999], [-1.9592810000000001, 57.684800000000003], [-2.2199879999999999, 56.870016999999997], [-3.1190030000000002, 55.973793000000001], [-2.0850089999999999, 55.909998000000002], [-2.0056759999999998, 55.804903000000003], [-1.1149910000000001, 54.624986], [-0.43048500000000001, 54.464376000000001], [0.18498100000000001, 53.325014000000003], [0.46997699999999998, 52.929999000000002], [1.6815310000000001, 52.739519999999999], [1.5599879999999999, 52.099997999999999], [1.050562, 51.806761000000002], [1.449865, 51.289428000000001], [0.55033399999999999, 50.765739000000004], [-0.78751700000000002, 50.774988999999998], [-2.4899979999999999, 50.500019000000002], [-2.9562740000000001, 50.69688], [-3.617448, 50.228355999999998], [-4.5425079999999998, 50.341836999999998], [-5.2450229999999998, 49.960000000000001], [-5.776567, 50.159678], [-4.30999, 51.210000999999998], [-3.4148510000000001, 51.426009000000001], [-3.4227189999999998, 51.426848], [-4.9843669999999998, 51.593465999999999], [-5.267296, 51.991399999999999], [-4.2223470000000001, 52.301355999999998], [-4.7700129999999996, 52.840004999999998], [-4.5799989999999999, 53.495004000000002], [-3.0938310000000002, 53.404547000000001], [-3.0920800000000002, 53.404440999999998], [-2.9450090000000002, 53.984999999999999], [-3.6147010000000002, 54.600937000000002], [-3.6300050000000001, 54.615012999999998], [-4.8441689999999999, 54.790970999999999], [-5.0825269999999998, 55.061601000000003], [-4.719112, 55.508473000000002], [-5.0479810000000001, 55.783985999999999], [-5.586398, 55.311146000000001], [-5.6449990000000003, 56.275015000000003], [-6.1499810000000004, 56.78501], [-5.7868250000000003, 57.818848000000003], [-5.0099989999999996, 58.630012999999998], [-4.2114950000000002, 58.550845000000002], [-3.0050050000000001, 58.634999999999998]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0412\u0435\u043b\u0438\u043a\u043e\u0431\u0440\u0438\u0442\u0430\u043d\u0438\u044f", "fr": "Royaume-Uni", "en": "United Kingdom", "nl": "Verenigd Koninkrijk", "pt": "Reino Unido", "no": "Storbritannia", "de": "Vereinigtes K\u00f6nigreich", "it": "Regno Unito", "sv": "Storbritannien", "pl": "Wielka Brytania", "fi": "Yhdistynyt kuningaskunta", "zh": "\u82f1\u56fd", "ja": "\u30a4\u30ae\u30ea\u30b9", "es": "Reino Unido"}, "label_fr": "Royaume-Uni", "name": "United Kingdom", "dbpedia_uri": "http://dbpedia.org/resource/United_Kingdom"}, "id": "GBR"}, {"geometry": {"type": "Polygon", "coordinates": [[[41.554084000000003, 41.535656000000003], [41.703170999999998, 41.962943000000003], [41.453470000000003, 42.645122999999998], [40.875469000000002, 43.013627999999997], [40.321393999999998, 43.128633999999998], [39.955008999999997, 43.434998], [40.076965000000001, 43.553103999999998], [40.922184999999999, 43.382159000000001], [42.394395000000003, 43.220308000000003], [43.756017, 42.740828], [43.931199999999997, 42.554974000000001], [44.537623000000004, 42.711993], [45.470278999999998, 42.502780999999999], [45.776409999999998, 42.092444], [46.404950999999997, 41.860675000000001], [46.145432, 41.722802000000001], [46.637908000000003, 41.181673000000004], [46.501637000000002, 41.064444999999999], [45.962600999999999, 41.123873000000003], [45.217426000000003, 41.411451999999997], [44.972479999999997, 41.248128999999999], [43.582746, 41.092143], [42.619548999999999, 41.583173000000002], [41.554084000000003, 41.535656000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0414\u0436\u043e\u0440\u0434\u0436\u0438\u044f (\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f)", "fr": "G\u00e9orgie", "en": "Georgia", "nl": "Georgia", "pt": "Ge\u00f3rgia (desambigua\u00e7\u00e3o)", "no": "Georgia (andre betydninger)", "de": "Georgia (Begriffskl\u00e4rung)", "it": "Georgia (disambigua)", "sv": "Georgia (olika betydelser)", "pl": "Georgia (ujednoznacznienie)", "fi": "Georgia (t\u00e4smennyssivu)", "zh": "\u55ac\u6cbb\u4e9e (\u6d88\u6b67\u7fa9)", "ja": "\u30b8\u30e7\u30fc\u30b8\u30a2", "es": "Georgia (desambiguaci\u00f3n)"}, "label_fr": "G\u00e9orgie", "name": "Georgia", "dbpedia_uri": "http://dbpedia.org/resource/Georgia"}, "id": "GEO"}, {"geometry": {"type": "Polygon", "coordinates": [[[1.060122, 5.9288369999999997], [-0.50763800000000003, 5.3434730000000004], [-1.063625, 5.0005480000000002], [-1.964707, 4.7104619999999997], [-2.856125, 4.9944759999999997], [-2.8107009999999999, 5.3890510000000003], [-3.24437, 6.2504720000000002], [-2.9835850000000002, 7.3797050000000004], [-2.5621900000000002, 8.2196280000000002], [-2.827496, 9.6424610000000008], [-2.9638960000000001, 10.395334999999999], [-2.9404089999999998, 10.96269], [-1.2033579999999999, 11.009819], [-0.76157600000000003, 10.93693], [-0.43870199999999998, 11.098341], [0.023803000000000001, 11.018682], [-0.049785000000000003, 10.706918], [0.36758000000000002, 10.191212999999999], [0.36590099999999998, 9.4650040000000004], [0.46119199999999999, 8.6772229999999997], [0.71202900000000002, 8.3124649999999995], [0.49095699999999998, 7.4117439999999997], [0.570384, 6.9143590000000001], [0.83693099999999998, 6.279979], [1.060122, 5.9288369999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0430 (\u043d\u0430\u0440\u043e\u0434)", "fr": "Ghana", "en": "Ghana", "nl": "Ghana", "pt": "Gana", "no": "Ghana", "de": "Ghana", "it": "Ghana", "sv": "Ghana", "pl": "Ghana", "fi": "Ghana", "ja": "\u30ac\u30fc\u30ca", "es": "Ghana"}, "label_fr": "Ghana", "name": "Ghana", "dbpedia_uri": "http://dbpedia.org/resource/Ghana"}, "id": "GHA"}, {"geometry": {"type": "Polygon", "coordinates": [[[-8.4392980000000009, 7.6860429999999997], [-8.7221240000000009, 7.7116740000000004], [-8.9260649999999995, 7.309037], [-9.2087859999999999, 7.3139209999999997], [-9.4033479999999994, 7.5269050000000002], [-9.3372799999999998, 7.928534], [-9.7553420000000006, 8.5410550000000001], [-10.016567, 8.4285040000000002], [-10.230093999999999, 8.4062059999999992], [-10.505477000000001, 8.3488959999999999], [-10.494315, 8.715541], [-10.654769999999999, 8.9771780000000003], [-10.622394999999999, 9.2679100000000005], [-10.839152, 9.6882459999999995], [-11.117481, 10.045873], [-11.917277, 10.046984], [-12.150338, 9.8585720000000006], [-12.425929, 9.8358340000000002], [-12.596719, 9.6201880000000006], [-12.711957999999999, 9.3427120000000006], [-13.246549999999999, 8.9030489999999993], [-13.685154000000001, 9.4947440000000007], [-14.074045, 9.8861670000000004], [-14.330076, 10.01572], [-14.579699, 10.214467000000001], [-14.693232, 10.656300999999999], [-14.839554, 10.876571999999999], [-15.130311000000001, 11.040412], [-14.685687, 11.527824000000001], [-14.382192, 11.509271999999999], [-14.121406, 11.677117000000001], [-13.9008, 11.678718999999999], [-13.743161000000001, 11.811268999999999], [-13.828272, 12.142644000000001], [-13.718743999999999, 12.247185999999999], [-13.700476, 12.586183], [-13.217817999999999, 12.575874000000001], [-12.499051, 12.332090000000001], [-12.278599, 12.35444], [-12.203564999999999, 12.465648], [-11.658301, 12.386583], [-11.513942999999999, 12.442988], [-11.456168999999999, 12.076834], [-11.297573999999999, 12.077971], [-11.036555999999999, 12.211245], [-10.87083, 12.177887], [-10.593223999999999, 11.923975], [-10.165214000000001, 11.844084000000001], [-9.8909929999999999, 12.060479000000001], [-9.5679119999999998, 12.194243], [-9.3276160000000008, 12.334286000000001], [-9.1274739999999994, 12.308059999999999], [-8.905265, 12.088357999999999], [-8.7860990000000001, 11.812561000000001], [-8.3763050000000003, 11.393646], [-8.5813050000000004, 11.136246], [-8.6203210000000006, 10.810891], [-8.407311, 10.909257], [-8.2823569999999993, 10.792597000000001], [-8.3353769999999994, 10.494812], [-8.0299440000000004, 10.206535000000001], [-8.2293369999999992, 10.129020000000001], [-8.3096160000000001, 9.7895319999999995], [-8.0791140000000006, 9.3762240000000006], [-7.8320999999999996, 8.575704], [-8.2034990000000008, 8.4554530000000003], [-8.2990490000000001, 8.3164440000000006], [-8.2217920000000007, 8.123329], [-8.2807030000000008, 7.6871799999999997], [-8.4392980000000009, 7.6860429999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0432\u0438\u043d\u0435\u044f", "fr": "Guin\u00e9e", "en": "Guinea", "nl": "Guinee", "pt": "Guin\u00e9", "no": "Guinea", "de": "Guinea", "it": "Guinea", "sv": "Guinea", "pl": "Gwinea", "fi": "Guinea", "zh": "\u51e0\u5185\u4e9a", "ja": "\u30ae\u30cb\u30a2", "es": "Guinea"}, "label_fr": "Guin\u00e9e", "name": "Guinea", "dbpedia_uri": "http://dbpedia.org/resource/Guinea"}, "id": "GIN"}, {"geometry": {"type": "Polygon", "coordinates": [[[-16.841525000000001, 13.151394], [-16.713729000000001, 13.594958999999999], [-15.624596, 13.623587000000001], [-15.398770000000001, 13.860369], [-15.081735, 13.876492000000001], [-14.687030999999999, 13.630357], [-14.376714, 13.625679999999999], [-14.046991999999999, 13.794067999999999], [-13.844963, 13.505042], [-14.277702, 13.280585], [-14.712197, 13.298207], [-15.141163000000001, 13.509512000000001], [-15.511813, 13.27857], [-15.691001, 13.270353], [-15.931296, 13.130284], [-16.841525000000001, 13.151394]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0430\u043c\u0431\u0438\u044f", "fr": "Gambie", "en": "The Gambia", "nl": "Gambia (land)", "pt": "G\u00e2mbia", "no": "Gambia", "de": "Gambia", "it": "Gambia", "sv": "Gambia", "pl": "Gambia", "fi": "Gambia", "zh": "\u5188\u6bd4\u4e9a", "ja": "\u30ac\u30f3\u30d3\u30a2", "es": "Gambia"}, "label_fr": "Gambie", "name": "Gambia", "dbpedia_uri": "http://dbpedia.org/resource/The_Gambia"}, "id": "GMB"}, {"geometry": {"type": "Polygon", "coordinates": [[[-15.130311000000001, 11.040412], [-15.66418, 11.458474000000001], [-16.085214000000001, 11.524594], [-16.314786999999999, 11.806514999999999], [-16.308947, 11.958702000000001], [-16.613838000000001, 12.170911], [-16.677451999999999, 12.384852], [-16.147717, 12.547762000000001], [-15.816573999999999, 12.515567000000001], [-15.548477, 12.628170000000001], [-13.700476, 12.586183], [-13.718743999999999, 12.247185999999999], [-13.828272, 12.142644000000001], [-13.743161000000001, 11.811268999999999], [-13.9008, 11.678718999999999], [-14.121406, 11.677117000000001], [-14.382192, 11.509271999999999], [-14.685687, 11.527824000000001], [-15.130311000000001, 11.040412]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0432\u0438\u043d\u0435\u044f-\u0411\u0438\u0441\u0430\u0443", "fr": "Guin\u00e9e-Bissau", "en": "Guinea-Bissau", "nl": "Guinee-Bissau", "pt": "Guin\u00e9-Bissau", "no": "Guinea-Bissau", "de": "Guinea-Bissau", "it": "Guinea-Bissau", "sv": "Guinea-Bissau", "pl": "Gwinea Bissau", "fi": "Guinea-Bissau", "zh": "\u5e7e\u5167\u4e9e\u6bd4\u7d22", "ja": "\u30ae\u30cb\u30a2\u30d3\u30b5\u30a6", "es": "Guinea-Bissau"}, "label_fr": "Guin\u00e9e-Bissau", "name": "Guinea Bissau", "dbpedia_uri": "http://dbpedia.org/resource/Guinea-Bissau"}, "id": "GNB"}, {"geometry": {"type": "Polygon", "coordinates": [[[9.4928889999999999, 1.0101199999999999], [9.3056129999999992, 1.160911], [9.6491579999999999, 2.2838660000000002], [11.276449, 2.2610510000000001], [11.285079, 1.0576620000000001], [9.8302840000000007, 1.0678939999999999], [9.4928889999999999, 1.0101199999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042d\u043a\u0432\u0430\u0442\u043e\u0440\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0413\u0432\u0438\u043d\u0435\u044f", "fr": "Guin\u00e9e \u00e9quatoriale", "en": "Equatorial Guinea", "nl": "Equatoriaal-Guinea", "pt": "Guin\u00e9 Equatorial", "no": "Ekvatorial-Guinea", "de": "\u00c4quatorialguinea", "it": "Guinea Equatoriale", "sv": "Ekvatorialguinea", "pl": "Gwinea R\u00f3wnikowa", "fi": "P\u00e4iv\u00e4ntasaajan Guinea", "zh": "\u8d64\u9053\u51e0\u5185\u4e9a", "ja": "\u8d64\u9053\u30ae\u30cb\u30a2", "es": "Guinea Ecuatorial"}, "label_fr": "Guin\u00e9e \u00e9quatoriale", "name": "Equatorial Guinea", "dbpedia_uri": "http://dbpedia.org/resource/Equatorial_Guinea"}, "id": "GNQ"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[23.69998, 35.705004000000002], [24.246665, 35.368022000000003], [25.025015, 35.424996], [25.769207999999999, 35.354018000000003], [25.745023, 35.179997999999998], [26.290002999999999, 35.299990000000001], [26.164998000000001, 35.004995000000001], [24.724982000000001, 34.919987999999996], [24.735007, 35.084991000000002], [23.514977999999999, 35.279992], [23.69998, 35.705004000000002]]], [[[26.604196000000002, 41.562114999999999], [26.294602000000001, 40.936261000000002], [26.056941999999999, 40.824123], [25.447676999999999, 40.852544999999999], [24.925847999999998, 40.947062000000003], [23.714811000000001, 40.687128999999999], [24.407999, 40.124993000000003], [23.899968000000001, 39.962006000000002], [23.342998999999999, 39.960997999999996], [22.813987999999998, 40.476005000000001], [22.626298999999999, 40.256560999999998], [22.849748000000002, 39.659311000000002], [23.350027000000001, 39.190010999999998], [22.973099000000001, 38.970903], [23.530016, 38.510001000000003], [24.025024999999999, 38.219993000000002], [24.040011, 37.655014999999999], [23.115003000000002, 37.920011000000002], [23.409972, 37.409990999999998], [22.774972000000002, 37.305010000000003], [23.154225, 36.422505999999998], [22.490027999999999, 36.409999999999997], [21.670026, 36.844985999999999], [21.295010999999999, 37.644989000000002], [21.120034, 38.310322999999997], [20.730032000000001, 38.769984999999998], [20.217711999999999, 39.340235], [20.150016000000001, 39.624997999999998], [20.614999999999998, 40.110007000000003], [20.674997000000001, 40.435000000000002], [20.99999, 40.580004000000002], [21.020040000000002, 40.842726999999996], [21.674161000000002, 40.931274999999999], [22.055378000000001, 41.149866000000003], [22.597308000000002, 41.130487000000002], [22.761769999999999, 41.3048], [22.952376999999998, 41.337994000000002], [23.692074000000002, 41.309080999999999], [24.492645, 41.583896000000003], [25.197201, 41.234485999999997], [26.106138000000001, 41.328899], [26.117042000000001, 41.826904999999996], [26.604196000000002, 41.562114999999999]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0440\u0435\u0446\u0438\u044f", "fr": "Gr\u00e8ce", "en": "Greece", "nl": "Griekenland", "pt": "Gr\u00e9cia", "no": "Hellas", "de": "Griechenland", "it": "Grecia", "sv": "Grekland", "pl": "Grecja", "fi": "Kreikka", "zh": "\u5e0c\u814a", "ja": "\u30ae\u30ea\u30b7\u30e3", "es": "Grecia"}, "label_fr": "Gr\u00e8ce", "name": "Greece", "dbpedia_uri": "http://dbpedia.org/resource/Greece"}, "id": "GRC"}, {"geometry": {"type": "Polygon", "coordinates": [[[-46.76379, 82.627960000000002], [-43.406440000000003, 83.225160000000002], [-39.897530000000003, 83.180179999999993], [-38.622140000000002, 83.549049999999994], [-35.087870000000002, 83.645129999999995], [-27.100460000000002, 83.519660000000002], [-20.845389999999998, 82.726690000000005], [-22.69182, 82.341650000000001], [-26.517530000000001, 82.297650000000004], [-31.899999999999999, 82.200000000000003], [-31.396460000000001, 82.021540000000002], [-27.856660000000002, 82.131780000000006], [-24.844480000000001, 81.786969999999997], [-22.903279999999999, 82.093170000000001], [-22.071750000000002, 81.734489999999994], [-23.169609999999999, 81.152709999999999], [-20.623629999999999, 81.524619999999999], [-15.768179999999999, 81.912450000000007], [-12.77018, 81.718850000000003], [-12.208550000000001, 81.291539999999998], [-16.285329999999998, 80.580039999999997], [-16.850000000000001, 80.349999999999994], [-20.046240000000001, 80.177080000000004], [-17.730350000000001, 80.12912], [-18.899999999999999, 79.400000000000006], [-19.704989999999999, 78.751279999999994], [-19.67353, 77.638589999999994], [-18.472850000000001, 76.985650000000007], [-20.035029999999999, 76.944339999999997], [-21.67944, 76.627949999999998], [-19.834070000000001, 76.098079999999996], [-19.598960000000002, 75.248379999999997], [-20.66818, 75.155850000000001], [-19.372810000000001, 74.295609999999996], [-21.59422, 74.223820000000003], [-20.434539999999998, 73.817130000000006], [-20.762339999999998, 73.464359999999999], [-22.17221, 73.309550000000002], [-23.565930000000002, 73.306629999999998], [-22.313110000000002, 72.629279999999994], [-22.29954, 72.184089999999998], [-24.27834, 72.597880000000004], [-24.792960000000001, 72.330200000000005], [-23.442959999999999, 72.080160000000006], [-22.132809999999999, 71.468980000000002], [-21.75356, 70.663690000000003], [-23.53603, 70.471000000000004], [-24.307020000000001, 70.856489999999994], [-25.543410000000002, 71.430940000000007], [-25.201350000000001, 70.752260000000007], [-26.362760000000002, 70.226460000000003], [-23.727419999999999, 70.184010000000001], [-22.349019999999999, 70.129459999999995], [-25.02927, 69.258799999999994], [-27.74737, 68.470460000000003], [-30.67371, 68.125029999999995], [-31.77665, 68.120779999999996], [-32.811050000000002, 67.735470000000007], [-34.20196, 66.679739999999995], [-36.35284, 65.978899999999996], [-37.043779999999998, 65.93768], [-38.375050000000002, 65.692130000000006], [-39.812220000000003, 65.458479999999994], [-40.668990000000001, 64.839969999999994], [-40.682810000000003, 64.139020000000002], [-41.188699999999997, 63.482460000000003], [-42.819380000000002, 62.68233], [-42.41666, 61.900930000000002], [-42.866190000000003, 61.074039999999997], [-43.378399999999999, 60.097720000000002], [-44.787500000000001, 60.036760000000001], [-46.263640000000002, 60.853279999999998], [-48.26294, 60.858429999999998], [-49.233080000000001, 61.40681], [-49.900390000000002, 62.383360000000003], [-51.633249999999997, 63.626910000000002], [-52.140140000000002, 64.278419999999997], [-52.276589999999999, 65.176699999999997], [-53.661659999999998, 66.09957], [-53.301609999999997, 66.836500000000001], [-53.969110000000001, 67.188990000000004], [-52.980400000000003, 68.357590000000002], [-51.475360000000002, 68.729579999999999], [-51.080410000000001, 69.147810000000007], [-50.871220000000001, 69.929100000000005], [-52.013584999999999, 69.574924999999993], [-52.557920000000003, 69.426159999999996], [-53.456290000000003, 69.283625000000001], [-54.68336, 69.610029999999995], [-54.750010000000003, 70.289320000000004], [-54.358840000000001, 70.821314999999998], [-53.431314999999998, 70.835755000000006], [-51.390140000000002, 70.569779999999994], [-53.109369999999998, 71.204849999999993], [-54.004219999999997, 71.547190000000001], [-55, 71.406537], [-55.834679999999999, 71.654439999999994], [-54.71819, 72.586250000000007], [-55.326340000000002, 72.958609999999993], [-56.12003, 73.649770000000004], [-57.323630000000001, 74.710260000000005], [-58.596789999999999, 75.098609999999994], [-58.585160000000002, 75.517269999999996], [-61.268610000000002, 76.102379999999997], [-63.391649999999998, 76.175200000000004], [-66.064269999999993, 76.134860000000003], [-68.504379999999998, 76.061409999999995], [-69.664850000000001, 76.379750000000001], [-71.402569999999997, 77.008570000000006], [-68.776709999999994, 77.323120000000003], [-66.76397, 77.375950000000003], [-71.042929999999998, 77.635949999999994], [-73.296999999999997, 78.04419], [-73.159379999999999, 78.43271], [-69.373450000000005, 78.913880000000006], [-65.710700000000003, 79.394360000000006], [-65.323899999999995, 79.758139999999997], [-68.022980000000004, 80.11721], [-67.151290000000003, 80.515820000000005], [-63.689250000000001, 81.21396], [-62.234439999999999, 81.321100000000001], [-62.651159999999997, 81.770420000000001], [-60.282490000000003, 82.033630000000002], [-57.207439999999998, 82.190740000000005], [-54.134419999999999, 82.199619999999996], [-53.043280000000003, 81.888329999999996], [-50.390610000000002, 82.438829999999996], [-48.003860000000003, 82.064809999999994], [-46.59984, 81.985945000000001], [-44.523000000000003, 81.660700000000006], [-46.900700000000001, 82.199789999999993], [-46.76379, 82.627960000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0440\u0435\u043d\u043b\u0430\u043d\u0434\u0438\u044f", "fr": "Groenland", "en": "Greenland", "nl": "Groenland", "pt": "Gronel\u00e2ndia", "no": "Gr\u00f8nland", "de": "Gr\u00f6nland", "it": "Groenlandia", "sv": "Gr\u00f6nland", "pl": "Grenlandia", "fi": "Gr\u00f6nlanti", "zh": "\u683c\u9675\u5170", "ja": "\u30b0\u30ea\u30fc\u30f3\u30e9\u30f3\u30c9", "es": "Groenlandia"}, "label_fr": "Groenland", "name": "Greenland", "dbpedia_uri": "http://dbpedia.org/resource/Greenland"}, "id": "GRL"}, {"geometry": {"type": "Polygon", "coordinates": [[[-90.095555000000004, 13.735338], [-90.608624000000006, 13.909770999999999], [-91.232410000000002, 13.927832], [-91.689746999999997, 14.126218], [-92.22775, 14.538829], [-92.203230000000005, 14.830102999999999], [-92.087215999999998, 15.064584999999999], [-92.229248999999996, 15.251447000000001], [-91.747960000000006, 16.066565000000001], [-90.464472999999998, 16.069562000000001], [-90.438867000000002, 16.41011], [-90.600847000000002, 16.470777999999999], [-90.711821999999998, 16.687483], [-91.081670000000003, 16.918476999999999], [-91.453920999999994, 17.252177], [-91.002268999999998, 17.254657999999999], [-91.001519999999999, 17.817595000000001], [-90.067933999999994, 17.819326], [-89.143079999999998, 17.808319000000001], [-89.150806000000003, 17.015577], [-89.229122000000004, 15.886938000000001], [-88.930612999999994, 15.887273], [-88.604585999999998, 15.706379999999999], [-88.518364000000005, 15.855389000000001], [-88.225022999999993, 15.727722], [-88.680679999999995, 15.346247], [-89.154810999999995, 15.066419], [-89.225219999999993, 14.874286], [-89.145534999999995, 14.678019000000001], [-89.353325999999996, 14.424132999999999], [-89.587343000000004, 14.362586], [-89.534218999999993, 14.244816], [-89.721934000000005, 14.134228], [-90.064678000000001, 13.881970000000001], [-90.095555000000004, 13.735338]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0432\u0430\u0442\u0435\u043c\u0430\u043b\u0430", "fr": "Guatemala", "en": "Guatemala", "nl": "Guatemala", "pt": "Guatemala", "no": "Guatemala", "de": "Guatemala", "it": "Guatemala", "sv": "Guatemala", "pl": "Gwatemala", "fi": "Guatemala", "zh": "\u5371\u5730\u9a6c\u62c9", "ja": "\u30b0\u30a2\u30c6\u30de\u30e9", "es": "Guatemala"}, "label_fr": "Guatemala", "name": "Guatemala", "dbpedia_uri": "http://dbpedia.org/resource/Guatemala"}, "id": "GTM"}, {"geometry": {"type": "Polygon", "coordinates": [[[-59.758285000000001, 8.3670349999999996], [-59.101683999999999, 7.9992020000000004], [-58.482962000000001, 7.3476910000000002], [-58.454875999999999, 6.8327869999999997], [-58.078102999999999, 6.809094], [-57.542219000000003, 6.3212679999999999], [-57.147435999999999, 5.9731500000000004], [-57.307245999999999, 5.0735669999999997], [-57.914288999999997, 4.8126259999999998], [-57.860210000000002, 4.5768009999999997], [-58.044694, 4.0608639999999996], [-57.601568999999998, 3.3346550000000001], [-57.281433, 3.3334920000000001], [-57.150098, 2.7689270000000001], [-56.539386, 1.8995230000000001], [-56.782704000000003, 1.8637109999999999], [-57.335822999999998, 1.9485380000000001], [-57.660971000000004, 1.682585], [-58.11345, 1.5071950000000001], [-58.429476999999999, 1.4639420000000001], [-58.540013000000002, 1.2680880000000001], [-59.030861999999999, 1.317698], [-59.646044000000003, 1.786894], [-59.718546000000003, 2.2496299999999998], [-59.974525, 2.755233], [-59.815412999999999, 3.6064989999999999], [-59.538040000000002, 3.9588030000000001], [-59.767406000000001, 4.4235030000000002], [-60.111001999999999, 4.574967], [-59.980958999999999, 5.0140609999999999], [-60.213683000000003, 5.2444860000000002], [-60.733573999999997, 5.2002769999999998], [-61.410302999999999, 5.9590680000000003], [-61.139415, 6.2342969999999998], [-61.159336000000003, 6.6960769999999998], [-60.543998999999999, 6.8565839999999998], [-60.295667999999999, 7.0439109999999996], [-60.637973000000002, 7.415], [-60.550587999999998, 7.7796029999999998], [-59.758285000000001, 8.3670349999999996]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u0430\u0439\u0430\u043d\u0430", "fr": "Guyana", "en": "Guyana", "nl": "Guyana", "pt": "Guiana", "no": "Guyana", "de": "Guyana", "it": "Guyana", "sv": "Guyana", "pl": "Gujana", "fi": "Guyana", "zh": "\u572d\u4e9a\u90a3", "ja": "\u30ac\u30a4\u30a2\u30ca", "es": "Guyana"}, "label_fr": "Guyana", "name": "Guyana", "dbpedia_uri": "http://dbpedia.org/resource/Guyana"}, "id": "GUY"}, {"geometry": {"type": "Polygon", "coordinates": [[[-87.316654, 12.984686], [-87.489408999999995, 13.297535], [-87.793110999999996, 13.38448], [-87.723502999999994, 13.78505], [-87.859515000000002, 13.893312], [-88.065342999999999, 13.964626000000001], [-88.503997999999996, 13.845485999999999], [-88.541230999999996, 13.980155], [-88.843073000000004, 14.140506999999999], [-89.058511999999993, 14.340028999999999], [-89.353325999999996, 14.424132999999999], [-89.145534999999995, 14.678019000000001], [-89.225219999999993, 14.874286], [-89.154810999999995, 15.066419], [-88.680679999999995, 15.346247], [-88.225022999999993, 15.727722], [-88.121153000000007, 15.688655000000001], [-87.901813000000004, 15.864458000000001], [-87.615679999999998, 15.878799000000001], [-87.522920999999997, 15.797279], [-87.367761999999999, 15.84694], [-86.903191000000007, 15.756713], [-86.440945999999997, 15.782835], [-86.119234000000006, 15.893449], [-86.001953999999998, 16.005406000000001], [-85.683317000000002, 15.953652], [-85.444004000000007, 15.885749000000001], [-85.182444000000004, 15.909158], [-84.983722, 15.995922999999999], [-84.526979999999995, 15.857224], [-84.368256000000002, 15.835158], [-84.063055000000006, 15.648244], [-83.773977000000002, 15.424072000000001], [-83.410381000000001, 15.270903000000001], [-83.147219000000007, 14.995829000000001], [-83.489988999999994, 15.016266999999999], [-83.628585000000001, 14.880074], [-83.975720999999993, 14.749435999999999], [-84.228341999999998, 14.748764], [-84.449336000000002, 14.621613999999999], [-84.649581999999995, 14.666805], [-84.820036999999999, 14.819587], [-84.924501000000006, 14.790493], [-85.052786999999995, 14.551541], [-85.148751000000004, 14.560197000000001], [-85.165364999999994, 14.354369999999999], [-85.514413000000005, 14.079012000000001], [-85.698665000000005, 13.960077999999999], [-85.801294999999996, 13.836055], [-86.096264000000005, 14.038187000000001], [-86.312141999999994, 13.771356000000001], [-86.520707999999999, 13.778487], [-86.755087000000003, 13.754845], [-86.733822000000004, 13.263093], [-86.880556999999996, 13.254204], [-87.005769000000001, 13.025793999999999], [-87.316654, 12.984686]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0413\u043e\u043d\u0434\u0443\u0440\u0430\u0441", "fr": "Honduras", "en": "Honduras", "nl": "Honduras", "pt": "Honduras", "no": "Honduras", "de": "Honduras", "it": "Honduras", "sv": "Honduras", "pl": "Honduras", "fi": "Honduras", "zh": "\u6d2a\u90fd\u62c9\u65af", "ja": "\u30db\u30f3\u30b8\u30e5\u30e9\u30b9", "es": "Honduras"}, "label_fr": "Honduras", "name": "Honduras", "dbpedia_uri": "http://dbpedia.org/resource/Honduras"}, "id": "HND"}, {"geometry": {"type": "Polygon", "coordinates": [[[18.829837999999999, 45.908878000000001], [19.072769000000001, 45.521510999999997], [19.390476, 45.236516000000002], [19.005486000000001, 44.860233999999998], [18.553214000000001, 45.081589999999998], [17.861782999999999, 45.067740000000001], [17.002146, 45.233777000000003], [16.534939000000001, 45.211607999999998], [16.318156999999999, 45.004126999999997], [15.959367, 45.233777000000003], [15.750026, 44.818711999999998], [16.239660000000001, 44.351143], [16.456443, 44.041240000000002], [16.916156000000001, 43.667721999999998], [17.297373, 43.446340999999997], [17.674921999999999, 43.028562999999998], [18.559999999999999, 42.649999999999999], [18.450016000000002, 42.479990999999998], [17.509969999999999, 42.849995], [16.930005999999999, 43.209997999999999], [16.015384999999998, 43.507215000000002], [15.174454000000001, 44.243191000000003], [15.376250000000001, 44.317914999999999], [14.920309, 44.738484], [14.901602, 45.076059999999998], [14.258748000000001, 45.233777000000003], [13.952254999999999, 44.802123999999999], [13.656976, 45.136935000000001], [13.679403000000001, 45.484149000000002], [13.715059999999999, 45.500323999999999], [14.411968, 45.466166000000001], [14.595109000000001, 45.634940999999998], [14.935244000000001, 45.471694999999997], [15.327674999999999, 45.452316000000003], [15.323954000000001, 45.731783], [15.671530000000001, 45.834153999999998], [15.768732999999999, 46.238107999999997], [16.564807999999999, 46.503751000000001], [16.882515000000001, 46.380631999999999], [17.630065999999999, 45.951768999999999], [18.456061999999999, 45.759481000000001], [18.829837999999999, 45.908878000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0425\u043e\u0440\u0432\u0430\u0442\u0438\u044f", "fr": "Croatie", "en": "Croatia", "nl": "Kroati\u00eb", "pt": "Cro\u00e1cia", "no": "Kroatia", "de": "Kroatien", "it": "Croazia", "sv": "Kroatien", "pl": "Chorwacja", "fi": "Kroatia", "zh": "\u514b\u7f57\u5730\u4e9a", "ja": "\u30af\u30ed\u30a2\u30c1\u30a2", "es": "Croacia"}, "label_fr": "Croatie", "name": "Croatia", "dbpedia_uri": "http://dbpedia.org/resource/Croatia"}, "id": "HRV"}, {"geometry": {"type": "Polygon", "coordinates": [[[-73.189791, 19.915683999999999], [-72.579673, 19.871500999999999], [-71.712361000000001, 19.714455999999998], [-71.624872999999994, 19.169837999999999], [-71.701302999999996, 18.785416999999999], [-71.945111999999995, 18.616900000000001], [-71.687737999999996, 18.316659999999999], [-71.708304999999996, 18.044996999999999], [-72.372476000000006, 18.214960999999999], [-72.844410999999994, 18.145610999999999], [-73.454554999999999, 18.217905999999999], [-73.922432999999998, 18.030992999999999], [-74.458033999999998, 18.342549999999999], [-74.369924999999995, 18.664908], [-73.449541999999994, 18.526053000000001], [-72.694936999999996, 18.445799000000001], [-72.334881999999993, 18.668422], [-72.791650000000004, 19.101624999999999], [-72.784104999999997, 19.483591000000001], [-73.415021999999993, 19.639551000000001], [-73.189791, 19.915683999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u0413\u0430\u0438\u0442\u0438", "fr": "Ha\u00efti", "en": "Haiti", "nl": "Ha\u00efti", "pt": "Haiti", "no": "Haiti", "de": "Haiti", "it": "Haiti", "sv": "Haiti", "pl": "Haiti", "fi": "Haiti", "zh": "\u6d77\u5730", "ja": "\u30cf\u30a4\u30c1", "es": "Hait\u00ed"}, "label_fr": "Ha\u00efti", "name": "Haiti", "dbpedia_uri": "http://dbpedia.org/resource/Haiti"}, "id": "HTI"}, {"geometry": {"type": "Polygon", "coordinates": [[[16.202297999999999, 46.852386000000003], [16.534268000000001, 47.496170999999997], [16.340584, 47.712902], [16.903753999999999, 47.714866000000001], [16.979666999999999, 48.123497], [17.488472999999999, 47.867466], [17.857133000000001, 47.758429], [18.696512999999999, 47.880954000000003], [18.777024999999998, 48.081767999999997], [19.174365000000002, 48.111378999999999], [19.661363999999999, 48.266615000000002], [19.769470999999999, 48.202691000000002], [20.239053999999999, 48.327567000000002], [20.473562000000001, 48.562849999999997], [20.801293999999999, 48.623854000000001], [21.872236000000001, 48.319971000000002], [22.085608000000001, 48.422263999999998], [22.640820000000001, 48.150239999999997], [22.710531, 47.882193999999998], [22.099768000000001, 47.672438999999997], [21.626515000000001, 46.994238000000003], [21.021951999999999, 46.316088000000001], [20.220192000000001, 46.127468999999998], [19.596045, 46.171729999999997], [18.829837999999999, 45.908878000000001], [18.456061999999999, 45.759481000000001], [17.630065999999999, 45.951768999999999], [16.882515000000001, 46.380631999999999], [16.564807999999999, 46.503751000000001], [16.370505000000001, 46.841327], [16.202297999999999, 46.852386000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0412\u0435\u043d\u0433\u0440\u0438\u044f", "fr": "Hongrie", "en": "Hungary", "nl": "Hongarije", "pt": "Hungria", "no": "Ungarn", "de": "Ungarn", "it": "Ungheria", "sv": "Ungern", "pl": "W\u0119gry", "fi": "Unkari", "zh": "\u5308\u7259\u5229", "ja": "\u30cf\u30f3\u30ac\u30ea\u30fc", "es": "Hungr\u00eda"}, "label_fr": "Hongrie", "name": "Hungary", "dbpedia_uri": "http://dbpedia.org/resource/Hungary"}, "id": "HUN"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[120.715609, -10.239580999999999], [120.29501399999999, -10.258649999999999], [118.96780800000001, -9.5579689999999999], [119.90031, -9.3613400000000002], [120.42575600000001, -9.6659210000000009], [120.775502, -9.9696750000000005], [120.715609, -10.239580999999999]]], [[[124.43595000000001, -10.140001], [123.579982, -10.359987], [123.45998899999999, -10.239995], [123.550009, -9.9000160000000008], [123.980009, -9.2900270000000003], [124.968682, -8.8927899999999998], [125.07002, -9.0899870000000007], [125.08852, -9.3931730000000009], [124.43595000000001, -10.140001]]], [[[117.900018, -8.0956810000000008], [118.260616, -8.3623829999999995], [118.87846, -8.2806829999999998], [119.126507, -8.7058250000000008], [117.97040200000001, -8.9066390000000002], [117.277731, -9.0408950000000008], [116.74014099999999, -9.0329370000000004], [117.083737, -8.4571579999999997], [117.632024, -8.4493030000000005], [117.900018, -8.0956810000000008]]], [[[122.903537, -8.0942340000000002], [122.75698300000001, -8.6498080000000002], [121.254491, -8.9336660000000006], [119.924391, -8.8104180000000003], [119.920929, -8.4448589999999992], [120.715092, -8.2369649999999996], [121.341669, -8.53674], [122.00736499999999, -8.4606200000000005], [122.903537, -8.0942340000000002]]], [[[108.623479, -6.7776740000000002], [110.539227, -6.8773580000000001], [110.759576, -6.4651860000000001], [112.614811, -6.9460360000000003], [112.978768, -7.5942129999999999], [114.47893500000001, -7.7765279999999999], [115.705527, -8.3708069999999992], [114.564511, -8.7518170000000008], [113.46473400000001, -8.3489470000000008], [112.55967200000001, -8.3761810000000008], [111.52206099999999, -8.3021290000000008], [110.58615, -8.1226050000000001], [109.427667, -7.7406639999999998], [108.69365500000001, -7.6416000000000004], [108.27776299999999, -7.7666570000000004], [106.45410200000001, -7.3548999999999998], [106.280624, -6.9249000000000001], [105.365486, -6.8514160000000004], [106.05164600000001, -5.8959190000000001], [107.26500900000001, -5.9549849999999998], [108.072091, -6.3457619999999997], [108.486846, -6.4219850000000003], [108.623479, -6.7776740000000002]]], [[[134.72462400000001, -6.2144009999999996], [134.21013400000001, -6.895238], [134.112776, -6.1424669999999999], [134.290336, -5.7830579999999996], [134.49962500000001, -5.4450419999999999], [134.727002, -5.7375819999999997], [134.72462400000001, -6.2144009999999996]]], [[[127.24921500000001, -3.4590649999999998], [126.874923, -3.7909830000000002], [126.183802, -3.6073759999999999], [125.989034, -3.177273], [127.000651, -3.129318], [127.24921500000001, -3.4590649999999998]]], [[[130.47134399999999, -3.0937640000000002], [130.834836, -3.8584719999999999], [129.99054699999999, -3.4463010000000001], [129.155249, -3.3626369999999999], [128.59068400000001, -3.4286789999999998], [127.89889100000001, -3.3934359999999999], [128.13587899999999, -2.8436499999999998], [129.37099799999999, -2.8021539999999998], [130.47134399999999, -3.0937640000000002]]], [[[134.14336800000001, -1.151867], [134.42262700000001, -2.7691849999999998], [135.45760300000001, -3.367753], [136.29331400000001, -2.307042], [137.44073800000001, -1.7035130000000001], [138.32972699999999, -1.7026859999999999], [139.184921, -2.0512959999999998], [139.92668399999999, -2.409052], [141.00021000000001, -2.6001509999999999], [141.01705699999999, -5.8590220000000004], [141.033852, -9.1178930000000005], [140.143415, -8.2971679999999992], [139.12776700000001, -8.0960429999999999], [138.88147699999999, -8.3809349999999991], [137.614474, -8.411683], [138.03909899999999, -7.5978820000000002], [138.668621, -7.3202249999999998], [138.40791400000001, -6.2328489999999999], [137.92784, -5.3933660000000003], [135.98925, -4.5465439999999999], [135.16459800000001, -4.4629310000000002], [133.66288, -3.538853], [133.367705, -4.0248189999999999], [132.98395600000001, -4.1129790000000002], [132.75694100000001, -3.746283], [132.75378900000001, -3.3117869999999998], [131.98980399999999, -2.820551], [133.066845, -2.4604180000000002], [133.78003100000001, -2.4798480000000001], [133.696212, -2.2145419999999998], [132.232373, -2.212526], [131.83622199999999, -1.617162], [130.94283999999999, -1.4325220000000001], [130.51955799999999, -0.93772], [131.867538, -0.695461], [132.38011599999999, -0.36953799999999998], [133.98554799999999, -0.78020999999999996], [134.14336800000001, -1.151867]]], [[[125.24050099999999, 1.4198360000000001], [124.43703499999999, 0.42788100000000001], [123.68550500000001, 0.235593], [122.723083, 0.43113699999999999], [121.056725, 0.38121699999999997], [120.183083, 0.23724700000000001], [120.04087, -0.51965799999999995], [120.93590500000001, -1.408906], [121.475821, -0.95596199999999998], [123.340565, -0.61567300000000003], [123.258399, -1.0762130000000001], [122.822715, -0.93095099999999997], [122.38853, -1.516858], [121.508274, -1.9044829999999999], [122.454572, -3.1860580000000001], [122.271896, -3.5295000000000001], [123.170963, -4.6836929999999999], [123.162333, -5.3406039999999999], [122.62851499999999, -5.6345910000000003], [122.236394, -5.2829329999999999], [122.71956900000001, -4.4641719999999996], [121.73823400000001, -4.8513310000000001], [121.489463, -4.5745529999999999], [121.61917099999999, -4.1884779999999999], [120.89818200000001, -3.6021049999999999], [120.97238900000001, -2.627643], [120.305453, -2.9316040000000001], [120.390047, -4.0975789999999996], [120.430717, -5.5282410000000004], [119.796543, -5.6734], [119.366906, -5.3798779999999997], [119.653606, -4.4594170000000002], [119.498835, -3.4944120000000001], [119.078344, -3.4870220000000001], [118.767769, -2.8019989999999999], [119.18097400000001, -2.1471040000000001], [119.32339399999999, -1.3531470000000001], [119.825999, 0.154254], [120.035702, 0.56647700000000001], [120.885779, 1.309223], [121.66681699999999, 1.013944], [122.927567, 0.87519199999999997], [124.077522, 0.91710199999999997], [125.065989, 1.643259], [125.24050099999999, 1.4198360000000001]]], [[[128.68824900000001, 1.1323859999999999], [128.635952, 0.25848599999999999], [128.12017, 0.35641299999999998], [127.968034, -0.252077], [128.379999, -0.78000400000000003], [128.10001600000001, -0.89999600000000002], [127.69647500000001, -0.266598], [127.39949, 1.011722], [127.60051199999999, 1.8106910000000001], [127.932378, 2.1745960000000002], [128.00415599999999, 1.628531], [128.594559, 1.5408109999999999], [128.68824900000001, 1.1323859999999999]]], [[[117.87562699999999, 1.8276410000000001], [118.996747, 0.90221899999999999], [117.811858, 0.78424199999999999], [117.47833900000001, 0.102475], [117.52164399999999, -0.80372299999999997], [116.56004799999999, -1.4876609999999999], [116.53379700000001, -2.483517], [116.148084, -4.0127259999999998], [116.00085799999999, -3.6570369999999999], [114.86480299999999, -4.1069839999999997], [114.46865200000001, -3.4957039999999999], [113.755672, -3.4391699999999998], [113.25699400000001, -3.118776], [112.06812600000001, -3.4783919999999999], [111.70329099999999, -2.9944419999999998], [111.04824000000001, -3.049426], [110.22384599999999, -2.9340320000000002], [110.070936, -1.5928739999999999], [109.57194800000001, -1.314907], [109.091874, -0.459507], [108.952658, 0.41537499999999999], [109.069136, 1.341934], [109.66325999999999, 2.0064669999999998], [109.83022699999999, 1.338136], [110.514061, 0.77313100000000001], [111.159138, 0.97647799999999996], [111.79754800000001, 0.90444100000000005], [112.380252, 1.410121], [112.859809, 1.49779], [113.80585000000001, 1.217549], [114.62135499999999, 1.430688], [115.13403700000001, 2.821482], [115.51907799999999, 3.169238], [115.865517, 4.306559], [117.015214, 4.3060939999999999], [117.882035, 4.1375510000000002], [117.313232, 3.2344279999999999], [118.04833000000001, 2.28769], [117.87562699999999, 1.8276410000000001]]], [[[105.817655, -5.8523560000000003], [104.710384, -5.8732850000000001], [103.868213, -5.0373150000000004], [102.584261, -4.2202590000000004], [102.156173, -3.6141459999999999], [101.399113, -2.7997770000000002], [100.902503, -2.050262], [100.141981, -0.65034800000000004], [99.263739999999999, 0.183142], [98.970011, 1.0428820000000001], [98.601350999999994, 1.823507], [97.699597999999995, 2.4531839999999998], [97.176941999999997, 3.3087909999999998], [96.424017000000006, 3.8688600000000002], [95.380876000000001, 4.9707819999999998], [95.293025999999998, 5.4798210000000003], [95.936863000000002, 5.4395129999999998], [97.484881999999999, 5.246321], [98.369168999999999, 4.26837], [99.142559000000006, 3.5903499999999999], [99.693997999999993, 3.1743290000000002], [100.641434, 2.0993810000000002], [101.658012, 2.0836969999999999], [102.498271, 1.3987000000000001], [103.07684, 0.561361], [103.838396, 0.104542], [103.437645, -0.71194599999999997], [104.010789, -1.059212], [104.369991, -1.084843], [104.53949, -1.7823720000000001], [104.88789300000001, -2.3404250000000002], [105.622111, -2.4288439999999998], [106.108593, -3.0617770000000002], [105.857446, -4.3055250000000003], [105.817655, -5.8523560000000003]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u043d\u0434\u043e\u043d\u0435\u0437\u0438\u044f", "fr": "Indon\u00e9sie", "en": "Indonesia", "nl": "Indonesi\u00eb", "pt": "Indon\u00e9sia", "no": "Indonesia", "de": "Indonesien", "it": "Indonesia", "sv": "Indonesien", "pl": "Indonezja", "fi": "Indonesia", "zh": "\u5370\u5ea6\u5c3c\u897f\u4e9a", "ja": "\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2", "es": "Indonesia"}, "label_fr": "Indon\u00e9sie", "name": "Indonesia", "dbpedia_uri": "http://dbpedia.org/resource/Indonesia"}, "id": "IDN"}, {"geometry": {"type": "Polygon", "coordinates": [[[77.837451000000001, 35.494010000000003], [78.912268999999995, 34.321936000000001], [78.811086000000003, 33.506197999999998], [79.208892000000006, 32.994394999999997], [79.176129000000003, 32.483780000000003], [78.458445999999995, 32.618164], [78.738894000000002, 31.515906000000001], [79.721367000000001, 30.882715000000001], [81.111255999999997, 30.183481], [80.476720999999998, 29.729865], [80.088425000000001, 28.79447], [81.057203000000001, 28.416094999999999], [81.999987000000004, 27.925478999999999], [83.304248999999999, 27.364505999999999], [84.675017999999994, 27.234901000000001], [85.251778999999999, 26.726198], [86.024393000000003, 26.630984999999999], [87.227472000000006, 26.397898000000001], [88.060237999999998, 26.414615000000001], [88.174803999999995, 26.810404999999999], [88.043132999999997, 27.445819], [88.120441, 27.876542000000001], [88.730326000000005, 28.086865], [88.814248000000006, 27.299316000000001], [88.835643000000005, 27.098966000000001], [89.744528000000003, 26.719403], [90.373275000000007, 26.875724000000002], [91.217512999999997, 26.808648000000002], [92.033484000000001, 26.83831], [92.103712000000002, 27.452614000000001], [91.696657000000002, 27.771742], [92.503118999999998, 27.896875999999999], [93.413347999999999, 28.640629000000001], [94.565989999999999, 29.277438], [95.404802000000004, 29.031717], [96.117678999999995, 29.452801999999998], [96.586590999999999, 28.83098], [96.248833000000005, 28.411031000000001], [97.327113999999995, 28.261583000000002], [97.402561000000006, 27.882536000000002], [97.051989000000006, 27.699058999999998], [97.133999000000003, 27.083773999999998], [96.419365999999997, 27.264589000000001], [95.124768000000003, 26.573571999999999], [95.155152999999999, 26.001307000000001], [94.603249000000005, 25.162495], [94.552657999999994, 24.675238], [94.106741999999997, 23.850740999999999], [93.325187999999997, 24.078555999999999], [93.286327, 23.043658000000001], [93.060293999999999, 22.703111], [93.166128, 22.278459999999999], [92.672720999999996, 22.041239000000001], [92.146034999999998, 23.627499], [91.869928000000002, 23.624345999999999], [91.706474999999998, 22.985264000000001], [91.158963, 23.503526999999998], [91.467730000000003, 24.072638999999999], [91.915092999999999, 24.130413999999998], [92.376202000000006, 24.976693000000001], [91.799595999999994, 25.147431999999998], [90.872210999999993, 25.132601000000001], [89.920693, 25.269749999999998], [89.832481000000001, 25.965081999999999], [89.355093999999994, 26.014406999999999], [88.563049000000007, 26.446525999999999], [88.209789000000001, 25.768066000000001], [88.931554000000006, 25.238692], [88.306372999999994, 24.866078999999999], [88.084422000000004, 24.501657000000002], [88.699939999999998, 24.233715], [88.529769999999999, 23.631142000000001], [88.876311999999999, 22.879145999999999], [89.031960999999995, 22.055707999999999], [88.888766000000004, 21.690588000000002], [88.208496999999994, 21.703171999999999], [86.975703999999993, 21.495562], [87.033169000000001, 20.743307999999999], [86.499351000000004, 20.151637999999998], [85.060265999999999, 19.478579], [83.941006000000002, 18.302009999999999], [83.189216999999999, 17.671220999999999], [82.192791999999997, 17.016635999999998], [82.191242000000003, 16.556664000000001], [81.692718999999997, 16.310219], [80.791999000000004, 15.951972], [80.324895999999995, 15.899184999999999], [80.025069000000002, 15.136415], [80.233273999999994, 13.835770999999999], [80.286293999999998, 13.006261], [79.862547000000006, 12.056215], [79.857999000000007, 10.357275], [79.340512000000004, 10.308854], [78.885345000000001, 9.5461360000000006], [79.189719999999994, 9.2165440000000007], [78.277940999999998, 8.9330470000000002], [77.941164999999998, 8.2529590000000006], [77.539897999999994, 7.965535], [76.592979, 8.8992760000000004], [76.130060999999998, 10.299630000000001], [75.746466999999996, 11.308251], [75.396101000000002, 11.781245], [74.864816000000005, 12.741936000000001], [74.616716999999994, 13.992583], [74.443859000000003, 14.617222], [73.534199000000001, 15.990652000000001], [73.119909000000007, 17.928570000000001], [72.820909, 19.208234000000001], [72.824475000000007, 20.419502999999999], [72.630533, 21.356009], [71.175273000000004, 20.757441], [70.470459000000005, 20.877331000000002], [69.16413, 22.089297999999999], [69.644927999999993, 22.450775], [69.349597000000003, 22.84318], [68.176644999999994, 23.691965], [68.842599000000007, 24.359134000000001], [71.043239999999997, 24.356524], [70.844699000000006, 25.215102000000002], [70.282872999999995, 25.722228999999999], [70.168926999999996, 26.491872000000001], [69.514392999999998, 26.940966], [70.616495999999998, 27.989196], [71.777665999999996, 27.913180000000001], [72.823751999999999, 28.961592], [73.450637999999998, 29.976413000000001], [74.421379999999999, 30.979814999999999], [74.405929, 31.692639], [75.258641999999995, 32.271104999999999], [74.451559000000003, 32.764899999999997], [74.104293999999996, 33.441473000000002], [73.749948000000003, 34.317698999999998], [74.240202999999994, 34.748887000000003], [75.757060999999993, 34.504922999999998], [76.871722000000005, 34.653543999999997], [77.837451000000001, 35.494010000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u043d\u0434\u0438\u044f", "fr": "Inde", "en": "India", "nl": "India", "pt": "\u00cdndia", "no": "India", "de": "Indien", "it": "India", "sv": "Indien", "pl": "Indie", "fi": "Intia", "zh": "\u5370\u5ea6", "ja": "\u30a4\u30f3\u30c9", "es": "India"}, "label_fr": "Inde", "name": "India", "dbpedia_uri": "http://dbpedia.org/resource/India"}, "id": "IND"}, {"geometry": {"type": "Polygon", "coordinates": [[[-6.1978850000000003, 53.867564999999999], [-6.032985, 53.153163999999997], [-6.7888570000000001, 52.260117999999999], [-8.561617, 51.669300999999997], [-9.9770859999999999, 51.820455000000003], [-9.166283, 52.864629000000001], [-9.6885250000000003, 53.881363], [-8.3279870000000003, 54.664518999999999], [-7.5721679999999996, 55.131622], [-7.3660310000000004, 54.595841], [-7.5721679999999996, 54.059956], [-6.9537300000000002, 54.073701999999997], [-6.1978850000000003, 53.867564999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u0440\u043b\u0430\u043d\u0434\u0438\u044f (\u043e\u0441\u0442\u0440\u043e\u0432)", "fr": "Irlande (\u00eele)", "en": "Ireland", "nl": "Ierland (eiland)", "pt": "Irlanda (ilha)", "no": "Irland (\u00f8y)", "de": "Irland (Insel)", "it": "Irlanda (isola)", "pl": "Irlandia (wyspa)", "fi": "Irlanti (saari)", "zh": "\u7231\u5c14\u5170\u5c9b", "ja": "\u30a2\u30a4\u30eb\u30e9\u30f3\u30c9\u5cf6", "es": "Irlanda (isla)"}, "label_fr": "Irlande (\u00eele)", "name": "Ireland", "dbpedia_uri": "http://dbpedia.org/resource/Ireland"}, "id": "IRL"}, {"geometry": {"type": "Polygon", "coordinates": [[[53.921598000000003, 37.198917999999999], [54.800303999999997, 37.392420999999999], [55.511578, 37.964117000000002], [56.180374999999998, 37.935127000000001], [56.619365999999999, 38.121394000000002], [57.330433999999997, 38.029229000000001], [58.436154000000002, 37.522309], [59.234762000000003, 37.412987999999999], [60.377637999999997, 36.527383], [61.123071000000003, 36.491596999999999], [61.210816999999999, 35.650072000000002], [60.803193, 34.404102000000002], [60.52843, 33.676445999999999], [60.963700000000003, 33.528832000000001], [60.536078000000003, 32.981268999999998], [60.863655000000001, 32.182920000000003], [60.941944999999997, 31.548075000000001], [61.699314000000001, 31.379505999999999], [61.781222, 30.735849999999999], [60.874248000000001, 29.829239000000001], [61.369309000000001, 29.303276], [61.771867999999998, 28.699334], [62.727829999999997, 28.259644999999999], [62.755426, 27.378923], [63.233898000000003, 27.217047000000001], [63.316631999999998, 26.756532], [61.874186999999999, 26.239975000000001], [61.497363, 25.078237000000001], [59.616134000000002, 25.380157000000001], [58.525761000000003, 25.609961999999999], [57.397250999999997, 25.739902000000001], [56.970765999999998, 26.966106], [56.492139000000002, 27.143305000000002], [55.723709999999997, 26.964632999999999], [54.715089999999996, 26.480657999999998], [53.493096999999999, 26.812369], [52.483598000000001, 27.580849000000001], [51.520763000000002, 27.865690000000001], [50.852947999999998, 28.814520999999999], [50.115009000000001, 30.147773000000001], [49.57685, 29.985714999999999], [48.941333, 30.31709], [48.567971, 29.926777999999999], [48.014567999999997, 30.452456999999999], [48.004697999999998, 30.985137000000002], [47.685285999999998, 30.984853000000001], [47.849204, 31.709175999999999], [47.334660999999997, 32.469155000000001], [46.109361999999997, 33.017287000000003], [45.416691, 33.967798000000002], [45.64846, 34.748137999999997], [46.151788000000003, 35.093259000000003], [46.076340000000002, 35.677382999999999], [45.420617999999997, 35.977545999999997], [44.772669999999998, 37.170450000000002], [44.225755999999997, 37.971584], [44.421402999999998, 38.281281], [44.109225000000002, 39.428136000000002], [44.793990000000001, 39.713003], [44.952688000000002, 39.335765000000002], [45.457721999999997, 38.874139], [46.143622999999998, 38.741200999999997], [46.505719999999997, 38.770605000000003], [47.685079000000002, 39.508364], [48.060094999999997, 39.582234999999997], [48.355528999999997, 39.288764999999998], [48.010744000000003, 38.794015000000002], [48.634374999999999, 38.270378000000001], [48.883248999999999, 38.320245], [49.199612000000002, 37.582873999999997], [50.147770999999999, 37.374566999999999], [50.842354, 36.872813999999998], [52.264024999999997, 36.700422000000003], [53.825789999999998, 36.965031000000003], [53.921598000000003, 37.198917999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u0440\u0430\u043d", "fr": "Iran", "en": "Iran", "nl": "Iran", "pt": "Ir\u00e3o", "no": "Iran", "de": "Iran", "it": "Iran", "sv": "Iran", "pl": "Iran", "fi": "Iran", "zh": "\u4f0a\u6717", "ja": "\u30a4\u30e9\u30f3", "es": "Ir\u00e1n"}, "label_fr": "Iran", "name": "Iran", "dbpedia_uri": "http://dbpedia.org/resource/Iran"}, "id": "IRN"}, {"geometry": {"type": "Polygon", "coordinates": [[[45.420617999999997, 35.977545999999997], [46.076340000000002, 35.677382999999999], [46.151788000000003, 35.093259000000003], [45.64846, 34.748137999999997], [45.416691, 33.967798000000002], [46.109361999999997, 33.017287000000003], [47.334660999999997, 32.469155000000001], [47.849204, 31.709175999999999], [47.685285999999998, 30.984853000000001], [48.004697999999998, 30.985137000000002], [48.014567999999997, 30.452456999999999], [48.567971, 29.926777999999999], [47.974519000000001, 29.975819000000001], [47.302622, 30.059069999999998], [46.568713000000002, 29.099025000000001], [44.709499000000001, 29.178891], [41.889980999999999, 31.190009], [40.399994, 31.889991999999999], [39.195467999999998, 32.161009], [38.792341, 33.378686000000002], [41.006158999999997, 34.419372000000003], [41.383965000000003, 35.628317000000003], [41.289707, 36.358815], [41.837063999999998, 36.605854000000001], [42.349590999999997, 37.229872999999998], [42.779125999999998, 37.385263999999999], [43.942259, 37.256228], [44.293452000000002, 37.001514], [44.772699000000003, 37.170445000000001], [45.420617999999997, 35.977545999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u0440\u0430\u043a", "fr": "Irak", "en": "Iraq", "nl": "Irak", "pt": "Iraque", "no": "Irak", "de": "Irak", "it": "Iraq", "sv": "Irak", "pl": "Irak", "fi": "Irak", "zh": "\u4f0a\u62c9\u514b", "ja": "\u30a4\u30e9\u30af", "es": "Irak"}, "label_fr": "Irak", "name": "Iraq", "dbpedia_uri": "http://dbpedia.org/resource/Iraq"}, "id": "IRQ"}, {"geometry": {"type": "Polygon", "coordinates": [[[-14.508694999999999, 66.455892000000006], [-14.739637, 65.808747999999994], [-13.609731999999999, 65.126671000000002], [-14.909834, 64.364081999999996], [-17.794438, 63.678749000000003], [-18.656245999999999, 63.496383000000002], [-19.972754999999999, 63.643635000000003], [-22.762972000000001, 63.960178999999997], [-21.778483999999999, 64.402116000000007], [-23.955044000000001, 64.891130000000004], [-22.184403, 65.084968000000003], [-22.227423000000002, 65.378594000000007], [-24.326184000000001, 65.611188999999996], [-23.650514999999999, 66.262518999999998], [-22.134922, 66.410469000000006], [-20.576284000000001, 65.732112000000001], [-19.056842, 66.276600999999999], [-17.798624, 65.993853000000001], [-16.167819000000001, 66.526792], [-14.508694999999999, 66.455892000000006]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u0441\u043b\u0430\u043d\u0434\u0438\u044f", "fr": "Islande", "en": "Iceland", "nl": "IJsland", "pt": "Isl\u00e2ndia", "no": "Island", "de": "Island", "it": "Islanda", "sv": "Island", "pl": "Islandia", "fi": "Islanti", "zh": "\u51b0\u5c9b", "ja": "\u30a2\u30a4\u30b9\u30e9\u30f3\u30c9", "es": "Islandia"}, "label_fr": "Islande", "name": "Iceland", "dbpedia_uri": "http://dbpedia.org/resource/Iceland"}, "id": "ISL"}, {"geometry": {"type": "Polygon", "coordinates": [[[35.719918, 32.709192000000002], [35.545665, 32.393991999999997], [35.183929999999997, 32.532511], [34.974640999999998, 31.866582000000001], [35.225892000000002, 31.754341], [34.970506999999998, 31.616778], [34.927408, 31.353435000000001], [35.397561000000003, 31.489086], [35.420918, 31.100066000000002], [34.922603000000002, 29.501325999999999], [34.265433000000002, 31.219360999999999], [34.556372000000003, 31.548824], [34.488106999999999, 31.605539], [34.752586999999998, 32.072926000000002], [34.955416999999997, 32.827376000000001], [35.098457000000003, 33.080539000000002], [35.126052999999999, 33.090899999999998], [35.460709000000001, 33.089039999999997], [35.552796999999998, 33.264274999999998], [35.821100999999999, 33.277425999999998], [35.836396999999998, 32.868122999999997], [35.700797999999999, 32.716014000000001], [35.719918, 32.709192000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u0437\u0440\u0430\u0438\u043b\u044c", "fr": "Isra\u00ebl", "en": "Israel", "nl": "Isra\u00ebl", "pt": "Israel", "no": "Israel", "de": "Israel", "it": "Israele", "sv": "Israel", "pl": "Izrael", "fi": "Israel", "zh": "\u4ee5\u8272\u5217", "ja": "\u30a4\u30b9\u30e9\u30a8\u30eb", "es": "Israel"}, "label_fr": "Isra\u00ebl", "name": "Israel", "dbpedia_uri": "http://dbpedia.org/resource/Israel"}, "id": "ISR"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[15.520376000000001, 38.231155000000001], [15.160242999999999, 37.444046], [15.309898, 37.134219000000002], [15.099988, 36.619987000000002], [14.335229, 36.996631000000001], [13.826733000000001, 37.104531000000001], [12.431004, 37.612949999999998], [12.570944000000001, 38.126381000000002], [13.741156, 38.034965999999997], [14.761248999999999, 38.143873999999997], [15.520376000000001, 38.231155000000001]]], [[[9.2100120000000008, 41.209991000000002], [9.8099749999999997, 40.500008999999999], [9.6695189999999993, 39.177376000000002], [9.2148179999999993, 39.240473000000001], [8.8069360000000003, 38.906618000000002], [8.4283020000000004, 39.171847], [8.3882530000000006, 40.378310999999997], [8.1599979999999999, 40.950006999999999], [8.7099910000000005, 40.899984000000003], [9.2100120000000008, 41.209991000000002]]], [[[12.376485000000001, 46.767558999999999], [13.806475000000001, 46.509306000000002], [13.69811, 46.016778000000002], [13.93763, 45.591016000000003], [13.141605999999999, 45.736691999999998], [12.328581, 45.381777999999997], [12.383875, 44.885373999999999], [12.261452999999999, 44.600482], [12.589237000000001, 44.091366000000001], [13.526906, 43.587727000000001], [14.029821, 42.761007999999997], [15.142569999999999, 41.95514], [15.926190999999999, 41.961314999999999], [16.169896999999999, 41.740295000000003], [15.889346, 41.541082000000003], [16.785001999999999, 41.179606], [17.519169000000002, 40.877142999999997], [18.376687, 40.355625000000003], [18.480246999999999, 40.168866000000001], [18.293385000000001, 39.810774000000002], [17.738379999999999, 40.277670999999998], [16.869596000000001, 40.442234999999997], [16.448743, 39.795400999999998], [17.171489999999999, 39.424700000000001], [17.052841000000001, 38.902870999999998], [16.635088, 38.843572000000002], [16.100961000000002, 37.985899000000003], [15.684087, 37.908848999999996], [15.687963, 38.214593000000001], [15.891980999999999, 38.750942000000002], [16.109331999999998, 38.964547000000003], [15.718814, 39.544072], [15.413613, 40.048357000000003], [14.998495999999999, 40.172949000000003], [14.703268, 40.604550000000003], [14.060672, 40.786347999999997], [13.627985000000001, 41.188287000000003], [12.888082000000001, 41.25309], [12.106683, 41.704535], [11.191905999999999, 42.355424999999997], [10.511948, 42.931463000000001], [10.200029000000001, 43.920006999999998], [9.7024880000000007, 44.036279], [8.8889460000000007, 44.366335999999997], [8.4285610000000002, 44.231228000000002], [7.8507670000000003, 43.767147999999999], [7.4351849999999997, 43.693845000000003], [7.5495960000000002, 44.127901000000001], [7.0075620000000001, 44.254767000000001], [6.7499549999999999, 45.028517999999998], [7.0966519999999997, 45.333098999999997], [6.8023550000000004, 45.708579999999998], [6.8435930000000003, 45.991146999999998], [7.2738509999999996, 45.776947999999997], [7.755992, 45.824489999999997], [8.31663, 46.163642000000003], [8.4899520000000006, 46.005150999999998], [8.9663059999999994, 46.036932], [9.1828819999999993, 46.440215000000002], [9.9228369999999995, 46.314898999999997], [10.363378000000001, 46.483570999999998], [10.442701, 46.893546000000001], [11.048556, 46.751359000000001], [11.164828, 46.941578999999997], [12.153088, 47.115392999999997], [12.376485000000001, 46.767558999999999]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u0442\u0430\u043b\u0438\u044f", "fr": "Italie", "en": "Italy", "nl": "Itali\u00eb", "pt": "It\u00e1lia", "no": "Italia", "de": "Italien", "it": "Italia", "sv": "Italien", "pl": "W\u0142ochy", "fi": "Italia", "zh": "\u610f\u5927\u5229", "ja": "\u30a4\u30bf\u30ea\u30a2", "es": "Italia"}, "label_fr": "Italie", "name": "Italy", "dbpedia_uri": "http://dbpedia.org/resource/Italy"}, "id": "ITA"}, {"geometry": {"type": "Polygon", "coordinates": [[[-77.569601000000006, 18.490525000000002], [-76.896619000000001, 18.400867000000002], [-76.365358999999998, 18.160701], [-76.199658999999997, 17.886866999999999], [-76.902561000000006, 17.868238000000002], [-77.206340999999995, 17.701115999999999], [-77.766023000000004, 17.861597], [-78.337719000000007, 18.225968000000002], [-78.217726999999996, 18.454533000000001], [-77.797364999999999, 18.524218000000001], [-77.569601000000006, 18.490525000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042f\u043c\u0430\u0439\u043a\u0430", "fr": "Jama\u00efque", "en": "Jamaica", "nl": "Jamaica", "pt": "Jamaica", "no": "Jamaica", "de": "Jamaika", "it": "Giamaica", "sv": "Jamaica", "pl": "Jamajka", "fi": "Jamaika", "zh": "\u7259\u4e70\u52a0", "ja": "\u30b8\u30e3\u30de\u30a4\u30ab", "es": "Jamaica"}, "label_fr": "Jama\u00efque", "name": "Jamaica", "dbpedia_uri": "http://dbpedia.org/resource/Jamaica"}, "id": "JAM"}, {"geometry": {"type": "Polygon", "coordinates": [[[35.545665, 32.393991999999997], [35.719918, 32.709192000000002], [36.834062000000003, 32.312938000000003], [38.792341, 33.378686000000002], [39.195467999999998, 32.161009], [39.004885999999999, 32.010216999999997], [37.002166000000003, 31.508413000000001], [37.998849, 30.508500000000002], [37.668120000000002, 30.338664999999999], [37.503582000000002, 30.003775999999998], [36.740527999999998, 29.865283000000002], [36.501213999999997, 29.505254000000001], [36.068941000000002, 29.197495], [34.956037000000002, 29.356555], [34.922603000000002, 29.501325999999999], [35.420918, 31.100066000000002], [35.397561000000003, 31.489086], [35.545251999999998, 31.782505], [35.545665, 32.393991999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0418\u043e\u0440\u0434\u0430\u043d\u0438\u044f", "fr": "Jordanie", "en": "Jordan", "nl": "Jordani\u00eb", "pt": "Jord\u00e2nia", "no": "Jordan", "de": "Jordanien", "it": "Giordania", "sv": "Jordanien", "pl": "Jordania", "fi": "Jordania", "zh": "\u7ea6\u65e6", "ja": "\u30e8\u30eb\u30c0\u30f3", "es": "Jordania"}, "label_fr": "Jordanie", "name": "Jordan", "dbpedia_uri": "http://dbpedia.org/resource/Jordan"}, "id": "JOR"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[134.638428, 34.149234], [134.766379, 33.806334999999997], [134.203416, 33.201177999999999], [133.79294999999999, 33.521985000000001], [133.28026800000001, 33.289569999999998], [133.014858, 32.704566999999997], [132.36311499999999, 32.989381999999999], [132.37117599999999, 33.463642], [132.924373, 34.060299000000001], [133.49296799999999, 33.944620999999998], [133.90410600000001, 34.364930999999999], [134.638428, 34.149234]]], [[[140.97638799999999, 37.142074000000001], [140.59977000000001, 36.343983000000001], [140.77407400000001, 35.842877000000001], [140.25327899999999, 35.138114000000002], [138.975528, 34.6676], [137.21759900000001, 34.606285999999997], [135.79298299999999, 33.464804999999998], [135.120983, 33.849071000000002], [135.07943499999999, 34.596544999999999], [133.340316, 34.375937999999998], [132.15677099999999, 33.904933], [130.98614499999999, 33.885761000000002], [132.00003599999999, 33.149991999999997], [131.33278999999999, 31.450354999999998], [130.686318, 31.029578999999998], [130.20241999999999, 31.418237999999999], [130.447676, 32.319474999999997], [129.81469200000001, 32.610309999999998], [129.40846300000001, 33.296056], [130.35393500000001, 33.604151000000002], [130.87845100000001, 34.232742999999999], [131.884229, 34.749713999999997], [132.617673, 35.433393000000002], [134.60830100000001, 35.731617999999997], [135.677538, 35.527133999999997], [136.72383099999999, 37.304983999999997], [137.390612, 36.827390999999999], [138.85760200000001, 37.827485000000003], [139.42640499999999, 38.215961999999998], [140.05479, 39.438806999999997], [139.88337899999999, 40.563312000000003], [140.30578299999999, 41.195005000000002], [141.36897300000001, 41.37856], [141.91426300000001, 39.991616], [141.884601, 39.180864999999997], [140.95948899999999, 38.174000999999997], [140.97638799999999, 37.142074000000001]]], [[[143.91016200000001, 44.174100000000003], [144.613427, 43.960883000000003], [145.32082500000001, 44.384732999999997], [145.543137, 43.262087999999999], [144.059662, 42.988357999999998], [143.18385000000001, 41.995215000000002], [141.611491, 42.678790999999997], [141.067286, 41.584594000000003], [139.955106, 41.569555999999999], [139.817544, 42.563758999999997], [140.31208699999999, 43.333272999999998], [141.380549, 43.388824999999997], [141.671952, 44.772125000000003], [141.967645, 45.551482999999998], [143.14286999999999, 44.510357999999997], [143.91016200000001, 44.174100000000003]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042f\u043f\u043e\u043d\u0438\u044f", "fr": "Japon", "en": "Japan", "nl": "Japan", "pt": "Jap\u00e3o", "no": "Japan", "de": "Japan", "it": "Giappone", "sv": "Japan", "pl": "Japonia", "fi": "Japani", "zh": "\u65e5\u672c", "ja": "\u65e5\u672c", "es": "Jap\u00f3n"}, "label_fr": "Japon", "name": "Japan", "dbpedia_uri": "http://dbpedia.org/resource/Japan"}, "id": "JPN"}, {"geometry": {"type": "Polygon", "coordinates": [[[70.962315000000004, 42.266154], [70.388964999999999, 42.081308], [69.070026999999996, 41.384244000000002], [68.632482999999993, 40.668680999999999], [68.259895999999998, 40.662325000000003], [67.985855999999998, 41.135990999999997], [66.714046999999994, 41.168444000000001], [66.510649000000001, 41.987644000000003], [66.023392000000001, 41.994646000000003], [66.098011999999997, 42.997660000000003], [64.900824, 43.728081000000003], [63.185786999999998, 43.650075000000001], [62.013300000000001, 43.504477000000001], [61.058320000000002, 44.405816999999999], [60.239972000000002, 44.784036999999998], [58.689988999999997, 45.500014], [58.503126999999999, 45.586804000000001], [55.928916999999998, 44.995857999999998], [55.968190999999997, 41.308641999999999], [55.455250999999997, 41.259858999999999], [54.755344999999998, 42.043970999999999], [54.079417999999997, 42.324109], [52.944293000000002, 42.116033999999999], [52.502459999999999, 41.783315999999999], [52.446339000000002, 42.027151000000003], [52.692112000000002, 42.443894999999998], [52.501426000000002, 42.792298000000002], [51.342427000000001, 43.132975000000002], [50.891292, 44.031033999999998], [50.339129, 44.284016000000001], [50.305643000000003, 44.609836000000001], [51.278503000000001, 44.514854], [51.316898999999999, 45.245998], [52.167389999999997, 45.408391000000002], [53.040875999999997, 45.259047000000002], [53.220866000000001, 46.234645999999998], [53.042737000000002, 46.853006000000001], [52.042023, 46.804637], [51.191944999999997, 47.048704999999998], [50.034083000000003, 46.608989999999999], [49.10116, 46.399329999999999], [48.593240999999999, 46.561033999999999], [48.694733999999997, 47.075628000000002], [48.057253000000003, 47.743752999999998], [47.315230999999997, 47.715846999999997], [46.466445999999998, 48.394151999999998], [47.043672000000001, 49.152039000000002], [46.751595999999999, 49.356006000000001], [47.549480000000003, 50.454698], [48.577840999999999, 49.874760000000002], [48.702382, 50.605128000000001], [50.766648000000004, 51.692762000000002], [52.328724000000001, 51.718651999999999], [54.532877999999997, 51.026240000000001], [55.716940999999998, 50.621716999999997], [56.777960999999998, 51.043551000000001], [58.363290999999997, 51.063653000000002], [59.642282000000002, 50.545442000000001], [59.932806999999997, 50.842193999999999], [61.337423999999999, 50.79907], [61.588003, 51.272658999999997], [59.967534000000001, 51.960419999999999], [60.927269000000003, 52.447547999999998], [60.739992999999998, 52.719985999999999], [61.699986000000003, 52.979996], [60.978065999999998, 53.664993000000003], [61.436591, 54.006264999999999], [65.178533999999999, 54.354227999999999], [65.666876000000002, 54.601267], [68.1691, 54.970391999999997], [69.068167000000003, 55.385249999999999], [70.865267000000003, 55.169733999999998], [71.180131000000003, 54.133285000000001], [72.224149999999995, 54.376655], [73.508516, 54.035617000000002], [73.425679000000002, 53.489809999999999], [74.384844999999999, 53.546861], [76.891099999999994, 54.490524000000001], [76.525178999999994, 54.177002999999999], [77.800916000000001, 53.404415], [80.035560000000004, 50.864750999999998], [80.568447000000006, 51.388336000000002], [81.945986000000005, 50.812196], [83.383004, 51.069183000000002], [83.935114999999996, 50.889246], [84.416376999999997, 50.311399999999999], [85.115560000000002, 50.117303], [85.541269999999997, 49.692858999999999], [86.829357000000002, 49.826675000000002], [87.359970000000004, 49.214981000000002], [86.598776000000001, 48.549182000000002], [85.768232999999995, 48.455750999999999], [85.720483999999999, 47.452969000000003], [85.164289999999994, 47.000956000000002], [83.180484000000007, 47.330030999999998], [82.458926000000005, 45.539650000000002], [81.947070999999994, 45.317027000000003], [79.966105999999996, 44.917516999999997], [80.866206000000005, 43.180362000000002], [80.180149999999998, 42.920068000000001], [80.259990000000002, 42.349998999999997], [79.643645000000006, 42.496682999999997], [79.142177000000004, 42.856091999999997], [77.658392000000006, 42.960686000000003], [76.000354000000002, 42.988022000000001], [75.636965000000004, 42.877899999999997], [74.212866000000005, 43.298338999999999], [73.645303999999996, 43.091271999999996], [73.489757999999995, 42.500894000000002], [71.844638000000003, 42.845395000000003], [71.186280999999994, 42.704293], [70.962315000000004, 42.266154]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0430\u0437\u0430\u0445\u0441\u0442\u0430\u043d", "fr": "Kazakhstan", "en": "Kazakhstan", "nl": "Kazachstan", "pt": "Cazaquist\u00e3o", "no": "Kasakhstan", "de": "Kasachstan", "it": "Kazakistan", "sv": "Kazakstan", "pl": "Kazachstan", "fi": "Kazakstan", "zh": "\u54c8\u8428\u514b\u65af\u5766", "ja": "\u30ab\u30b6\u30d5\u30b9\u30bf\u30f3", "es": "Kazajist\u00e1n"}, "label_fr": "Kazakhstan", "name": "Kazakhstan", "dbpedia_uri": "http://dbpedia.org/resource/Kazakhstan"}, "id": "KAZ"}, {"geometry": {"type": "Polygon", "coordinates": [[[40.993000000000002, -0.85829], [41.585129999999999, -1.6832499999999999], [40.884770000000003, -2.0825499999999999], [40.63785, -2.49979], [40.263039999999997, -2.5730900000000001], [40.121189999999999, -3.2776800000000001], [39.800060000000002, -3.6811600000000002], [39.604889999999997, -4.3465299999999996], [39.202219999999997, -4.6767700000000003], [37.7669, -3.6771199999999999], [37.698689999999999, -3.0969899999999999], [34.072620000000001, -1.05982], [33.903711000000001, -0.94999999999999996], [33.893568999999999, 0.10981399999999999], [34.18, 0.51500000000000001], [34.6721, 1.1769400000000001], [35.035989999999998, 1.90584], [34.596069999999997, 3.0537399999999999], [34.479129999999998, 3.5556000000000001], [34.005000000000003, 4.2498849999999999], [34.620196, 4.8471229999999998], [35.298006999999998, 5.5060000000000002], [35.817447999999999, 5.3382319999999996], [35.817447999999999, 4.7769659999999998], [36.159078999999998, 4.447864], [36.855092999999997, 4.447864], [38.120914999999997, 3.5986050000000001], [38.436970000000002, 3.5885099999999999], [38.671140000000001, 3.6160700000000001], [38.892510000000001, 3.50074], [39.559384000000001, 3.4220600000000001], [39.854939999999999, 3.8387899999999999], [40.768479999999997, 4.2570199999999998], [41.171799999999998, 3.9190900000000002], [41.855083, 3.9189120000000002], [40.981050000000003, 2.7845200000000001], [40.993000000000002, -0.85829]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0435\u043d\u0438\u044f", "fr": "Kenya", "en": "Kenya", "nl": "Kenia", "pt": "Qu\u00e9nia", "no": "Kenya", "de": "Kenia", "it": "Kenya", "sv": "Kenya", "pl": "Kenia", "fi": "Kenia", "zh": "\u80af\u5c3c\u4e9a", "ja": "\u30b1\u30cb\u30a2", "es": "Kenia"}, "label_fr": "Kenya", "name": "Kenya", "dbpedia_uri": "http://dbpedia.org/resource/Kenya"}, "id": "KEN"}, {"geometry": {"type": "Polygon", "coordinates": [[[70.962315000000004, 42.266154], [71.186280999999994, 42.704293], [71.844638000000003, 42.845395000000003], [73.489757999999995, 42.500894000000002], [73.645303999999996, 43.091271999999996], [74.212866000000005, 43.298338999999999], [75.636965000000004, 42.877899999999997], [76.000354000000002, 42.988022000000001], [77.658392000000006, 42.960686000000003], [79.142177000000004, 42.856091999999997], [79.643645000000006, 42.496682999999997], [80.259990000000002, 42.349998999999997], [80.119429999999994, 42.123941000000002], [78.543661, 41.582242999999998], [78.187196999999998, 41.185316], [76.904483999999997, 41.066485999999998], [76.526368000000005, 40.427945999999999], [75.467827999999997, 40.562072000000001], [74.776861999999994, 40.366425], [73.822243999999998, 39.893973000000003], [73.960013000000004, 39.660007999999998], [73.675379000000007, 39.431237000000003], [71.784694000000002, 39.279463], [70.549161999999995, 39.604197999999997], [69.464887000000004, 39.526682999999998], [69.559610000000006, 40.103211000000002], [70.648019000000005, 39.935754000000003], [71.014197999999993, 40.244365999999999], [71.774874999999994, 40.145843999999997], [73.055417000000006, 40.866033000000002], [71.870114999999998, 41.392899999999997], [71.157859000000002, 41.143586999999997], [70.420022000000003, 41.519998000000001], [71.259247999999999, 42.167710999999997], [70.962315000000004, 42.266154]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0438\u0440\u0433\u0438\u0437\u0438\u044f", "fr": "Kirghizistan", "en": "Kyrgyzstan", "nl": "Kirgizi\u00eb", "pt": "Quirguist\u00e3o", "no": "Kirgisistan", "de": "Kirgisistan", "it": "Kirghizistan", "sv": "Kirgizistan", "pl": "Kirgistan", "fi": "Kirgisia", "zh": "\u5409\u5c14\u5409\u65af\u65af\u5766", "ja": "\u30ad\u30eb\u30ae\u30b9", "es": "Kirguist\u00e1n"}, "label_fr": "Kirghizistan", "name": "Kyrgyzstan", "dbpedia_uri": "http://dbpedia.org/resource/Kyrgyzstan"}, "id": "KGZ"}, {"geometry": {"type": "Polygon", "coordinates": [[[103.49728, 10.632555], [103.09069, 11.153661], [102.58493199999999, 12.186595000000001], [102.348099, 13.394247], [102.988422, 14.225721], [104.281418, 14.416743], [105.218777, 14.273211999999999], [106.04394600000001, 13.881091], [106.49637300000001, 14.570584], [107.382727, 14.202441], [107.614548, 13.535531000000001], [107.49140300000001, 12.337206], [105.810524, 11.567615], [106.24966999999999, 10.961812], [105.199915, 10.88931], [104.334335, 10.486544], [103.49728, 10.632555]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0430\u043c\u0431\u043e\u0434\u0436\u0430", "fr": "Cambodge", "en": "Cambodia", "nl": "Cambodja", "pt": "Camboja", "no": "Kambodsja", "de": "Kambodscha", "it": "Cambogia", "sv": "Kambodja", "pl": "Kambod\u017ca", "fi": "Kambod\u017ea", "zh": "\u67ec\u57d4\u5be8", "ja": "\u30ab\u30f3\u30dc\u30b8\u30a2", "es": "Camboya"}, "label_fr": "Cambodge", "name": "Cambodia", "dbpedia_uri": "http://dbpedia.org/resource/Cambodia"}, "id": "KHM"}, {"geometry": {"type": "Polygon", "coordinates": [[[128.349716, 38.612242999999999], [129.21292, 37.432392], [129.46045000000001, 36.784188999999998], [129.46830399999999, 35.632140999999997], [129.09137699999999, 35.082484000000001], [128.18584999999999, 34.890377000000001], [127.38651900000001, 34.475673999999998], [126.485748, 34.390045999999998], [126.37392, 34.934559999999998], [126.559231, 35.684541000000003], [126.11739799999999, 36.725484999999999], [126.86014299999999, 36.893923999999998], [126.17475899999999, 37.749685999999997], [126.23733900000001, 37.840378000000001], [126.68371999999999, 37.804772999999997], [127.07330899999999, 38.256115000000001], [127.780035, 38.304535999999999], [128.205746, 38.370396999999997], [128.349716, 38.612242999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u041a\u043e\u0440\u0435\u044f", "fr": "Cor\u00e9e du Sud", "en": "South Korea", "nl": "Zuid-Korea", "pt": "Coreia do Sul", "no": "S\u00f8r-Korea", "de": "S\u00fcdkorea", "it": "Corea del Sud", "sv": "Sydkorea", "pl": "Korea Po\u0142udniowa", "fi": "Korean tasavalta", "zh": "\u5927\u97e9\u6c11\u56fd", "ja": "\u5927\u97d3\u6c11\u56fd", "es": "Corea del Sur"}, "label_fr": "Cor\u00e9e du Sud", "name": "South Korea", "dbpedia_uri": "http://dbpedia.org/resource/South_Korea"}, "id": "KOR"}, {"geometry": {"type": "Polygon", "coordinates": [[[20.762160000000002, 42.051859999999998], [20.717310000000001, 41.847110000000001], [20.590229999999998, 41.855409999999999], [20.522950000000002, 42.217869999999998], [20.283740000000002, 42.320250000000001], [20.070699999999999, 42.588630000000002], [20.257580000000001, 42.812750000000001], [20.496790000000001, 42.884689999999999], [20.635079999999999, 43.216709999999999], [20.81448, 43.27205], [20.956510000000002, 43.130940000000002], [21.143395000000002, 43.068685000000002], [21.27421, 42.909590000000001], [21.438659999999999, 42.862549999999999], [21.633019999999998, 42.677169999999997], [21.77505, 42.682699999999997], [21.66292, 42.439219999999999], [21.543320000000001, 42.320250000000001], [21.576636000000001, 42.245224], [21.352699999999999, 42.206800000000001], [20.762160000000002, 42.051859999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u043e\u0441\u043e\u0432\u043e (\u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0433\u0438\u043e\u043d)", "fr": "Kosovo", "en": "Kosovo", "nl": "Kosovo", "pt": "Kosovo", "no": "Kosovo", "de": "Kosovo", "it": "Kosovo", "sv": "Kosovo", "pl": "Kosowo", "fi": "Kosovo", "zh": "\u79d1\u7d22\u6c83", "ja": "\u30b3\u30bd\u30dc", "es": "Kosovo"}, "label_fr": "Kosovo", "name": "Kosovo", "dbpedia_uri": "http://dbpedia.org/resource/Kosovo"}, "id": "CS-KM"}, {"geometry": {"type": "Polygon", "coordinates": [[[47.974519000000001, 29.975819000000001], [48.183188999999999, 29.534476999999999], [48.093943000000003, 29.306298999999999], [48.416094000000001, 28.552004], [47.708851000000003, 28.526063000000001], [47.459822000000003, 29.002518999999999], [46.568713000000002, 29.099025000000001], [47.302622, 30.059069999999998], [47.974519000000001, 29.975819000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0443\u0432\u0435\u0439\u0442", "fr": "Kowe\u00eft", "en": "Kuwait", "nl": "Koeweit", "pt": "Kuwait", "no": "Kuwait", "de": "Kuwait", "it": "Kuwait", "sv": "Kuwait", "pl": "Kuwejt", "fi": "Kuwait", "zh": "\u79d1\u5a01\u7279", "ja": "\u30af\u30a6\u30a7\u30fc\u30c8", "es": "Kuwait"}, "label_fr": "Kowe\u00eft", "name": "Kuwait", "dbpedia_uri": "http://dbpedia.org/resource/Kuwait"}, "id": "KWT"}, {"geometry": {"type": "Polygon", "coordinates": [[[105.218777, 14.273211999999999], [105.544338, 14.723934], [105.589039, 15.570316], [104.779321, 16.441865], [104.716947, 17.428858999999999], [103.95647700000001, 18.240953999999999], [103.200192, 18.309632000000001], [102.998706, 17.961694999999999], [102.413005, 17.932782], [102.113592, 18.109102], [101.05954800000001, 17.512497], [101.03593100000001, 18.408928], [101.282015, 19.462585000000001], [100.60629400000001, 19.508344000000001], [100.54888099999999, 20.109238000000001], [100.115988, 20.417850000000001], [100.32910099999999, 20.786121999999999], [101.18000499999999, 21.436572999999999], [101.270026, 21.201651999999999], [101.80312000000001, 21.174367], [101.652018, 22.318199], [102.170436, 22.464753000000002], [102.754896, 21.675136999999999], [103.203861, 20.766562], [104.435, 20.758732999999999], [104.822574, 19.886641999999998], [104.18338799999999, 19.624668], [103.89653199999999, 19.265180999999998], [105.094598, 18.666975000000001], [105.92576200000001, 17.485315], [106.55600800000001, 16.604284], [107.31270600000001, 15.908538], [107.564525, 15.202173], [107.382727, 14.202441], [106.49637300000001, 14.570584], [106.04394600000001, 13.881091], [105.218777, 14.273211999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u0430\u043e\u0441", "fr": "Laos", "en": "Laos", "nl": "Laos", "pt": "Laos", "no": "Laos", "de": "Laos", "it": "Laos", "sv": "Laos", "pl": "Laos", "fi": "Laos", "zh": "\u8001\u631d", "ja": "\u30e9\u30aa\u30b9", "es": "Laos"}, "label_fr": "Laos", "name": "Laos", "dbpedia_uri": "http://dbpedia.org/resource/Laos"}, "id": "LAO"}, {"geometry": {"type": "Polygon", "coordinates": [[[35.821100999999999, 33.277425999999998], [35.552796999999998, 33.264274999999998], [35.460709000000001, 33.089039999999997], [35.126052999999999, 33.090899999999998], [35.482207000000002, 33.905450000000002], [35.979591999999997, 34.610058000000002], [35.998403000000003, 34.644914], [36.448194000000001, 34.593935000000002], [36.611750000000001, 34.201788999999998], [36.066459999999999, 33.824911999999998], [35.821100999999999, 33.277425999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u0438\u0432\u0430\u043d", "fr": "Liban", "en": "Lebanon", "nl": "Libanon", "pt": "L\u00edbano", "no": "Libanon", "de": "Libanon", "it": "Libano", "sv": "Libanon", "pl": "Liban", "fi": "Libanon", "zh": "\u9ece\u5df4\u5ae9", "ja": "\u30ec\u30d0\u30ce\u30f3", "es": "L\u00edbano"}, "label_fr": "Liban", "name": "Lebanon", "dbpedia_uri": "http://dbpedia.org/resource/Lebanon"}, "id": "LBN"}, {"geometry": {"type": "Polygon", "coordinates": [[[-7.7121589999999998, 4.3645659999999999], [-7.9741070000000001, 4.3557550000000003], [-9.0047940000000004, 4.8324189999999998], [-9.9134200000000003, 5.5935610000000002], [-10.765383999999999, 6.1407109999999996], [-11.438779, 6.7859170000000004], [-11.199802, 7.1058459999999997], [-11.146704, 7.396706], [-10.695595000000001, 7.9394640000000001], [-10.230093999999999, 8.4062059999999992], [-10.016567, 8.4285040000000002], [-9.7553420000000006, 8.5410550000000001], [-9.3372799999999998, 7.928534], [-9.4033479999999994, 7.5269050000000002], [-9.2087859999999999, 7.3139209999999997], [-8.9260649999999995, 7.309037], [-8.7221240000000009, 7.7116740000000004], [-8.4392980000000009, 7.6860429999999997], [-8.4854459999999996, 7.3952080000000002], [-8.3854520000000008, 6.9118009999999996], [-8.6028800000000007, 6.4675640000000003], [-8.3113480000000006, 6.1930329999999998], [-7.9936930000000004, 6.1261900000000002], [-7.5701530000000004, 5.7073520000000002], [-7.5397150000000002, 5.313345], [-7.6353679999999997, 5.1881589999999997], [-7.7121589999999998, 4.3645659999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u0438\u0431\u0435\u0440\u0438\u044f", "fr": "Liberia", "en": "Liberia", "nl": "Liberia", "pt": "Lib\u00e9ria", "no": "Liberia", "it": "Liberia", "sv": "Liberia", "pl": "Liberia", "fi": "Liberia", "zh": "\u5229\u6bd4\u91cc\u4e9a", "ja": "\u30ea\u30d9\u30ea\u30a2", "es": "Liberia"}, "label_fr": "Liberia", "name": "Liberia", "dbpedia_uri": "http://dbpedia.org/resource/Liberia"}, "id": "LBR"}, {"geometry": {"type": "Polygon", "coordinates": [[[14.8513, 22.862950000000001], [14.143871000000001, 22.491288999999998], [13.581424999999999, 23.040506000000001], [11.999506, 23.471668000000001], [11.560669000000001, 24.097909000000001], [10.771364, 24.562532000000001], [10.303846999999999, 24.379313], [9.9482610000000005, 24.936954], [9.9106930000000002, 25.365455000000001], [9.3194110000000006, 26.094325000000001], [9.7162860000000002, 26.512205999999999], [9.6290560000000003, 27.140953], [9.7561280000000004, 27.688258999999999], [9.6838850000000001, 28.144174], [9.8599979999999992, 28.959990000000001], [9.8056339999999995, 29.424638000000002], [9.4821399999999993, 30.307556000000002], [9.9700170000000004, 30.539325000000002], [10.056575, 30.961831], [9.9502249999999997, 31.376069999999999], [10.636901, 31.761420999999999], [10.944789999999999, 32.081814999999999], [11.432252999999999, 32.368903000000003], [11.488787, 33.136996000000003], [12.663309999999999, 32.79278], [13.083259999999999, 32.878819999999997], [13.91868, 32.711959999999998], [15.24563, 32.265079999999998], [15.713939999999999, 31.376259999999998], [16.611619999999998, 31.182179999999999], [18.021090000000001, 30.763570000000001], [19.086410000000001, 30.266390000000001], [19.57404, 30.52582], [20.053349999999998, 30.985759999999999], [19.820329999999998, 31.75179], [20.133970000000001, 32.238199999999999], [20.854520000000001, 32.706800000000001], [21.54298, 32.843200000000003], [22.895759999999999, 32.638579999999997], [23.236799999999999, 32.191490000000002], [23.60913, 32.187260000000002], [23.927499999999998, 32.016669999999998], [24.921140000000001, 31.899360000000001], [25.164819999999999, 31.56915], [24.802869999999999, 31.089289999999998], [24.957619999999999, 30.6616], [24.70007, 30.04419], [25, 29.238655000000001], [25, 25.682500000000001], [25, 22], [25, 20.003039999999999], [23.850000000000001, 20], [23.83766, 19.580469999999998], [19.849260000000001, 21.495090000000001], [15.860849999999999, 23.40972], [14.8513, 22.862950000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u0438\u0432\u0438\u044f", "fr": "Libye", "en": "Libya", "nl": "Libi\u00eb", "pt": "L\u00edbia", "no": "Libya", "de": "Libyen", "it": "Libia", "sv": "Libyen", "pl": "Libia", "fi": "Libya", "zh": "\u5229\u6bd4\u4e9a", "ja": "\u30ea\u30d3\u30a2", "es": "Libia"}, "label_fr": "Libye", "name": "Libya", "dbpedia_uri": "http://dbpedia.org/resource/Libya"}, "id": "LBY"}, {"geometry": {"type": "Polygon", "coordinates": [[[81.787959000000001, 7.5230550000000003], [81.637321999999998, 6.4817749999999998], [81.218019999999996, 6.1971410000000002], [80.348356999999993, 5.9683700000000002], [79.872468999999995, 6.7634629999999998], [79.695166999999998, 8.2008430000000008], [80.147801000000001, 9.8240780000000001], [80.838818000000003, 9.2684270000000009], [81.304319000000007, 8.5642060000000004], [81.787959000000001, 7.5230550000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0428\u0440\u0438-\u041b\u0430\u043d\u043a\u0430", "fr": "Sri Lanka", "en": "Sri Lanka", "nl": "Sri Lanka", "pt": "Sri Lanka", "no": "Sri Lanka", "de": "Sri Lanka", "it": "Sri Lanka", "sv": "Sri Lanka", "pl": "Sri Lanka", "fi": "Sri Lanka", "zh": "\u65af\u91cc\u862d\u5361", "ja": "\u30b9\u30ea\u30e9\u30f3\u30ab", "es": "Sri Lanka"}, "label_fr": "Sri Lanka", "name": "Sri Lanka", "dbpedia_uri": "http://dbpedia.org/resource/Sri_Lanka"}, "id": "LKA"}, {"geometry": {"type": "Polygon", "coordinates": [[[28.978262999999998, -28.955597000000001], [29.325165999999999, -29.257387000000001], [29.018415000000001, -29.743766000000001], [28.848400000000002, -30.070050999999999], [28.291069, -30.226216999999998], [28.107205, -30.545732000000001], [27.749396999999998, -30.645105999999998], [26.999262000000002, -29.875954], [27.532511, -29.242711], [28.074338000000001, -28.851469000000002], [28.541699999999999, -28.647501999999999], [28.978262999999998, -28.955597000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u0435\u0441\u043e\u0442\u043e", "fr": "Lesotho", "en": "Lesotho", "nl": "Lesotho", "pt": "Lesoto", "no": "Lesotho", "de": "Lesotho", "it": "Lesotho", "sv": "Lesotho", "pl": "Lesotho", "fi": "Lesotho", "zh": "\u83b1\u7d22\u6258", "ja": "\u30ec\u30bd\u30c8", "es": "Lesoto"}, "label_fr": "Lesotho", "name": "Lesotho", "dbpedia_uri": "http://dbpedia.org/resource/Lesotho"}, "id": "LSO"}, {"geometry": {"type": "Polygon", "coordinates": [[[22.731099, 54.327537], [22.651052, 54.582740999999999], [22.757764000000002, 54.856574000000002], [22.315723999999999, 55.015298999999999], [21.268449, 55.190482000000003], [21.055800000000001, 56.031075999999999], [22.201156999999998, 56.337802000000003], [23.878264000000001, 56.273671], [24.860683999999999, 56.372528000000003], [25.000934000000001, 56.164530999999997], [25.533047, 56.100296999999998], [26.494330999999999, 55.615107000000002], [26.588279, 55.167175999999998], [25.768433000000002, 54.846963000000002], [25.536353999999999, 54.282423000000001], [24.450683999999999, 53.905701999999998], [23.484127999999998, 53.912497999999999], [23.243987000000001, 54.220567000000003], [22.731099, 54.327537]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u0438\u0442\u0432\u0430", "fr": "Lituanie", "en": "Lithuania", "nl": "Litouwen", "pt": "Litu\u00e2nia", "no": "Litauen", "de": "Litauen", "it": "Lituania", "sv": "Litauen", "pl": "Litwa", "fi": "Liettua", "zh": "\u7acb\u9676\u5b9b", "ja": "\u30ea\u30c8\u30a2\u30cb\u30a2", "es": "Lituania"}, "label_fr": "Lituanie", "name": "Lithuania", "dbpedia_uri": "http://dbpedia.org/resource/Lithuania"}, "id": "LTU"}, {"geometry": {"type": "Polygon", "coordinates": [[[6.0430729999999997, 50.128051999999997], [6.2427510000000002, 49.902225999999999], [6.1863200000000003, 49.463802999999999], [5.8977589999999998, 49.442667], [5.6740519999999997, 49.529483999999997], [5.7824169999999997, 50.090328], [6.0430729999999997, 50.128051999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u044e\u043a\u0441\u0435\u043c\u0431\u0443\u0440\u0433", "fr": "Luxembourg (pays)", "en": "Luxembourg", "nl": "Luxemburg (land)", "pt": "Luxemburgo", "no": "Luxembourg", "de": "Luxemburg", "it": "Lussemburgo", "sv": "Luxemburg", "pl": "Luksemburg", "fi": "Luxemburg", "zh": "\u5362\u68ee\u5821", "ja": "\u30eb\u30af\u30bb\u30f3\u30d6\u30eb\u30af", "es": "Luxemburgo"}, "label_fr": "Luxembourg (pays)", "name": "Luxembourg", "dbpedia_uri": "http://dbpedia.org/resource/Luxembourg"}, "id": "LUX"}, {"geometry": {"type": "Polygon", "coordinates": [[[21.055800000000001, 56.031075999999999], [21.090423999999999, 56.783873], [21.581866000000002, 57.411870999999998], [22.524341, 57.753374000000001], [23.318453000000002, 57.006236000000001], [24.120729999999998, 57.025692999999997], [24.312863, 57.793424000000002], [25.164594000000001, 57.970157], [25.602810000000002, 57.847529000000002], [26.463532000000001, 57.476388999999998], [27.288184999999999, 57.474527999999999], [27.770015999999998, 57.244258000000002], [27.855281999999999, 56.759326000000001], [28.176708999999999, 56.169130000000003], [27.102460000000001, 55.783313999999997], [26.494330999999999, 55.615107000000002], [25.533047, 56.100296999999998], [25.000934000000001, 56.164530999999997], [24.860683999999999, 56.372528000000003], [23.878264000000001, 56.273671], [22.201156999999998, 56.337802000000003], [21.055800000000001, 56.031075999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041b\u0430\u0442\u0432\u0438\u044f", "fr": "Lettonie", "en": "Latvia", "nl": "Letland", "pt": "Let\u00f3nia", "no": "Latvia", "de": "Lettland", "it": "Lettonia", "sv": "Lettland", "pl": "\u0141otwa", "fi": "Latvia", "zh": "\u62c9\u812b\u7dad\u4e9e", "ja": "\u30e9\u30c8\u30d3\u30a2", "es": "Letonia"}, "label_fr": "Lettonie", "name": "Latvia", "dbpedia_uri": "http://dbpedia.org/resource/Latvia"}, "id": "LVA"}, {"geometry": {"type": "Polygon", "coordinates": [[[-5.1938630000000003, 35.755181999999998], [-4.5910060000000001, 35.330711999999998], [-3.6400570000000001, 35.399855000000002], [-2.6043059999999998, 35.179093000000002], [-2.1699139999999999, 35.168396000000001], [-1.792986, 34.527918999999997], [-1.733455, 33.919713000000002], [-1.3880490000000001, 32.864015000000002], [-1.1245510000000001, 32.651522], [-1.3078989999999999, 32.262889000000001], [-2.6166049999999998, 32.094346000000002], [-3.0689799999999998, 31.724498000000001], [-3.6474980000000001, 31.637294000000001], [-3.6904409999999999, 30.896951999999999], [-4.8596459999999997, 30.501187999999999], [-5.2421290000000003, 30.000443000000001], [-6.060632, 29.7317], [-7.0592280000000001, 29.579228000000001], [-8.6741159999999997, 28.841289], [-8.6655899999999999, 27.656426], [-8.8178090000000005, 27.656426], [-8.8178280000000004, 27.656426], [-8.7948839999999997, 27.120695999999999], [-9.4130369999999992, 27.088476], [-9.7353430000000003, 26.860945000000001], [-10.189424000000001, 26.860945000000001], [-10.551263000000001, 26.990808000000001], [-11.392555, 26.883424000000002], [-11.718220000000001, 26.104092000000001], [-12.030759, 26.030866], [-12.500963, 24.770116000000002], [-13.891109999999999, 23.691009000000001], [-14.221168, 22.310162999999999], [-14.630833000000001, 21.860939999999999], [-14.750954999999999, 21.500599999999999], [-17.002962, 21.420733999999999], [-17.020427999999999, 21.42231], [-16.973248000000002, 21.885745], [-16.589137000000001, 22.158234], [-16.261921999999998, 22.67934], [-16.326414, 23.017768], [-15.982611, 23.723358000000001], [-15.426004000000001, 24.359134000000001], [-15.089332000000001, 24.520261000000001], [-14.824645, 25.103532999999999], [-14.800926, 25.636265000000002], [-14.43994, 26.254418000000001], [-13.773804999999999, 26.618891999999999], [-13.139942, 27.640148], [-13.121613, 27.654147999999999], [-12.618836999999999, 28.038186], [-11.688919, 28.148644000000001], [-10.900957, 28.832142000000001], [-10.399592, 29.098586000000001], [-9.5648110000000006, 29.933574], [-9.8147179999999992, 31.177735999999999], [-9.4347930000000009, 32.038096000000003], [-9.3006930000000008, 32.564678999999998], [-8.6574760000000008, 33.240245000000002], [-7.6541779999999999, 33.697065000000002], [-6.9125439999999996, 34.110475999999998], [-6.2443419999999996, 35.145865000000001], [-5.9299939999999998, 35.759988], [-5.1938630000000003, 35.755181999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0430\u0440\u043e\u043a\u043a\u043e", "fr": "Maroc", "en": "Morocco", "nl": "Marokko", "pt": "Marrocos", "no": "Marokko", "de": "Marokko", "it": "Marocco", "sv": "Marocko", "pl": "Maroko", "fi": "Marokko", "zh": "\u6469\u6d1b\u54e5", "ja": "\u30e2\u30ed\u30c3\u30b3", "es": "Marruecos"}, "label_fr": "Maroc", "name": "Morocco", "dbpedia_uri": "http://dbpedia.org/resource/Morocco"}, "id": "MAR"}, {"geometry": {"type": "Polygon", "coordinates": [[[26.619337000000002, 48.220725999999999], [26.857824000000001, 48.368211000000002], [27.522537, 48.467118999999997], [28.259547000000001, 48.155562000000003], [28.670891000000001, 48.118149000000003], [29.122698, 47.849094999999998], [29.050868000000001, 47.510227], [29.415134999999999, 47.346645000000002], [29.559674000000001, 46.928583000000003], [29.908852, 46.674360999999998], [29.83821, 46.525326], [30.024659, 46.423937000000002], [29.759972000000001, 46.349988000000003], [29.170653999999999, 46.379261999999997], [29.072106999999999, 46.517677999999997], [28.862971999999999, 46.437888999999998], [28.933717000000001, 46.258830000000003], [28.659987000000001, 45.939987000000002], [28.485268999999999, 45.596907000000002], [28.233554000000002, 45.488283000000003], [28.054442999999999, 45.944586000000001], [28.160018000000001, 46.371563000000002], [28.128029999999999, 46.810476000000001], [27.551165999999998, 47.405116999999997], [27.233872999999999, 47.826771000000001], [26.924175999999999, 48.123263999999999], [26.619337000000002, 48.220725999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u043e\u043b\u0434\u0430\u0432\u0438\u044f", "fr": "Moldavie", "en": "Moldova", "nl": "Moldavi\u00eb (land)", "pt": "Mold\u00e1via", "no": "Moldova", "de": "Moldawien", "it": "Moldavia", "sv": "Moldavien", "pl": "Mo\u0142dawia", "fi": "Moldova", "zh": "\u6469\u5c14\u591a\u74e6", "ja": "\u30e2\u30eb\u30c9\u30d0", "es": "Moldavia"}, "label_fr": "Moldavie", "name": "Moldova", "dbpedia_uri": "http://dbpedia.org/resource/Moldova"}, "id": "MDA"}, {"geometry": {"type": "Polygon", "coordinates": [[[49.543519000000003, -12.469833], [49.808981000000003, -12.895284999999999], [50.056511, -13.555761], [50.217430999999998, -14.758789], [50.476537, -15.226512], [50.377110999999999, -15.706068999999999], [50.200274999999998, -16.000263], [49.860605999999997, -15.414253], [49.672606999999999, -15.710203999999999], [49.863343999999998, -16.451036999999999], [49.774563999999998, -16.875042000000001], [49.498612000000001, -17.106036], [49.435619000000003, -17.953064000000001], [49.041792000000001, -19.118780999999998], [48.548541, -20.496887999999998], [47.930748999999999, -22.391501000000002], [47.547722999999998, -23.781959000000001], [47.095761000000003, -24.94163], [46.282477999999998, -25.178463000000001], [45.409508000000002, -25.601434000000001], [44.833573999999999, -25.346101000000001], [44.039720000000003, -24.988344999999999], [43.763767999999999, -24.460677], [43.697778, -23.574116], [43.345654000000003, -22.776903999999998], [43.254187000000002, -22.057413], [43.433298000000001, -21.336475], [43.893683000000003, -21.163307], [43.896369999999997, -20.830459000000001], [44.374324999999999, -20.072365999999999], [44.464396999999998, -19.435454], [44.232422, -18.961995000000002], [44.042976000000003, -18.331386999999999], [43.963084000000002, -17.409945], [44.312469, -16.850496], [44.446517, -16.216218999999999], [44.944937000000003, -16.179373999999999], [45.502732000000002, -15.974373], [45.872993999999998, -15.793454000000001], [46.312243000000002, -15.780018], [46.882182999999998, -15.210182], [47.705129999999997, -14.594303], [48.005215, -14.091233000000001], [47.869047000000002, -13.663869], [48.293827999999998, -13.784068], [48.845059999999997, -13.089174999999999], [48.863509000000001, -12.487868000000001], [49.194651, -12.040557], [49.543519000000003, -12.469833]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0430\u0434\u0430\u0433\u0430\u0441\u043a\u0430\u0440", "fr": "Madagascar", "en": "Madagascar", "nl": "Madagaskar", "pt": "Madag\u00e1scar", "no": "Madagaskar", "de": "Madagaskar", "it": "Madagascar", "sv": "Madagaskar", "pl": "Madagaskar", "fi": "Madagaskar", "zh": "\u9a6c\u8fbe\u52a0\u65af\u52a0", "ja": "\u30de\u30c0\u30ac\u30b9\u30ab\u30eb", "es": "Madagascar"}, "label_fr": "Madagascar", "name": "Madagascar", "dbpedia_uri": "http://dbpedia.org/resource/Madagascar"}, "id": "MDG"}, {"geometry": {"type": "Polygon", "coordinates": [[[-97.140007999999995, 25.869997000000001], [-97.528071999999995, 24.992144], [-97.702945999999997, 24.272342999999999], [-97.776042000000004, 22.932580000000002], [-97.872366999999997, 22.444212], [-97.699044000000001, 21.898689000000001], [-97.388959999999997, 21.411019], [-97.189333000000005, 20.635432999999999], [-96.525576000000001, 19.890930999999998], [-96.292126999999994, 19.320371000000002], [-95.900885000000002, 18.828023999999999], [-94.839062999999996, 18.562716999999999], [-94.425730000000001, 18.144371], [-93.548651000000007, 18.423836999999999], [-92.786113999999998, 18.524839], [-92.037347999999994, 18.704568999999999], [-91.407903000000005, 18.876083000000001], [-90.771870000000007, 19.284120000000001], [-90.533590000000004, 19.867418000000001], [-90.451476, 20.707522000000001], [-90.278617999999994, 20.999855], [-89.601320999999999, 21.261725999999999], [-88.543865999999994, 21.493675], [-87.658417, 21.458846000000001], [-87.05189, 21.543543], [-86.811982, 21.331515], [-86.845907999999994, 20.849865000000001], [-87.383291, 20.255405], [-87.621054000000001, 19.646553000000001], [-87.436750000000004, 19.472403], [-87.586560000000006, 19.040130000000001], [-87.837191000000004, 18.259816000000001], [-88.090664000000004, 18.516648], [-88.300031000000004, 18.499981999999999], [-88.490122999999997, 18.486830999999999], [-88.848343999999997, 17.883198], [-89.029857000000007, 18.001511000000001], [-89.150908999999999, 17.955468], [-89.143079999999998, 17.808319000000001], [-90.067933999999994, 17.819326], [-91.001519999999999, 17.817595000000001], [-91.002268999999998, 17.254657999999999], [-91.453920999999994, 17.252177], [-91.081670000000003, 16.918476999999999], [-90.711821999999998, 16.687483], [-90.600847000000002, 16.470777999999999], [-90.438867000000002, 16.41011], [-90.464472999999998, 16.069562000000001], [-91.747960000000006, 16.066565000000001], [-92.229248999999996, 15.251447000000001], [-92.087215999999998, 15.064584999999999], [-92.203230000000005, 14.830102999999999], [-92.22775, 14.538829], [-93.359464000000003, 15.61543], [-93.875169, 15.940163999999999], [-94.691655999999995, 16.200975], [-95.250226999999995, 16.128318], [-96.053381999999999, 15.752088000000001], [-96.557434000000001, 15.653515000000001], [-97.263592000000003, 15.917064999999999], [-98.013030000000001, 16.107312], [-98.947676000000001, 16.566043000000001], [-99.697396999999995, 16.706164000000001], [-100.829499, 17.171071000000001], [-101.666089, 17.649025999999999], [-101.91852799999999, 17.916090000000001], [-102.478132, 17.975750999999999], [-103.50099, 18.292294999999999], [-103.91752700000001, 18.748571999999999], [-104.99200999999999, 19.316134000000002], [-105.493038, 19.946767000000001], [-105.731396, 20.434101999999999], [-105.397773, 20.531718999999999], [-105.50066099999999, 20.816894999999999], [-105.270752, 21.076284999999999], [-105.265817, 21.422104000000001], [-105.603161, 21.871146], [-105.693414, 22.269079999999999], [-106.028716, 22.773752000000002], [-106.90998, 23.767773999999999], [-107.915449, 24.548915000000001], [-108.401905, 25.172314], [-109.260199, 25.580608999999999], [-109.44408900000001, 25.824884000000001], [-109.29164400000001, 26.442934000000001], [-109.801458, 26.676176000000002], [-110.391732, 27.162115], [-110.641019, 27.859876], [-111.17891899999999, 27.941241000000002], [-111.759607, 28.467953000000001], [-112.228235, 28.954408999999998], [-112.271824, 29.266843999999999], [-112.809594, 30.021114000000001], [-113.163811, 30.786881000000001], [-113.148669, 31.170966], [-113.871881, 31.567608], [-114.205737, 31.524045000000001], [-114.77645099999999, 31.799531999999999], [-114.9367, 31.393484999999998], [-114.771232, 30.913616999999999], [-114.67389900000001, 30.162680999999999], [-114.330974, 29.750432], [-113.588875, 29.061610999999999], [-113.424053, 28.826174000000002], [-113.271969, 28.754783], [-113.140039, 28.411289], [-112.962298, 28.425190000000001], [-112.76158700000001, 27.780217], [-112.457911, 27.525814], [-112.244952, 27.171727000000001], [-111.616489, 26.662817], [-111.28467499999999, 25.732589999999998], [-110.987819, 25.294606000000002], [-110.710007, 24.826004000000001], [-110.65504900000001, 24.298594999999999], [-110.172856, 24.265547999999999], [-109.77184699999999, 23.811183], [-109.409104, 23.364671999999999], [-109.433392, 23.185587999999999], [-109.854219, 22.818272], [-110.031392, 22.823077999999999], [-110.29507099999999, 23.430973000000002], [-110.949501, 24.000964], [-111.670568, 24.484423], [-112.182036, 24.738413000000001], [-112.148989, 25.470124999999999], [-112.30071100000001, 26.012004000000001], [-112.777297, 26.321960000000001], [-113.464671, 26.768186], [-113.59672999999999, 26.63946], [-113.84893700000001, 26.900064], [-114.46574699999999, 27.14209], [-115.055142, 27.722726999999999], [-114.982253, 27.798200000000001], [-114.57036600000001, 27.741485000000001], [-114.19932900000001, 28.115003000000002], [-114.162018, 28.566112], [-114.931842, 29.279478999999998], [-115.518654, 29.556362], [-115.887365, 30.180793999999999], [-116.25834999999999, 30.836463999999999], [-116.721526, 31.635743999999999], [-117.12775999999999, 32.535339999999998], [-115.99135, 32.612389999999998], [-114.72139, 32.720829999999999], [-114.815, 32.525280000000002], [-113.30498, 32.039140000000003], [-111.02361000000001, 31.334720000000001], [-109.035, 31.341940000000001], [-108.24194, 31.342220000000001], [-108.23999999999999, 31.754854000000002], [-106.50758999999999, 31.754519999999999], [-106.1429, 31.39995], [-105.63159, 31.083829999999999], [-105.03737, 30.644020000000001], [-104.70574999999999, 30.121729999999999], [-104.45697, 29.571960000000001], [-103.94, 29.27], [-103.11, 28.969999999999999], [-102.48, 29.760000000000002], [-101.66240000000001, 29.779299999999999], [-100.9576, 29.380710000000001], [-100.45583999999999, 28.696120000000001], [-100.11, 28.109999999999999], [-99.519999999999996, 27.539999999999999], [-99.299999999999997, 26.84], [-99.019999999999996, 26.370000000000001], [-98.239999999999995, 26.059999999999999], [-97.530000000000001, 25.84], [-97.140007999999995, 25.869997000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0435\u043a\u0441\u0438\u043a\u0430", "fr": "Mexique", "en": "Mexico", "nl": "Mexico (land)", "pt": "M\u00e9xico", "no": "Mexico", "de": "Mexiko", "it": "Messico", "sv": "Mexiko", "pl": "Meksyk", "fi": "Meksiko", "zh": "\u58a8\u897f\u54e5", "ja": "\u30e1\u30ad\u30b7\u30b3", "es": "M\u00e9xico"}, "label_fr": "Mexique", "name": "Mexico", "dbpedia_uri": "http://dbpedia.org/resource/Mexico"}, "id": "MEX"}, {"geometry": {"type": "Polygon", "coordinates": [[[20.590229999999998, 41.855409999999999], [20.717310000000001, 41.847110000000001], [20.762160000000002, 42.051859999999998], [21.352699999999999, 42.206800000000001], [21.576636000000001, 42.245224], [21.917079999999999, 42.303640000000001], [22.380526, 42.320259999999998], [22.881374000000001, 41.999296999999999], [22.952376999999998, 41.337994000000002], [22.761769999999999, 41.3048], [22.597308000000002, 41.130487000000002], [22.055378000000001, 41.149866000000003], [21.674161000000002, 40.931274999999999], [21.020040000000002, 40.842726999999996], [20.605180000000001, 41.086219999999997], [20.463149999999999, 41.515090000000001], [20.590229999999998, 41.855409999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0430\u043a\u0435\u0434\u043e\u043d\u0438\u044f", "fr": "Mac\u00e9doine", "en": "Macedonia", "nl": "Macedoni\u00eb", "pt": "Maced\u00f3nia", "no": "Makedonia", "de": "Mazedonien (Begriffskl\u00e4rung)", "it": "Macedonia", "sv": "Makedonien (olika betydelser)", "pl": "Macedonia (ujednoznacznienie)", "fi": "Makedonia (t\u00e4smennyssivu)", "zh": "\u99ac\u5176\u9813 (\u6d88\u6b67\u7fa9)", "ja": "\u30de\u30b1\u30c9\u30cb\u30a2 (\u66d6\u6627\u3055\u56de\u907f)", "es": "Macedonia"}, "label_fr": "Mac\u00e9doine", "name": "Macedonia", "dbpedia_uri": "http://dbpedia.org/resource/Macedonia"}, "id": "MKD"}, {"geometry": {"type": "Polygon", "coordinates": [[[-12.17075, 14.616834000000001], [-11.834208, 14.799097], [-11.666078000000001, 15.388208000000001], [-11.349095, 15.411256], [-10.650791, 15.132745999999999], [-10.086846, 15.330486000000001], [-9.7002550000000003, 15.264106999999999], [-9.5502380000000002, 15.486497], [-5.537744, 15.50169], [-5.315277, 16.201854000000001], [-5.4885229999999998, 16.325102000000001], [-5.9711290000000004, 20.640833000000001], [-6.4537870000000002, 24.956591], [-4.9233370000000001, 24.974574], [-1.550055, 22.792666000000001], [1.8232280000000001, 20.610809], [2.060991, 20.142233000000001], [2.6835879999999999, 19.85623], [3.1466609999999999, 19.693579], [3.1581329999999999, 19.057364], [4.2674190000000003, 19.155265], [4.2702099999999996, 16.852226999999999], [3.7234219999999998, 16.184284000000002], [3.6382590000000001, 15.56812], [2.7499929999999999, 15.409525], [1.3855280000000001, 15.323561], [1.0157830000000001, 14.968182000000001], [0.374892, 14.928908], [-0.26625700000000002, 14.924308999999999], [-0.51585400000000003, 15.116158], [-1.0663629999999999, 14.973815], [-2.0010349999999999, 14.559008], [-2.1918250000000001, 14.246418], [-2.9676939999999998, 13.79815], [-3.103707, 13.541266999999999], [-3.5228030000000001, 13.337662], [-4.0063909999999998, 13.472485000000001], [-4.280405, 13.228444], [-4.4271659999999997, 12.542646], [-5.220942, 11.713858999999999], [-5.1978429999999998, 11.375146000000001], [-5.4705649999999997, 10.951269999999999], [-5.4043419999999998, 10.370737], [-5.8169259999999996, 10.222555], [-6.0504519999999999, 10.096361], [-6.2052230000000002, 10.524061], [-6.4939650000000002, 10.411303], [-6.666461, 10.430811], [-6.8505070000000003, 10.138994], [-7.6227590000000003, 10.147235999999999], [-7.8995899999999999, 10.297382000000001], [-8.0299440000000004, 10.206535000000001], [-8.3353769999999994, 10.494812], [-8.2823569999999993, 10.792597000000001], [-8.407311, 10.909257], [-8.6203210000000006, 10.810891], [-8.5813050000000004, 11.136246], [-8.3763050000000003, 11.393646], [-8.7860990000000001, 11.812561000000001], [-8.905265, 12.088357999999999], [-9.1274739999999994, 12.308059999999999], [-9.3276160000000008, 12.334286000000001], [-9.5679119999999998, 12.194243], [-9.8909929999999999, 12.060479000000001], [-10.165214000000001, 11.844084000000001], [-10.593223999999999, 11.923975], [-10.87083, 12.177887], [-11.036555999999999, 12.211245], [-11.297573999999999, 12.077971], [-11.456168999999999, 12.076834], [-11.513942999999999, 12.442988], [-11.467898999999999, 12.754519], [-11.553398, 13.141214], [-11.927716, 13.422075], [-12.124886999999999, 13.994726999999999], [-12.17075, 14.616834000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0430\u043b\u0438", "fr": "Mali", "en": "Mali", "nl": "Mali", "pt": "Mali", "no": "Mali", "de": "Mali", "it": "Mali", "sv": "Mali", "pl": "Mali", "fi": "Mali", "zh": "\u9a6c\u91cc\u5171\u548c\u56fd", "ja": "\u30de\u30ea\u5171\u548c\u56fd", "es": "Mal\u00ed"}, "label_fr": "Mali", "name": "Mali", "dbpedia_uri": "http://dbpedia.org/resource/Mali"}, "id": "MLI"}, {"geometry": {"type": "Polygon", "coordinates": [[[99.543308999999994, 20.186598], [98.959676000000002, 19.752980999999998], [98.253724000000005, 19.708203000000001], [97.797782999999995, 18.627079999999999], [97.375895999999997, 18.445437999999999], [97.859122999999997, 17.567945999999999], [98.493761000000006, 16.837835999999999], [98.903347999999994, 16.177824000000001], [98.537375999999995, 15.308496999999999], [98.192074000000005, 15.123703000000001], [98.430819, 14.622028], [99.097755000000006, 13.827503], [99.212012000000001, 13.269294], [99.196353999999999, 12.804748], [99.587286000000006, 11.892763], [99.038121000000004, 10.960546000000001], [98.553550999999999, 9.9329599999999996], [98.457173999999995, 10.675266000000001], [98.764545999999996, 11.441292000000001], [98.428338999999994, 12.032987], [98.509574000000001, 13.122377999999999], [98.103604000000004, 13.640459999999999], [97.777732, 14.837286000000001], [97.597071999999997, 16.100567999999999], [97.164540000000002, 16.928733999999999], [96.505769000000001, 16.427240999999999], [95.369352000000006, 15.71439], [94.808404999999993, 15.803454], [94.188804000000005, 16.037935999999998], [94.533485999999996, 17.277239999999999], [94.324816999999996, 18.213514], [93.540987999999999, 19.366492999999998], [93.663255000000007, 19.726962], [93.078277999999997, 19.855145], [92.368554000000003, 20.670883], [92.303234000000003, 21.475484999999999], [92.652257000000006, 21.324048000000001], [92.672720999999996, 22.041239000000001], [93.166128, 22.278459999999999], [93.060293999999999, 22.703111], [93.286327, 23.043658000000001], [93.325187999999997, 24.078555999999999], [94.106741999999997, 23.850740999999999], [94.552657999999994, 24.675238], [94.603249000000005, 25.162495], [95.155152999999999, 26.001307000000001], [95.124768000000003, 26.573571999999999], [96.419365999999997, 27.264589000000001], [97.133999000000003, 27.083773999999998], [97.051989000000006, 27.699058999999998], [97.402561000000006, 27.882536000000002], [97.327113999999995, 28.261583000000002], [97.911987999999994, 28.335944999999999], [98.246230999999995, 27.747221], [98.682689999999994, 27.508811999999999], [98.712093999999993, 26.743535999999999], [98.671837999999994, 25.918703000000001], [97.724609000000001, 25.083637], [97.60472, 23.897404999999999], [98.660262000000003, 24.063286000000002], [98.898748999999995, 23.142721999999999], [99.531992000000002, 22.949038999999999], [99.240898999999999, 22.118314000000002], [99.983489000000006, 21.742937000000001], [100.416538, 21.558838999999999], [101.15003299999999, 21.849983999999999], [101.18000499999999, 21.436572999999999], [100.32910099999999, 20.786121999999999], [100.115988, 20.417850000000001], [99.543308999999994, 20.186598]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u044c\u044f\u043d\u043c\u0430", "fr": "Birmanie", "en": "Burma", "nl": "Myanmar", "pt": "Myanmar", "no": "Burma", "de": "Myanmar", "it": "Birmania", "sv": "Burma", "pl": "Birma", "fi": "Myanmar", "zh": "\u7f05\u7538", "ja": "\u30df\u30e3\u30f3\u30de\u30fc", "es": "Birmania"}, "label_fr": "Birmanie", "name": "Myanmar", "dbpedia_uri": "http://dbpedia.org/resource/Burma"}, "id": "MMR"}, {"geometry": {"type": "Polygon", "coordinates": [[[19.801613, 42.500093], [19.738050999999999, 42.688246999999997], [19.304490000000001, 42.195740000000001], [19.371770000000001, 41.877549999999999], [19.162459999999999, 41.955019999999998], [18.88214, 42.281509999999997], [18.449999999999999, 42.479999999999997], [18.559999999999999, 42.649999999999999], [18.706479999999999, 43.200110000000002], [19.031649999999999, 43.43253], [19.218520000000002, 43.52384], [19.483889999999999, 43.352290000000004], [19.629999999999999, 43.21378], [19.958570000000002, 43.10604], [20.3398, 42.898519999999998], [20.257580000000001, 42.812750000000001], [20.070699999999999, 42.588630000000002], [19.801613, 42.500093]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0427\u0435\u0440\u043d\u043e\u0433\u043e\u0440\u0438\u044f", "fr": "Mont\u00e9n\u00e9gro", "en": "Montenegro", "nl": "Montenegro", "pt": "Montenegro", "no": "Montenegro", "de": "Montenegro", "it": "Montenegro", "sv": "Montenegro", "pl": "Czarnog\u00f3ra", "fi": "Montenegro", "zh": "\u8499\u7279\u5167\u54e5\u7f85", "ja": "\u30e2\u30f3\u30c6\u30cd\u30b0\u30ed", "es": "Montenegro"}, "label_fr": "Mont\u00e9n\u00e9gro", "name": "Montenegro", "dbpedia_uri": "http://dbpedia.org/resource/Montenegro"}, "id": "MNE"}, {"geometry": {"type": "Polygon", "coordinates": [[[87.751264000000006, 49.297198000000002], [88.805566999999996, 49.470520999999998], [90.713667000000001, 50.331811999999999], [92.234712000000002, 50.802171000000001], [93.104219000000001, 50.495289999999997], [94.147565999999998, 50.480536999999998], [94.815949000000003, 50.013432999999999], [95.814027999999993, 49.977466999999997], [97.259727999999996, 49.726061000000001], [98.231762000000003, 50.422401000000001], [97.825739999999996, 51.010995000000001], [98.861491000000001, 52.047365999999997], [99.981731999999994, 51.634005999999999], [100.88948000000001, 51.516855999999997], [102.065223, 51.259920999999999], [102.255909, 50.510561000000003], [103.676545, 50.089965999999997], [104.62155199999999, 50.275328999999999], [105.886591, 50.406019000000001], [106.88880399999999, 50.274296], [107.86817600000001, 49.793705000000003], [108.475167, 49.282547999999998], [109.402449, 49.292960999999998], [110.66201100000001, 49.130127999999999], [111.581231, 49.377968000000003], [112.89774, 49.543565000000001], [114.36245599999999, 50.248303], [114.96211, 50.140247000000002], [115.48569500000001, 49.805177], [116.67880100000001, 49.888531], [116.191802, 49.134597999999997], [115.485282, 48.135382999999997], [115.74283699999999, 47.726545000000002], [116.308953, 47.853409999999997], [117.295507, 47.697709000000003], [118.064143, 48.06673], [118.866574, 47.747059999999998], [119.772824, 47.048059000000002], [119.66327, 46.692680000000003], [118.874326, 46.805411999999997], [117.421701, 46.672733000000001], [116.717868, 46.388202], [115.985096, 45.727235], [114.46033199999999, 45.339816999999996], [113.46390700000001, 44.808892999999998], [112.43606200000001, 45.011645999999999], [111.873306, 45.102079000000003], [111.348377, 44.457442], [111.667737, 44.073175999999997], [111.829588, 43.743118000000003], [111.129682, 43.406834000000003], [110.412103, 42.871234000000001], [109.243596, 42.519446000000002], [107.744773, 42.481515999999999], [106.129316, 42.134327999999996], [104.964994, 41.597410000000004], [104.522282, 41.908346999999999], [103.31227800000001, 41.907468000000001], [101.83304, 42.514873000000001], [100.845866, 42.663803999999999], [99.515816999999998, 42.524690999999997], [97.451757000000001, 42.748890000000003], [96.349395999999999, 42.725634999999997], [95.762455000000003, 43.319448999999999], [95.306875000000005, 44.241331000000002], [94.688929000000002, 44.352331999999997], [93.480733999999998, 44.975472000000003], [92.133891000000006, 45.115076000000002], [90.945539999999994, 45.286073000000002], [90.585768000000002, 45.719715999999998], [90.970809000000003, 46.888145999999999], [90.280826000000005, 47.693548999999997], [88.854298, 48.069082000000002], [88.013831999999994, 48.599463], [87.751264000000006, 49.297198000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u043e\u043d\u0433\u043e\u043b\u0438\u044f", "fr": "Mongolie", "en": "Mongolia", "nl": "Mongoli\u00eb", "pt": "Mong\u00f3lia", "no": "Mongolia", "de": "Mongolei", "it": "Mongolia", "sv": "Mongoliet", "pl": "Mongolia", "fi": "Mongolia", "zh": "\u8499\u53e4\u56fd", "ja": "\u30e2\u30f3\u30b4\u30eb\u56fd", "es": "Mongolia"}, "label_fr": "Mongolie", "name": "Mongolia", "dbpedia_uri": "http://dbpedia.org/resource/Mongolia"}, "id": "MNG"}, {"geometry": {"type": "Polygon", "coordinates": [[[34.559989000000002, -11.520020000000001], [35.312398000000002, -11.439145999999999], [36.514082000000002, -11.720938], [36.775151000000001, -11.594537000000001], [37.471283999999997, -11.568751000000001], [37.827644999999997, -11.268769000000001], [38.427557, -11.285202], [39.521030000000003, -10.896853999999999], [40.316589, -10.317095999999999], [40.478386999999998, -10.765440999999999], [40.437252999999998, -11.761711], [40.560811000000001, -12.639177], [40.599620000000002, -14.201974999999999], [40.775475, -14.691763999999999], [40.477251000000003, -15.406294000000001], [40.089264, -16.100774000000001], [39.452559000000001, -16.720891000000002], [38.538350999999999, -17.101023000000001], [37.411133, -17.586368], [36.281278999999998, -18.659687999999999], [35.896496999999997, -18.84226], [35.198399999999999, -19.552810999999998], [34.786383000000001, -19.784012000000001], [34.701892999999998, -20.497043000000001], [35.176127000000001, -21.254360999999999], [35.373427999999997, -21.840837000000001], [35.385848000000003, -22.140000000000001], [35.562545999999998, -22.09], [35.533935, -23.070788], [35.371774000000002, -23.535359], [35.607469999999999, -23.706562999999999], [35.458745999999998, -24.122610000000002], [35.040734999999998, -24.478351], [34.215823999999998, -24.816313999999998], [33.013210000000001, -25.357572999999999], [32.574632000000001, -25.727318], [32.660362999999997, -26.148584], [32.915954999999997, -26.215866999999999], [32.830120000000001, -26.742191999999999], [32.071665000000003, -26.733820000000001], [31.985779000000001, -26.291779999999999], [31.837778, -25.843332], [31.752407999999999, -25.484283999999999], [31.930589000000001, -24.369416999999999], [31.670397999999999, -23.658968999999999], [31.191409, -22.25151], [32.244987999999999, -21.116489000000001], [32.508693000000001, -20.395292000000001], [32.659742999999999, -20.304290000000002], [32.772708000000002, -19.715592000000001], [32.611994000000003, -19.419383], [32.654885999999998, -18.672090000000001], [32.849860999999997, -17.979057000000001], [32.847639000000001, -16.713398000000002], [32.328239000000004, -16.392074000000001], [31.852041, -16.319417000000001], [31.636498, -16.07199], [31.173064, -15.860944], [30.338954999999999, -15.880839], [30.274256000000001, -15.507787], [30.179480999999999, -14.796099], [33.214024999999999, -13.97186], [33.789700000000003, -14.451831], [34.064824999999999, -14.35995], [34.459632999999997, -14.613009999999999], [34.517665999999998, -15.013709], [34.307290999999999, -15.478641], [34.381292000000002, -16.18356], [35.033810000000003, -16.801300000000001], [35.339063000000003, -16.10744], [35.771904999999997, -15.896858999999999], [35.686844999999998, -14.611046], [35.267955999999998, -13.887834], [34.907150999999999, -13.565424999999999], [34.559989000000002, -13.579998], [34.280006, -12.280025], [34.559989000000002, -11.520020000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u043e\u0437\u0430\u043c\u0431\u0438\u043a", "fr": "Mozambique", "en": "Mozambique", "nl": "Mozambique", "pt": "Mo\u00e7ambique", "no": "Mosambik", "de": "Mosambik", "it": "Mozambico", "sv": "Mo\u00e7ambique", "pl": "Mozambik", "fi": "Mosambik", "zh": "\u83ab\u6851\u6bd4\u514b", "ja": "\u30e2\u30b6\u30f3\u30d3\u30fc\u30af", "es": "Mozambique"}, "label_fr": "Mozambique", "name": "Mozambique", "dbpedia_uri": "http://dbpedia.org/resource/Mozambique"}, "id": "MOZ"}, {"geometry": {"type": "Polygon", "coordinates": [[[-12.17075, 14.616834000000001], [-12.830658, 15.303692], [-13.435738000000001, 16.039383000000001], [-14.099520999999999, 16.304302], [-14.577348000000001, 16.598264], [-15.135737000000001, 16.587281999999998], [-15.623666, 16.369337000000002], [-16.12069, 16.455663000000001], [-16.463097999999999, 16.135035999999999], [-16.549707999999999, 16.673891999999999], [-16.270551999999999, 17.166962999999999], [-16.146346999999999, 18.108481999999999], [-16.256882999999998, 19.096716000000001], [-16.377651, 19.593817000000001], [-16.277837999999999, 20.092521000000001], [-16.536324, 20.567865999999999], [-17.063423, 20.999752000000001], [-16.845193999999999, 21.333323], [-12.929102, 21.327071], [-13.118753999999999, 22.77122], [-12.874222, 23.284832000000002], [-11.937224000000001, 23.374593999999998], [-11.969419, 25.933353], [-8.6872939999999996, 25.881056000000001], [-8.6844000000000001, 27.395744000000001], [-4.9233370000000001, 24.974574], [-6.4537870000000002, 24.956591], [-5.9711290000000004, 20.640833000000001], [-5.4885229999999998, 16.325102000000001], [-5.315277, 16.201854000000001], [-5.537744, 15.50169], [-9.5502380000000002, 15.486497], [-9.7002550000000003, 15.264106999999999], [-10.086846, 15.330486000000001], [-10.650791, 15.132745999999999], [-11.349095, 15.411256], [-11.666078000000001, 15.388208000000001], [-11.834208, 14.799097], [-12.17075, 14.616834000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0430\u0432\u0440\u0438\u0442\u0430\u043d\u0438\u044f", "fr": "Mauritanie", "en": "Mauritania", "nl": "Mauritani\u00eb", "pt": "Maurit\u00e2nia", "no": "Mauritania", "de": "Mauretanien", "it": "Mauritania", "sv": "Mauretanien", "pl": "Mauretania", "fi": "Mauritania", "zh": "\u6bdb\u91cc\u5854\u5c3c\u4e9a", "ja": "\u30e2\u30fc\u30ea\u30bf\u30cb\u30a2", "es": "Mauritania"}, "label_fr": "Mauritanie", "name": "Mauritania", "dbpedia_uri": "http://dbpedia.org/resource/Mauritania"}, "id": "MRT"}, {"geometry": {"type": "Polygon", "coordinates": [[[34.559989000000002, -11.520020000000001], [34.280006, -12.280025], [34.559989000000002, -13.579998], [34.907150999999999, -13.565424999999999], [35.267955999999998, -13.887834], [35.686844999999998, -14.611046], [35.771904999999997, -15.896858999999999], [35.339063000000003, -16.10744], [35.033810000000003, -16.801300000000001], [34.381292000000002, -16.18356], [34.307290999999999, -15.478641], [34.517665999999998, -15.013709], [34.459632999999997, -14.613009999999999], [34.064824999999999, -14.35995], [33.789700000000003, -14.451831], [33.214024999999999, -13.97186], [32.688164999999998, -13.712858000000001], [32.991764000000003, -12.783871], [33.306421999999998, -12.435778000000001], [33.114288999999999, -11.607198], [33.315309999999997, -10.79655], [33.485688000000003, -10.525558999999999], [33.231388000000003, -9.6767219999999998], [32.759374999999999, -9.2305989999999998], [33.739728999999997, -9.4171510000000005], [33.940837999999999, -9.6936739999999997], [34.280006, -10.16], [34.559989000000002, -11.520020000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0430\u043b\u0430\u0432\u0438", "fr": "Malawi", "en": "Malawi", "nl": "Malawi", "pt": "Malawi", "no": "Malawi", "de": "Malawi", "it": "Malawi", "sv": "Malawi", "pl": "Malawi", "fi": "Malawi", "zh": "\u9a6c\u62c9\u7ef4", "ja": "\u30de\u30e9\u30a6\u30a4", "es": "Malaui"}, "label_fr": "Malawi", "name": "Malawi", "dbpedia_uri": "http://dbpedia.org/resource/Malawi"}, "id": "MWI"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[101.07551599999999, 6.2048670000000001], [101.154219, 5.6913840000000002], [101.81428200000001, 5.8108079999999998], [102.141187, 6.2216360000000002], [102.37114699999999, 6.1282050000000003], [102.96170499999999, 5.5244949999999999], [103.381215, 4.8550009999999997], [103.438575, 4.1816060000000004], [103.332122, 3.7266979999999998], [103.429429, 3.3828689999999999], [103.502448, 2.7910189999999999], [103.854674, 2.5154540000000001], [104.24793200000001, 1.631141], [104.22881099999999, 1.293048], [103.519707, 1.226334], [102.573615, 1.9671149999999999], [101.390638, 2.7608139999999999], [101.27354, 3.270292], [100.695435, 3.9391400000000001], [100.557408, 4.7672800000000004], [100.19670600000001, 5.3124929999999999], [100.30625999999999, 6.0405620000000004], [100.085757, 6.4644890000000004], [100.259596, 6.6428250000000002], [101.07551599999999, 6.2048670000000001]]], [[[118.61832099999999, 4.4782019999999996], [117.882035, 4.1375510000000002], [117.015214, 4.3060939999999999], [115.865517, 4.306559], [115.51907799999999, 3.169238], [115.13403700000001, 2.821482], [114.62135499999999, 1.430688], [113.80585000000001, 1.217549], [112.859809, 1.49779], [112.380252, 1.410121], [111.79754800000001, 0.90444100000000005], [111.159138, 0.97647799999999996], [110.514061, 0.77313100000000001], [109.83022699999999, 1.338136], [109.66325999999999, 2.0064669999999998], [110.396135, 1.663775], [111.168853, 1.8506370000000001], [111.370081, 2.6973029999999998], [111.79692799999999, 2.8858969999999999], [112.995615, 3.102395], [113.712935, 3.8935089999999999], [114.20401699999999, 4.525874], [114.65959599999999, 4.0076369999999999], [114.869557, 4.3483140000000002], [115.347461, 4.3166359999999999], [115.4057, 4.955228], [115.45071, 5.44773], [116.220741, 6.1431909999999998], [116.725103, 6.9247709999999998], [117.129626, 6.9280530000000002], [117.643393, 6.4221659999999998], [117.689075, 5.9874900000000002], [118.347691, 5.7086959999999998], [119.181904, 5.4078359999999996], [119.110694, 5.0161280000000001], [118.439727, 4.9665189999999999], [118.61832099999999, 4.4782019999999996]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041c\u0430\u043b\u0430\u0439\u0437\u0438\u044f", "fr": "Malaisie", "en": "Malaysia", "nl": "Maleisi\u00eb", "pt": "Mal\u00e1sia", "no": "Malaysia", "de": "Malaysia", "it": "Malesia", "sv": "Malaysia", "pl": "Malezja", "fi": "Malesia", "zh": "\u9a6c\u6765\u897f\u4e9a", "ja": "\u30de\u30ec\u30fc\u30b7\u30a2", "es": "Malasia"}, "label_fr": "Malaisie", "name": "Malaysia", "dbpedia_uri": "http://dbpedia.org/resource/Malaysia"}, "id": "MYS"}, {"geometry": {"type": "Polygon", "coordinates": [[[16.344977, -28.576705], [15.601818, -27.821247], [15.210471999999999, -27.090955999999998], [14.989711, -26.117372], [14.743214, -25.39292], [14.408144, -23.853014000000002], [14.385717, -22.656652999999999], [14.257714, -22.111208000000001], [13.868641999999999, -21.699037000000001], [13.352498000000001, -20.872834000000001], [12.826845, -19.673165999999998], [12.608563999999999, -19.045349000000002], [11.794919, -18.069129], [11.734199, -17.301888999999999], [12.215460999999999, -17.111668000000002], [12.814081, -16.941343], [13.462362000000001, -16.971212000000001], [14.058501, -17.423380999999999], [14.209707, -17.353100999999999], [18.263309, -17.309951000000002], [18.956187, -17.789095], [21.377175999999999, -17.930636], [23.215047999999999, -17.523116000000002], [24.033861999999999, -17.295843000000001], [24.682348999999999, -17.353411000000001], [25.07695, -17.578823], [25.084443, -17.661816000000002], [24.520705, -17.887125000000001], [24.217365000000001, -17.889347000000001], [23.579006, -18.281261000000001], [23.196857999999999, -17.869038], [21.65504, -18.219145999999999], [20.910640999999998, -18.252219], [20.881133999999999, -21.814326999999999], [19.895458000000001, -21.849157000000002], [19.895768, -24.767790000000002], [19.894734, -28.461105], [19.002127000000002, -28.972442999999998], [18.464898999999999, -29.045462000000001], [17.836151999999998, -28.856377999999999], [17.387497, -28.783514], [17.218928999999999, -28.355943], [16.824017000000001, -28.082162], [16.344977, -28.576705]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u0430\u043c\u0438\u0431\u0438\u044f", "fr": "Namibie", "en": "Namibia", "nl": "Namibi\u00eb", "pt": "Nam\u00edbia", "no": "Namibia", "de": "Namibia", "it": "Namibia", "sv": "Namibia", "pl": "Namibia", "fi": "Namibia", "zh": "\u7eb3\u7c73\u6bd4\u4e9a", "ja": "\u30ca\u30df\u30d3\u30a2", "es": "Namibia"}, "label_fr": "Namibie", "name": "Namibia", "dbpedia_uri": "http://dbpedia.org/resource/Namibia"}, "id": "NAM"}, {"geometry": {"type": "Polygon", "coordinates": [[[165.77999, -21.080005], [166.59999099999999, -21.700019000000001], [167.12001100000001, -22.159991000000002], [166.74003500000001, -22.399975999999999], [166.18973199999999, -22.129708000000001], [165.47437500000001, -21.679607000000001], [164.829815, -21.149819999999998], [164.16799499999999, -20.444747], [164.029606, -20.105646], [164.45996700000001, -20.120011999999999], [165.020036, -20.459990999999999], [165.46000900000001, -20.800021999999998], [165.77999, -21.080005]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u043e\u0432\u0430\u044f \u041a\u0430\u043b\u0435\u0434\u043e\u043d\u0438\u044f", "fr": "Nouvelle-Cal\u00e9donie", "en": "New Caledonia", "nl": "Nieuw-Caledoni\u00eb (eiland)", "pt": "Nova Caled\u00f3nia", "no": "Ny-Caledonia", "de": "Neukaledonien", "it": "Nuova Caledonia", "sv": "Nya Kaledonien", "pl": "Nowa Kaledonia", "fi": "Uusi-Kaledonia", "zh": "\u65b0\u5580\u91cc\u591a\u5c3c\u4e9e", "ja": "\u30cb\u30e5\u30fc\u30ab\u30ec\u30c9\u30cb\u30a2", "es": "Nueva Caledonia"}, "label_fr": "Nouvelle-Cal\u00e9donie", "name": "New Caledonia", "dbpedia_uri": "http://dbpedia.org/resource/New_Caledonia"}, "id": "NCL"}, {"geometry": {"type": "Polygon", "coordinates": [[[2.154474, 11.940149999999999], [2.177108, 12.625018000000001], [1.024103, 12.851826000000001], [0.99304599999999998, 13.335750000000001], [0.42992799999999998, 13.988733], [0.29564600000000002, 14.444235000000001], [0.374892, 14.928908], [1.0157830000000001, 14.968182000000001], [1.3855280000000001, 15.323561], [2.7499929999999999, 15.409525], [3.6382590000000001, 15.56812], [3.7234219999999998, 16.184284000000002], [4.2702099999999996, 16.852226999999999], [4.2674190000000003, 19.155265], [5.6775659999999997, 19.601206999999999], [8.5728930000000005, 21.565660999999999], [11.999506, 23.471668000000001], [13.581424999999999, 23.040506000000001], [14.143871000000001, 22.491288999999998], [14.8513, 22.862950000000001], [15.096888, 21.308519], [15.471076999999999, 21.048456999999999], [15.487147999999999, 20.730415000000001], [15.903247, 20.387619000000001], [15.685741, 19.957180000000001], [15.300440999999999, 17.927949999999999], [15.247731, 16.627306000000001], [13.972201999999999, 15.684366000000001], [13.540393999999999, 14.367134], [13.956699, 13.996691], [13.954477000000001, 13.353448999999999], [14.595781000000001, 13.330427], [14.495787, 12.859396], [14.213531, 12.802035], [14.181336, 12.483656999999999], [13.995353, 12.461565], [13.318702, 13.556355999999999], [13.083987, 13.596147], [12.302071, 13.037189], [11.527803, 13.32898], [10.989592999999999, 13.387323], [10.701032, 13.246918000000001], [10.114814000000001, 13.277252000000001], [9.5249279999999992, 12.851101999999999], [9.0149329999999992, 12.826658999999999], [7.8046709999999999, 13.343527], [7.3307469999999997, 13.098038000000001], [6.8204419999999999, 13.115091], [6.4454260000000003, 13.492768], [5.4430579999999997, 13.865924], [4.3683439999999996, 13.747482], [4.1079460000000001, 13.531216000000001], [3.9672830000000001, 12.956109], [3.680634, 12.552903000000001], [3.6111800000000001, 11.660167], [2.848643, 12.235636], [2.490164, 12.233052000000001], [2.154474, 11.940149999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u0438\u0433\u0435\u0440", "fr": "Niger", "en": "Niger", "nl": "Niger (land)", "pt": "N\u00edger", "no": "Niger", "de": "Niger", "it": "Niger", "sv": "Niger", "pl": "Niger", "fi": "Niger", "zh": "\u5c3c\u65e5\u5c14", "ja": "\u30cb\u30b8\u30a7\u30fc\u30eb", "es": "N\u00edger"}, "label_fr": "Niger", "name": "Niger", "dbpedia_uri": "http://dbpedia.org/resource/Niger"}, "id": "NER"}, {"geometry": {"type": "Polygon", "coordinates": [[[8.5002879999999994, 4.7719829999999996], [7.4621079999999997, 4.4121079999999999], [7.0825959999999997, 4.4646889999999999], [6.6980719999999998, 4.2405939999999998], [5.8981729999999999, 4.2624529999999998], [5.3628049999999998, 4.8879710000000003], [5.0335739999999998, 5.611802], [4.3256069999999998, 6.270651], [3.5741800000000001, 6.2583000000000002], [2.6917019999999998, 6.2588169999999996], [2.749063, 7.8707339999999997], [2.7237930000000001, 8.5068450000000002], [2.9123079999999999, 9.1376080000000002], [3.2203520000000001, 9.444153], [3.705438, 10.06321], [3.6000700000000001, 10.332186], [3.7971119999999998, 10.734745999999999], [3.5722160000000001, 11.327939000000001], [3.6111800000000001, 11.660167], [3.680634, 12.552903000000001], [3.9672830000000001, 12.956109], [4.1079460000000001, 13.531216000000001], [4.3683439999999996, 13.747482], [5.4430579999999997, 13.865924], [6.4454260000000003, 13.492768], [6.8204419999999999, 13.115091], [7.3307469999999997, 13.098038000000001], [7.8046709999999999, 13.343527], [9.0149329999999992, 12.826658999999999], [9.5249279999999992, 12.851101999999999], [10.114814000000001, 13.277252000000001], [10.701032, 13.246918000000001], [10.989592999999999, 13.387323], [11.527803, 13.32898], [12.302071, 13.037189], [13.083987, 13.596147], [13.318702, 13.556355999999999], [13.995353, 12.461565], [14.181336, 12.483656999999999], [14.577178, 12.085361000000001], [14.468192, 11.904752], [14.415379, 11.572369], [13.572950000000001, 10.798565999999999], [13.308676, 10.160361999999999], [13.1676, 9.6406259999999993], [12.955468, 9.4177719999999994], [12.753672, 8.7177629999999997], [12.218871999999999, 8.3058239999999994], [12.063946, 7.7998079999999996], [11.839309, 7.3970419999999999], [11.745774000000001, 6.9813830000000001], [11.058788, 6.6444270000000003], [10.497375, 7.055358], [10.118277000000001, 7.0387700000000004], [9.5227059999999994, 6.4534820000000002], [9.2331629999999993, 6.4444910000000002], [8.7575330000000005, 5.4796659999999999], [8.5002879999999994, 4.7719829999999996]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u0438\u0433\u0435\u0440\u0438\u044f", "fr": "Nigeria", "en": "Nigeria", "nl": "Nigeria", "pt": "Nig\u00e9ria", "no": "Nigeria", "de": "Nigeria", "it": "Nigeria", "sv": "Nigeria", "pl": "Nigeria", "fi": "Nigeria", "zh": "\u5948\u53ca\u5229\u4e9e", "ja": "\u30ca\u30a4\u30b8\u30a7\u30ea\u30a2", "es": "Nigeria"}, "label_fr": "Nigeria", "name": "Nigeria", "dbpedia_uri": "http://dbpedia.org/resource/Nigeria"}, "id": "NGA"}, {"geometry": {"type": "Polygon", "coordinates": [[[-85.712540000000004, 11.088445], [-86.058487999999997, 11.403439000000001], [-86.525850000000005, 11.806877], [-86.745992000000001, 12.143962], [-87.167516000000006, 12.458258000000001], [-87.668492999999998, 12.90991], [-87.557467000000003, 13.064552000000001], [-87.392386000000002, 12.914018], [-87.316654, 12.984686], [-87.005769000000001, 13.025793999999999], [-86.880556999999996, 13.254204], [-86.733822000000004, 13.263093], [-86.755087000000003, 13.754845], [-86.520707999999999, 13.778487], [-86.312141999999994, 13.771356000000001], [-86.096264000000005, 14.038187000000001], [-85.801294999999996, 13.836055], [-85.698665000000005, 13.960077999999999], [-85.514413000000005, 14.079012000000001], [-85.165364999999994, 14.354369999999999], [-85.148751000000004, 14.560197000000001], [-85.052786999999995, 14.551541], [-84.924501000000006, 14.790493], [-84.820036999999999, 14.819587], [-84.649581999999995, 14.666805], [-84.449336000000002, 14.621613999999999], [-84.228341999999998, 14.748764], [-83.975720999999993, 14.749435999999999], [-83.628585000000001, 14.880074], [-83.489988999999994, 15.016266999999999], [-83.147219000000007, 14.995829000000001], [-83.233233999999996, 14.899865999999999], [-83.284161999999995, 14.676624], [-83.182125999999997, 14.310703], [-83.412499999999994, 13.970078000000001], [-83.519831999999994, 13.567698999999999], [-83.552206999999996, 13.127053999999999], [-83.498514999999998, 12.869292], [-83.473322999999993, 12.419086999999999], [-83.626103999999998, 12.32085], [-83.719612999999995, 11.893124], [-83.650857999999999, 11.629032], [-83.855469999999997, 11.373310999999999], [-83.808936000000003, 11.103044000000001], [-83.655612000000005, 10.938764000000001], [-83.895054000000002, 10.726839], [-84.190179000000001, 10.79345], [-84.355930999999998, 10.999226], [-84.673068999999998, 11.082656999999999], [-84.903002999999998, 10.952303000000001], [-85.561852000000002, 11.217119], [-85.712540000000004, 11.088445]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u0438\u043a\u0430\u0440\u0430\u0433\u0443\u0430", "fr": "Nicaragua", "en": "Nicaragua", "nl": "Nicaragua", "pt": "Nicar\u00e1gua", "no": "Nicaragua", "de": "Nicaragua", "it": "Nicaragua", "sv": "Nicaragua", "pl": "Nikaragua", "fi": "Nicaragua", "zh": "\u5c3c\u52a0\u62c9\u74dc", "ja": "\u30cb\u30ab\u30e9\u30b0\u30a2", "es": "Nicaragua"}, "label_fr": "Nicaragua", "name": "Nicaragua", "dbpedia_uri": "http://dbpedia.org/resource/Nicaragua"}, "id": "NIC"}, {"geometry": {"type": "Polygon", "coordinates": [[[6.0741829999999997, 53.510402999999997], [6.9051400000000003, 53.482162000000002], [7.0920529999999999, 53.144043000000003], [6.8428699999999996, 52.228439999999999], [6.5893969999999999, 51.852029000000002], [5.988658, 51.851616], [6.1566580000000002, 50.803721000000003], [5.6069760000000004, 51.037298], [4.9739909999999998, 51.475023999999998], [4.0470709999999999, 51.267259000000003], [3.3149709999999999, 51.345754999999997], [3.8302890000000001, 51.620545], [4.705997, 53.091797999999997], [6.0741829999999997, 53.510402999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u0438\u0434\u0435\u0440\u043b\u0430\u043d\u0434\u044b", "fr": "Pays-Bas", "en": "Netherlands", "nl": "Nederland", "pt": "Pa\u00edses Baixos", "no": "Nederland", "de": "Niederlande", "it": "Paesi Bassi", "sv": "Nederl\u00e4nderna", "pl": "Holandia", "fi": "Alankomaat", "zh": "\u8377\u5170", "ja": "\u30aa\u30e9\u30f3\u30c0", "es": "Pa\u00edses Bajos"}, "label_fr": "Pays-Bas", "name": "Netherlands", "dbpedia_uri": "http://dbpedia.org/resource/Netherlands"}, "id": "NLD"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[28.165547, 71.185473999999999], [31.293417999999999, 70.453788000000003], [30.005434999999999, 70.186259000000007], [31.101078999999999, 69.558080000000004], [29.399581000000001, 69.156915999999995], [28.591930000000001, 69.064777000000007], [29.015573, 69.766491000000002], [27.732292000000001, 70.164192999999997], [26.179621999999998, 69.825299000000001], [25.689212999999999, 69.092113999999995], [24.735679000000001, 68.649557000000001], [23.662050000000001, 68.891247000000007], [22.356238000000001, 68.841740999999999], [21.244935999999999, 69.370442999999995], [20.645593000000002, 69.106246999999996], [20.025269000000002, 69.065139000000002], [19.87856, 68.407194000000004], [17.993867999999999, 68.567391000000001], [17.729182000000002, 68.010552000000004], [16.768878999999998, 68.013936999999999], [16.108712000000001, 67.302456000000006], [15.108411, 66.193866999999997], [13.55569, 64.787028000000007], [13.919905, 64.445420999999996], [13.571916, 64.049114000000003], [12.579935000000001, 64.066219000000004], [11.930569, 63.128318], [11.992063999999999, 61.800362], [12.631147, 61.293571999999998], [12.300366, 60.117933000000001], [11.468272000000001, 59.432392999999998], [11.027369, 58.856149000000002], [10.356557, 59.469807000000003], [8.3819999999999997, 58.313288], [7.0487479999999998, 58.078884000000002], [5.6658350000000004, 58.588155], [5.3082339999999997, 59.663232000000001], [4.9920780000000002, 61.970998000000002], [5.9128999999999996, 62.614472999999997], [8.5534110000000005, 63.454008000000002], [10.527709, 64.486037999999994], [12.358347, 65.879726000000005], [14.761146, 67.810642000000001], [16.435927, 68.563204999999996], [19.184028000000001, 69.817443999999995], [21.378416000000001, 70.255168999999995], [23.023741999999999, 70.202072000000001], [24.546543, 71.030496999999997], [26.370049999999999, 70.986261999999996], [28.165547, 71.185473999999999]]], [[[24.724119999999999, 77.853849999999994], [22.490320000000001, 77.444929999999999], [20.726009999999999, 77.677040000000005], [21.41611, 77.935040000000001], [20.811900000000001, 78.254630000000006], [22.884260000000001, 78.454939999999993], [23.28134, 78.079539999999994], [24.724119999999999, 77.853849999999994]]], [[[18.251830000000002, 79.701750000000004], [21.54383, 78.956109999999995], [19.027370000000001, 78.562600000000003], [18.471720000000001, 77.826689999999999], [17.59441, 77.637960000000007], [17.118200000000002, 76.80941], [15.91315, 76.770449999999997], [13.762589999999999, 77.380350000000007], [14.669560000000001, 77.735650000000007], [13.1706, 78.024929999999998], [11.22231, 78.869299999999996], [10.44453, 79.652389999999997], [13.170769999999999, 80.010459999999995], [13.71852, 79.660390000000007], [15.14282, 79.674310000000006], [15.522550000000001, 80.016080000000002], [16.990849999999998, 80.05086], [18.251830000000002, 79.701750000000004]]], [[[25.447624999999999, 80.407340000000005], [27.407506000000001, 80.056405999999996], [25.924651000000001, 79.517833999999993], [23.024466, 79.400012000000004], [20.075188000000001, 79.566822999999999], [19.897265999999998, 79.842361999999994], [18.462264000000001, 79.859880000000004], [17.368015, 80.318895999999995], [20.455991999999998, 80.598156000000003], [21.907945000000002, 80.357679000000005], [22.919253000000001, 80.657144000000002], [25.447624999999999, 80.407340000000005]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u043e\u0440\u0432\u0435\u0433\u0438\u044f", "fr": "Norv\u00e8ge", "en": "Norway", "nl": "Noorwegen", "pt": "Noruega", "no": "Norge", "de": "Norwegen", "it": "Norvegia", "sv": "Norge", "pl": "Norwegia", "fi": "Norja", "zh": "\u632a\u5a01", "ja": "\u30ce\u30eb\u30a6\u30a7\u30fc", "es": "Noruega"}, "label_fr": "Norv\u00e8ge", "name": "Norway", "dbpedia_uri": "http://dbpedia.org/resource/Norway"}, "id": "NOR"}, {"geometry": {"type": "Polygon", "coordinates": [[[88.120441, 27.876542000000001], [88.043132999999997, 27.445819], [88.174803999999995, 26.810404999999999], [88.060237999999998, 26.414615000000001], [87.227472000000006, 26.397898000000001], [86.024393000000003, 26.630984999999999], [85.251778999999999, 26.726198], [84.675017999999994, 27.234901000000001], [83.304248999999999, 27.364505999999999], [81.999987000000004, 27.925478999999999], [81.057203000000001, 28.416094999999999], [80.088425000000001, 28.79447], [80.476720999999998, 29.729865], [81.111255999999997, 30.183481], [81.525803999999994, 30.422716999999999], [82.327512999999996, 30.115268], [83.337114999999997, 29.463732], [83.898993000000004, 29.320226000000002], [84.234579999999994, 28.839894000000001], [85.011638000000005, 28.642773999999999], [85.823319999999995, 28.203576000000002], [86.954516999999996, 27.974262], [88.120441, 27.876542000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u0435\u043f\u0430\u043b", "fr": "N\u00e9pal", "en": "Nepal", "nl": "Nepal", "pt": "Nepal", "no": "Nepal", "de": "Nepal", "it": "Nepal", "sv": "Nepal", "pl": "Nepal", "fi": "Nepal", "zh": "\u5c3c\u6cca\u5c14", "ja": "\u30cd\u30d1\u30fc\u30eb", "es": "Nepal"}, "label_fr": "N\u00e9pal", "name": "Nepal", "dbpedia_uri": "http://dbpedia.org/resource/Nepal"}, "id": "NPL"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[173.020375, -40.919052000000001], [173.24723399999999, -41.331999000000003], [173.958405, -40.926701000000001], [174.24758700000001, -41.349155000000003], [174.24851699999999, -41.770007999999997], [173.87644700000001, -42.233184000000001], [173.22273999999999, -42.970038000000002], [172.71124599999999, -43.372287999999998], [173.08011300000001, -43.853344], [172.308584, -43.865693999999998], [171.45292499999999, -44.242519000000001], [171.18513799999999, -44.897103999999999], [170.61669699999999, -45.908929000000001], [169.831422, -46.355775000000001], [169.33233100000001, -46.641235000000002], [168.41135399999999, -46.619945000000001], [167.763745, -46.290196999999999], [166.676886, -46.219917000000002], [166.50914399999999, -45.852705], [167.046424, -45.110940999999997], [168.303763, -44.123972999999999], [168.949409, -43.935819000000002], [169.66781499999999, -43.555326000000001], [170.52492000000001, -43.031688000000003], [171.12509, -42.512754000000001], [171.569714, -41.767423999999998], [171.94870900000001, -41.514417000000002], [172.097227, -40.956104000000003], [172.79857999999999, -40.493962000000003], [173.020375, -40.919052000000001]]], [[[174.612009, -36.156396999999998], [175.33661599999999, -37.209097999999997], [175.357596, -36.526193999999997], [175.808887, -36.798941999999997], [175.95849000000001, -37.555382000000002], [176.763195, -37.881253000000001], [177.43881300000001, -37.961247999999998], [178.01035400000001, -37.579825], [178.51709399999999, -37.695372999999996], [178.274731, -38.582813000000002], [177.97046, -39.166342999999998], [177.20699300000001, -39.145775999999998], [176.93998099999999, -39.449736000000001], [177.03294600000001, -39.879942999999997], [176.88582400000001, -40.065978000000001], [176.508017, -40.604807999999998], [176.01244, -41.289624000000003], [175.23956699999999, -41.688307999999999], [175.06789800000001, -41.425894999999997], [174.65097299999999, -41.281821000000001], [175.22763, -40.459235999999997], [174.90015700000001, -39.908932999999998], [173.82404700000001, -39.508853999999999], [173.852262, -39.146602000000001], [174.57480200000001, -38.797682999999999], [174.74347399999999, -38.027808], [174.69701699999999, -37.381129000000001], [174.29202799999999, -36.711092000000001], [174.31900400000001, -36.534824], [173.84099699999999, -36.121980999999998], [173.054171, -35.237124999999999], [172.63600500000001, -34.529107000000003], [173.00704200000001, -34.450662000000001], [173.551298, -35.006183], [174.32938999999999, -35.265495999999999], [174.612009, -36.156396999999998]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041d\u043e\u0432\u0430\u044f \u0417\u0435\u043b\u0430\u043d\u0434\u0438\u044f", "fr": "Nouvelle-Z\u00e9lande", "en": "New Zealand", "nl": "Nieuw-Zeeland", "pt": "Nova Zel\u00e2ndia", "no": "New Zealand", "de": "Neuseeland", "it": "Nuova Zelanda", "sv": "Nya Zeeland", "pl": "Nowa Zelandia", "fi": "Uusi-Seelanti", "zh": "\u65b0\u897f\u5170", "ja": "\u30cb\u30e5\u30fc\u30b8\u30fc\u30e9\u30f3\u30c9", "es": "Nueva Zelanda"}, "label_fr": "Nouvelle-Z\u00e9lande", "name": "New Zealand", "dbpedia_uri": "http://dbpedia.org/resource/New_Zealand"}, "id": "NZL"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[58.861141000000003, 21.114035000000001], [58.487985999999999, 20.428985999999998], [58.034317999999999, 20.481437], [57.826372999999997, 20.243002000000001], [57.665762000000001, 19.736004999999999], [57.788699999999999, 19.06757], [57.694391000000003, 18.944710000000001], [57.234264000000003, 18.947990999999998], [56.609650999999999, 18.574266999999999], [56.512188999999999, 18.087112999999999], [56.283521, 17.876066999999999], [55.661492000000003, 17.884128], [55.269939000000001, 17.632308999999999], [55.274900000000002, 17.228354], [54.791001999999999, 16.950697000000002], [54.239252999999998, 17.044981], [53.570507999999997, 16.707663], [53.108573, 16.651050999999999], [52.782184000000001, 17.349741999999999], [52.000010000000003, 19.000003], [54.999982000000003, 19.999994000000001], [55.666659000000003, 22.000001000000001], [55.208340999999997, 22.70833], [55.234489000000004, 23.110993000000001], [55.525841, 23.524868999999999], [55.528632000000002, 23.933603999999999], [55.981214000000001, 24.130542999999999], [55.804119, 24.269604000000001], [55.886232999999997, 24.920831], [56.396847000000001, 24.924731999999999], [56.845140000000001, 24.241672999999999], [57.403452999999999, 23.878594], [58.136947999999997, 23.747931000000001], [58.729210999999999, 23.565667999999999], [59.180501999999997, 22.992394999999998], [59.450097999999997, 22.660271000000002], [59.808059999999998, 22.533612000000002], [59.806148, 22.310524999999998], [59.442191000000001, 21.714541000000001], [59.282407999999997, 21.433886000000001], [58.861141000000003, 21.114035000000001]]], [[[56.391421000000001, 25.895990999999999], [56.261042000000003, 25.714606], [56.070821000000002, 26.055464000000001], [56.362017000000002, 26.395934], [56.485678999999998, 26.309118000000002], [56.391421000000001, 25.895990999999999]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041e\u043c\u0430\u043d", "fr": "Oman", "en": "Oman", "nl": "Oman", "pt": "Om\u00e3", "no": "Oman", "de": "Oman", "it": "Oman", "sv": "Oman", "pl": "Oman", "fi": "Oman", "zh": "\u963f\u66fc", "ja": "\u30aa\u30de\u30fc\u30f3", "es": "Om\u00e1n"}, "label_fr": "Oman", "name": "Oman", "dbpedia_uri": "http://dbpedia.org/resource/Oman"}, "id": "OMN"}, {"geometry": {"type": "Polygon", "coordinates": [[[75.158028000000002, 37.133031000000003], [75.896896999999996, 36.666806000000001], [76.192847999999998, 35.898403000000002], [77.837451000000001, 35.494010000000003], [76.871722000000005, 34.653543999999997], [75.757060999999993, 34.504922999999998], [74.240202999999994, 34.748887000000003], [73.749948000000003, 34.317698999999998], [74.104293999999996, 33.441473000000002], [74.451559000000003, 32.764899999999997], [75.258641999999995, 32.271104999999999], [74.405929, 31.692639], [74.421379999999999, 30.979814999999999], [73.450637999999998, 29.976413000000001], [72.823751999999999, 28.961592], [71.777665999999996, 27.913180000000001], [70.616495999999998, 27.989196], [69.514392999999998, 26.940966], [70.168926999999996, 26.491872000000001], [70.282872999999995, 25.722228999999999], [70.844699000000006, 25.215102000000002], [71.043239999999997, 24.356524], [68.842599000000007, 24.359134000000001], [68.176644999999994, 23.691965], [67.443667000000005, 23.944844], [67.145442000000003, 24.663611], [66.372827999999998, 25.425141], [64.530407999999994, 25.237038999999999], [62.905701000000001, 25.218409000000001], [61.497363, 25.078237000000001], [61.874186999999999, 26.239975000000001], [63.316631999999998, 26.756532], [63.233898000000003, 27.217047000000001], [62.755426, 27.378923], [62.727829999999997, 28.259644999999999], [61.771867999999998, 28.699334], [61.369309000000001, 29.303276], [60.874248000000001, 29.829239000000001], [62.549857000000003, 29.318572], [63.550260999999999, 29.468330999999999], [64.148002000000005, 29.340819], [64.350419000000002, 29.560030999999999], [65.046862000000004, 29.472180999999999], [66.346473000000003, 29.887943], [66.381457999999995, 30.738899], [66.938890999999998, 31.304911000000001], [67.683394000000007, 31.303153999999999], [67.792688999999996, 31.582930000000001], [68.556932000000003, 31.71331], [68.926676999999998, 31.620189], [69.317763999999997, 31.901412000000001], [69.262522000000004, 32.501944000000002], [69.687146999999996, 33.105499000000002], [70.323594, 33.358533000000001], [69.930543, 34.020119999999999], [70.881803000000005, 33.988855999999998], [71.156773000000001, 34.348911000000001], [71.115019000000004, 34.733125999999999], [71.613076000000007, 35.153202999999998], [71.498767999999998, 35.650562999999998], [71.262348000000003, 36.074387999999999], [71.846292000000005, 36.509942000000002], [72.920024999999995, 36.720007000000003], [74.067552000000006, 36.836176000000002], [74.575892999999994, 37.020840999999997], [75.158028000000002, 37.133031000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u0430\u043a\u0438\u0441\u0442\u0430\u043d", "fr": "Pakistan", "en": "Pakistan", "nl": "Pakistan", "pt": "Paquist\u00e3o", "no": "Pakistan", "de": "Pakistan", "it": "Pakistan", "sv": "Pakistan", "pl": "Pakistan", "fi": "Pakistan", "zh": "\u5df4\u57fa\u65af\u5766", "ja": "\u30d1\u30ad\u30b9\u30bf\u30f3", "es": "Pakist\u00e1n"}, "label_fr": "Pakistan", "name": "Pakistan", "dbpedia_uri": "http://dbpedia.org/resource/Pakistan"}, "id": "PAK"}, {"geometry": {"type": "Polygon", "coordinates": [[[-77.881570999999994, 7.2237710000000002], [-78.214935999999994, 7.5122549999999997], [-78.429160999999993, 8.0520409999999991], [-78.182096000000001, 8.3191819999999996], [-78.435464999999994, 8.3877050000000004], [-78.622121000000007, 8.7181239999999995], [-79.120306999999997, 8.9960920000000009], [-79.557877000000005, 8.9323750000000004], [-79.760577999999995, 8.5845149999999997], [-80.164480999999995, 8.3333159999999999], [-80.382659000000004, 8.2984089999999995], [-80.480688999999998, 8.0903080000000003], [-80.003690000000006, 7.5475240000000001], [-80.276670999999993, 7.4197540000000002], [-80.421158000000005, 7.2715719999999999], [-80.886401000000006, 7.2205409999999999], [-81.059543000000005, 7.8179210000000001], [-81.189716000000004, 7.6479059999999999], [-81.519514999999998, 7.7066100000000004], [-81.721311, 8.1089629999999993], [-82.131440999999995, 8.1753929999999997], [-82.390934000000001, 8.2923620000000007], [-82.820081000000002, 8.2908639999999991], [-82.850958000000006, 8.0738230000000009], [-82.965783000000002, 8.225028], [-82.913176000000007, 8.4235170000000004], [-82.829770999999994, 8.6262950000000007], [-82.868656999999999, 8.8072660000000003], [-82.719183000000001, 8.9257089999999994], [-82.927154999999999, 9.0743299999999998], [-82.932890999999998, 9.4768120000000007], [-82.546195999999995, 9.5661349999999992], [-82.187123, 9.2074490000000004], [-82.207586000000006, 8.9955750000000005], [-81.808566999999996, 8.9506169999999994], [-81.714153999999994, 9.031955], [-81.439286999999993, 8.7862340000000003], [-80.947301999999993, 8.8585039999999999], [-80.521901, 9.1110720000000001], [-79.914599999999993, 9.3127650000000006], [-79.573302999999996, 9.6116100000000007], [-79.021191999999999, 9.5529309999999992], [-79.058449999999993, 9.4545650000000006], [-78.500888000000003, 9.4204589999999993], [-78.055927999999994, 9.2477300000000007], [-77.729513999999995, 8.9468440000000005], [-77.353361000000007, 8.6705050000000004], [-77.474722999999997, 8.524286], [-77.242565999999997, 7.9352780000000003], [-77.431107999999995, 7.6380610000000004], [-77.753414000000006, 7.7098399999999998], [-77.881570999999994, 7.2237710000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u0430\u043d\u0430\u043c\u0430", "fr": "Panam\u00e1", "en": "Panama", "nl": "Panama (land)", "pt": "Panam\u00e1", "no": "Panama", "de": "Panama", "it": "Panam\u00e1", "sv": "Panama", "pl": "Panama", "fi": "Panama", "zh": "\u5df4\u62ff\u9a6c", "ja": "\u30d1\u30ca\u30de", "es": "Panam\u00e1"}, "label_fr": "Panam\u00e1", "name": "Panama", "dbpedia_uri": "http://dbpedia.org/resource/Panama"}, "id": "PAN"}, {"geometry": {"type": "Polygon", "coordinates": [[[-69.590423999999999, -17.580012], [-69.858444000000006, -18.092694000000002], [-70.372572000000005, -18.347975000000002], [-71.375249999999994, -17.773799], [-71.462040999999999, -17.363488], [-73.44453, -16.359362999999998], [-75.237882999999997, -15.265682999999999], [-76.009204999999994, -14.649286], [-76.423468999999997, -13.823187000000001], [-76.259242, -13.535038999999999], [-77.106191999999993, -12.222716], [-78.092152999999996, -10.377712000000001], [-79.036952999999997, -8.3865680000000005], [-79.445920000000001, -7.9308329999999998], [-79.760577999999995, -7.1943409999999997], [-80.537481999999997, -6.5416679999999996], [-81.249995999999996, -6.1368340000000003], [-80.926347000000007, -5.6905570000000001], [-81.410943000000003, -4.7367650000000001], [-81.099670000000003, -4.0363939999999996], [-80.302560999999997, -3.4048560000000001], [-80.184015000000002, -3.8211620000000002], [-80.469295000000002, -4.0592870000000003], [-80.442241999999993, -4.4257239999999998], [-80.028908000000001, -4.3460910000000004], [-79.624978999999996, -4.4541979999999999], [-79.205288999999993, -4.9591289999999999], [-78.639897000000005, -4.547784], [-78.450683999999995, -3.873097], [-77.837905000000006, -3.0030209999999999], [-76.635394000000005, -2.6086779999999998], [-75.544995999999998, -1.5616099999999999], [-75.233722999999998, -0.91141700000000003], [-75.373222999999996, -0.152032], [-75.106624999999994, -0.057204999999999999], [-74.441601000000006, -0.53081999999999996], [-74.122394999999997, -1.0028330000000001], [-73.659503999999998, -1.260491], [-73.070391999999998, -2.308954], [-72.325787000000005, -2.434218], [-71.774760999999998, -2.1697899999999999], [-71.413646, -2.3428019999999998], [-70.813475999999994, -2.2568649999999999], [-70.047708999999998, -2.7251560000000001], [-70.692682000000005, -3.7428720000000002], [-70.394043999999994, -3.766591], [-69.893635000000003, -4.2981870000000004], [-70.794769000000002, -4.2512650000000001], [-70.928843000000001, -4.4015909999999998], [-71.748406000000003, -4.5939829999999997], [-72.891927999999993, -5.2745610000000003], [-72.964506999999998, -5.7412510000000001], [-73.219711000000004, -6.0891890000000002], [-73.120026999999993, -6.629931], [-73.724486999999996, -6.9185949999999998], [-73.723400999999996, -7.3409990000000001], [-73.987234999999998, -7.5238300000000002], [-73.571059000000005, -8.4244470000000007], [-73.015383, -9.0328330000000001], [-73.226713000000004, -9.4622130000000002], [-72.563033000000004, -9.520194], [-72.184890999999993, -10.053597999999999], [-71.302412000000004, -10.079435999999999], [-70.481893999999997, -9.4901180000000007], [-70.548686000000004, -11.009147], [-70.093751999999995, -11.123972], [-69.529678000000004, -10.951734], [-68.665080000000003, -12.561299999999999], [-68.880080000000007, -12.899729000000001], [-68.929224000000005, -13.602684], [-68.948886999999999, -14.453639000000001], [-69.339534999999998, -14.953194999999999], [-69.160347000000002, -15.323974], [-69.389764, -15.660129], [-68.959635000000006, -16.500698], [-69.590423999999999, -17.580012]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u0435\u0440\u0443", "fr": "P\u00e9rou", "en": "Peru", "nl": "Peru", "pt": "Peru", "no": "Peru", "de": "Peru", "it": "Per\u00f9", "sv": "Peru", "pl": "Peru", "fi": "Peru", "zh": "\u79d8\u9c81", "ja": "\u30da\u30eb\u30fc", "es": "Per\u00fa"}, "label_fr": "P\u00e9rou", "name": "Peru", "dbpedia_uri": "http://dbpedia.org/resource/Peru"}, "id": "PER"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[126.376814, 8.4147060000000007], [126.47851300000001, 7.7503539999999997], [126.537424, 7.189381], [126.19677299999999, 6.2742940000000003], [125.83142100000001, 7.2937149999999997], [125.36385199999999, 6.7864849999999999], [125.683161, 6.0496569999999998], [125.396512, 5.5810029999999999], [124.21978799999999, 6.1613550000000004], [123.93872, 6.8851360000000001], [124.243662, 7.3606100000000003], [123.610212, 7.8335270000000001], [123.296071, 7.418876], [122.825506, 7.4573749999999999], [122.085499, 6.8994239999999998], [121.919928, 7.1921189999999999], [122.312359, 8.0349620000000002], [122.942398, 8.3162369999999992], [123.48768800000001, 8.6930099999999992], [123.841154, 8.2403239999999993], [124.60147000000001, 8.5141580000000001], [124.764612, 8.9604090000000003], [125.471391, 8.9869970000000006], [125.41211800000001, 9.7603349999999995], [126.222714, 9.2860739999999993], [126.30663699999999, 8.7824869999999997], [126.376814, 8.4147060000000007]]], [[[123.982438, 10.278779], [123.623183, 9.9500910000000005], [123.309921, 9.3182690000000008], [122.99588300000001, 9.0221889999999991], [122.380055, 9.7133610000000008], [122.586089, 9.9810449999999999], [122.837081, 10.261157000000001], [122.947411, 10.881868000000001], [123.49885, 10.940624], [123.337774, 10.267384], [124.07793599999999, 11.232726], [123.982438, 10.278779]]], [[[118.504581, 9.3163830000000001], [117.17427499999999, 8.3674999999999997], [117.66447700000001, 9.0668889999999998], [118.386914, 9.6844999999999999], [118.987342, 10.376291999999999], [119.51149599999999, 11.369668000000001], [119.689677, 10.554290999999999], [119.02945800000001, 10.003653], [118.504581, 9.3163830000000001]]], [[[121.883548, 11.891755], [122.48382100000001, 11.582186999999999], [123.120217, 11.58366], [123.100838, 11.165934], [122.637714, 10.741308], [122.00261, 10.441017], [121.967367, 10.905690999999999], [122.03837, 11.415841], [121.883548, 11.891755]]], [[[125.50255199999999, 12.162694999999999], [125.78346500000001, 11.046122], [125.01188399999999, 11.311455], [125.03276099999999, 10.975816], [125.277449, 10.358722], [124.80181899999999, 10.134679], [124.76016799999999, 10.837994999999999], [124.459101, 10.88993], [124.302522, 11.495371], [124.891013, 11.415583], [124.87799, 11.79419], [124.266762, 12.557760999999999], [125.227116, 12.535721000000001], [125.50255199999999, 12.162694999999999]]], [[[121.527394, 13.06959], [121.26219, 12.20556], [120.833896, 12.704496000000001], [120.323436, 13.466412999999999], [121.180128, 13.429697000000001], [121.527394, 13.06959]]], [[[121.321308, 18.504065000000001], [121.937601, 18.218551999999999], [122.24600599999999, 18.478950000000001], [122.336957, 18.224882999999998], [122.174279, 17.810282999999998], [122.515654, 17.093505], [122.25231100000001, 16.262443999999999], [121.662786, 15.931018], [121.50507, 15.124814000000001], [121.728829, 14.328376], [122.258925, 14.218202], [122.70127599999999, 14.336541], [123.950295, 13.782131], [123.855107, 13.237771], [124.18128900000001, 12.997527], [124.07741900000001, 12.536676999999999], [123.298035, 13.027526], [122.928652, 13.55292], [122.67135500000001, 13.185836], [122.03465, 13.784482000000001], [121.126385, 13.636687], [120.628637, 13.857656], [120.679384, 14.271015999999999], [120.99181900000001, 14.525392999999999], [120.693336, 14.756671000000001], [120.564145, 14.396279], [120.070429, 14.970869], [119.920929, 15.406347], [119.88377300000001, 16.363703999999998], [120.28648800000001, 16.034628999999999], [120.390047, 17.599081000000002], [120.715867, 18.505227000000001], [121.321308, 18.504065000000001]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0424\u0438\u043b\u0438\u043f\u043f\u0438\u043d\u044b", "fr": "Philippines", "en": "Philippines", "nl": "Filipijnen", "pt": "Filipinas", "no": "Filippinene", "de": "Philippinen", "it": "Filippine", "sv": "Filippinerna", "pl": "Filipiny", "fi": "Filippiinit", "ja": "\u30d5\u30a3\u30ea\u30d4\u30f3", "es": "Filipinas"}, "label_fr": "Philippines", "name": "Philippines", "dbpedia_uri": "http://dbpedia.org/resource/Philippines"}, "id": "PHL"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[155.88002599999999, -6.8199969999999999], [155.59999099999999, -6.9199909999999996], [155.16699399999999, -6.5359309999999997], [154.72919200000001, -5.9008279999999997], [154.51411400000001, -5.1391179999999999], [154.65250399999999, -5.0424309999999997], [154.75999100000001, -5.3399840000000003], [155.062918, -5.5667920000000004], [155.54774599999999, -6.2006550000000002], [156.01996500000001, -6.5400140000000002], [155.88002599999999, -6.8199969999999999]]], [[[151.98279600000001, -5.4780629999999997], [151.45910699999999, -5.5602799999999997], [151.30139, -5.8407280000000004], [150.754447, -6.0837630000000003], [150.241197, -6.3177539999999999], [149.70996299999999, -6.3165129999999996], [148.89006499999999, -6.0260400000000001], [148.31893700000001, -5.7471420000000002], [148.401826, -5.4377560000000003], [149.29841200000001, -5.583742], [149.845562, -5.505503], [149.99625, -5.0261009999999997], [150.13975600000001, -5.0013480000000001], [150.236908, -5.5322199999999997], [150.807467, -5.4558419999999996], [151.08967200000001, -5.1136929999999996], [151.64788100000001, -4.7570740000000002], [151.53786199999999, -4.1678069999999998], [152.13679200000001, -4.14879], [152.33874299999999, -4.3129660000000003], [152.318693, -4.867661], [151.98279600000001, -5.4780629999999997]]], [[[147.19187400000001, -7.3880239999999997], [148.08463599999999, -8.0441079999999996], [148.734105, -9.1046639999999996], [149.30683500000001, -9.0714360000000003], [149.26663099999999, -9.5144059999999993], [150.03872799999999, -9.6843179999999993], [149.738798, -9.8729370000000003], [150.80162799999999, -10.293687], [150.690575, -10.582713], [150.02839299999999, -10.652476], [149.78231, -10.393267], [148.92313799999999, -10.280923], [147.91301799999999, -10.130440999999999], [147.13544300000001, -9.4924440000000008], [146.567881, -8.9425550000000005], [146.04848100000001, -8.0674139999999994], [144.744168, -7.630128], [143.897088, -7.91533], [143.28637599999999, -8.2454909999999995], [143.41391300000001, -8.9830690000000004], [142.62843100000001, -9.3268210000000007], [142.06825900000001, -9.1595960000000005], [141.033852, -9.1178930000000005], [141.01705699999999, -5.8590220000000004], [141.00021000000001, -2.6001509999999999], [142.73524699999999, -3.2891530000000002], [144.58397099999999, -3.861418], [145.27318, -4.3737380000000003], [145.82978600000001, -4.8764979999999998], [145.981922, -5.4656089999999997], [147.64807300000001, -6.0836589999999999], [147.891108, -6.6140150000000002], [146.97090499999999, -6.7216570000000004], [147.19187400000001, -7.3880239999999997]]], [[[153.140038, -4.4999830000000003], [152.827292, -4.7664270000000002], [152.63867300000001, -4.1761270000000001], [152.406026, -3.7897430000000001], [151.953237, -3.462062], [151.38427899999999, -3.0354220000000001], [150.66204999999999, -2.7414860000000001], [150.939965, -2.5000019999999998], [151.479984, -2.7799849999999999], [151.82001500000001, -2.9999720000000001], [152.23998900000001, -3.2400090000000001], [152.640017, -3.659983], [153.019994, -3.9800149999999999], [153.140038, -4.4999830000000003]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u0430\u043f\u0443\u0430 \u2014 \u041d\u043e\u0432\u0430\u044f \u0413\u0432\u0438\u043d\u0435\u044f", "fr": "Papouasie-Nouvelle-Guin\u00e9e", "en": "Papua New Guinea", "nl": "Papoea-Nieuw-Guinea", "pt": "Papua-Nova Guin\u00e9", "no": "Papua Ny-Guinea", "de": "Papua-Neuguinea", "it": "Papua Nuova Guinea", "sv": "Papua Nya Guinea", "pl": "Papua-Nowa Gwinea", "fi": "Papua-Uusi-Guinea", "zh": "\u5df4\u5e03\u4e9a\u65b0\u51e0\u5185\u4e9a", "ja": "\u30d1\u30d7\u30a2\u30cb\u30e5\u30fc\u30ae\u30cb\u30a2", "es": "Pap\u00faa Nueva Guinea"}, "label_fr": "Papouasie-Nouvelle-Guin\u00e9e", "name": "Papua New Guinea", "dbpedia_uri": "http://dbpedia.org/resource/Papua_New_Guinea"}, "id": "PNG"}, {"geometry": {"type": "Polygon", "coordinates": [[[15.016996000000001, 51.106673999999998], [14.607098000000001, 51.745187999999999], [14.685026000000001, 52.089947000000002], [14.4376, 52.624850000000002], [14.074521000000001, 52.981262999999998], [14.353315, 53.248170999999999], [14.119686, 53.757029000000003], [14.802899999999999, 54.050705999999998], [16.363477, 54.513159000000002], [17.622831999999999, 54.851536000000003], [18.620858999999999, 54.682606], [18.696255000000001, 54.438718999999999], [19.660640000000001, 54.426084000000003], [20.892244999999999, 54.312525000000001], [22.731099, 54.327537], [23.243987000000001, 54.220567000000003], [23.484127999999998, 53.912497999999999], [23.527536000000001, 53.470122000000003], [23.804935, 53.089731], [23.799199000000002, 52.691099000000001], [23.199494000000001, 52.486977000000003], [23.508002000000001, 52.023646999999997], [23.527070999999999, 51.578454000000001], [24.029986000000001, 50.705407000000001], [23.922757000000001, 50.424880999999999], [23.426507999999998, 50.308506000000001], [22.518450000000001, 49.476773999999999], [22.776419000000001, 49.027394999999999], [22.558138, 49.085737999999999], [21.607807999999999, 49.470106999999999], [20.887955000000002, 49.328772000000001], [20.415838999999998, 49.431452999999998], [19.825023000000002, 49.217125000000003], [19.320713000000001, 49.571573999999998], [18.909575, 49.435845999999998], [18.853144, 49.496229999999997], [18.392914000000001, 49.988629000000003], [17.649445, 50.049038000000003], [17.554566999999999, 50.362146000000003], [16.868769, 50.473973999999998], [16.719476, 50.215747], [16.176252999999999, 50.422606999999999], [16.238627000000001, 50.697732999999999], [15.490971999999999, 50.784730000000003], [15.016996000000001, 51.106673999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u043e\u043b\u044c\u0448\u0430", "fr": "Pologne", "en": "Poland", "nl": "Polen", "pt": "Pol\u00f3nia", "no": "Polen", "de": "Polen", "it": "Polonia", "sv": "Polen", "pl": "Polska", "fi": "Puola", "zh": "\u6ce2\u5170", "ja": "\u30dd\u30fc\u30e9\u30f3\u30c9", "es": "Polonia"}, "label_fr": "Pologne", "name": "Poland", "dbpedia_uri": "http://dbpedia.org/resource/Poland"}, "id": "POL"}, {"geometry": {"type": "Polygon", "coordinates": [[[-66.282433999999995, 18.514762000000001], [-65.771303000000003, 18.426679], [-65.591003999999998, 18.228034999999998], [-65.847164000000006, 17.975905999999998], [-66.599934000000005, 17.981822999999999], [-67.184162000000001, 17.946553000000002], [-67.242428000000004, 18.374459999999999], [-67.100679, 18.520600999999999], [-66.282433999999995, 18.514762000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u0443\u044d\u0440\u0442\u043e-\u0420\u0438\u043a\u043e", "fr": "Porto Rico", "en": "Puerto Rico", "nl": "Puerto Rico", "pt": "Porto Rico", "no": "Puerto Rico", "de": "Puerto Rico", "it": "Porto Rico", "sv": "Puerto Rico", "pl": "Portoryko", "fi": "Puerto Rico", "zh": "\u6ce2\u591a\u9ece\u5404", "ja": "\u30d7\u30a8\u30eb\u30c8\u30ea\u30b3", "es": "Puerto Rico"}, "label_fr": "Porto Rico", "name": "Puerto Rico", "dbpedia_uri": "http://dbpedia.org/resource/Puerto_Rico"}, "id": "PRI"}, {"geometry": {"type": "Polygon", "coordinates": [[[130.640016, 42.395009000000002], [130.78000700000001, 42.220007000000003], [130.40003100000001, 42.280003999999998], [129.96594899999999, 41.941367999999997], [129.667362, 41.601103999999999], [129.70518899999999, 40.882828000000003], [129.18811500000001, 40.661808000000001], [129.0104, 40.485436], [128.63336799999999, 40.189847], [127.96741400000001, 40.025413], [127.53343599999999, 39.75685], [127.50212000000001, 39.323931000000002], [127.385434, 39.213472000000003], [127.783343, 39.050897999999997], [128.349716, 38.612242999999999], [128.205746, 38.370396999999997], [127.780035, 38.304535999999999], [127.07330899999999, 38.256115000000001], [126.68371999999999, 37.804772999999997], [126.23733900000001, 37.840378000000001], [126.17475899999999, 37.749685999999997], [125.689104, 37.940010000000001], [125.568439, 37.752088999999998], [125.27533, 37.669071000000002], [125.240087, 37.857224000000002], [124.981033, 37.948821000000002], [124.71216099999999, 38.108345999999997], [124.98599400000001, 38.548473999999999], [125.221949, 38.665857000000003], [125.132859, 38.848559000000002], [125.38659, 39.387957999999998], [125.321116, 39.551385000000003], [124.737482, 39.660344000000002], [124.265625, 39.928493000000003], [125.079942, 40.569823999999997], [126.182045, 41.107335999999997], [126.869083, 41.816569000000001], [127.343783, 41.503152], [128.20843300000001, 41.466771999999999], [128.05221499999999, 41.994284999999998], [129.59666899999999, 42.424982], [129.99426700000001, 42.985387000000003], [130.640016, 42.395009000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u043e\u0440\u0435\u0439\u0441\u043a\u0430\u044f \u041d\u0430\u0440\u043e\u0434\u043d\u043e-\u0414\u0435\u043c\u043e\u043a\u0440\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430", "fr": "Cor\u00e9e du Nord", "en": "North Korea", "nl": "Noord-Korea", "pt": "Coreia do Norte", "no": "Nord-Korea", "de": "Nordkorea", "it": "Corea del Nord", "sv": "Nordkorea", "pl": "Korea P\u00f3\u0142nocna", "fi": "Korean demokraattinen kansantasavalta", "zh": "\u671d\u9c9c\u6c11\u4e3b\u4e3b\u4e49\u4eba\u6c11\u5171\u548c\u56fd", "ja": "\u671d\u9bae\u6c11\u4e3b\u4e3b\u7fa9\u4eba\u6c11\u5171\u548c\u56fd", "es": "Corea del Norte"}, "label_fr": "Cor\u00e9e du Nord", "name": "North Korea", "dbpedia_uri": "http://dbpedia.org/resource/North_Korea"}, "id": "PRK"}, {"geometry": {"type": "Polygon", "coordinates": [[[-9.0348179999999996, 41.880571000000003], [-8.6719460000000002, 42.134689000000002], [-8.2638569999999998, 42.280468999999997], [-8.0131750000000004, 41.790886], [-7.4225130000000004, 41.792074999999997], [-7.251309, 41.918346], [-6.6686059999999996, 41.883386999999999], [-6.3890880000000001, 41.381815000000003], [-6.851127, 41.111083000000001], [-6.86402, 40.330871999999999], [-7.0264129999999998, 40.184524000000003], [-7.066592, 39.711891999999999], [-7.4986319999999997, 39.629570999999999], [-7.0980369999999997, 39.030073000000002], [-7.3740920000000001, 38.373058999999998], [-7.0292810000000001, 38.075763999999999], [-7.1665080000000003, 37.803894], [-7.5371050000000004, 37.428904000000003], [-7.4537259999999996, 37.097788000000001], [-7.855613, 36.838268999999997], [-8.382816, 36.978879999999997], [-8.8988569999999996, 36.868808999999999], [-8.7461009999999995, 37.651345999999997], [-8.8399979999999996, 38.266243000000003], [-9.2874639999999999, 38.358485999999999], [-9.5265710000000006, 38.737428999999999], [-9.4469890000000003, 39.392066], [-9.0483049999999992, 39.755093000000002], [-8.9773530000000008, 40.159306000000001], [-8.7686840000000004, 40.760638999999998], [-8.7908530000000003, 41.184334], [-8.9907889999999995, 41.543458999999999], [-9.0348179999999996, 41.880571000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u043e\u0440\u0442\u0443\u0433\u0430\u043b\u0438\u044f", "fr": "Portugal", "en": "Portugal", "nl": "Portugal", "pt": "Portugal", "no": "Portugal", "de": "Portugal", "it": "Portogallo", "sv": "Portugal", "pl": "Portugalia", "fi": "Portugali", "zh": "\u8461\u8404\u7259", "ja": "\u30dd\u30eb\u30c8\u30ac\u30eb", "es": "Portugal"}, "label_fr": "Portugal", "name": "Portugal", "dbpedia_uri": "http://dbpedia.org/resource/Portugal"}, "id": "PRT"}, {"geometry": {"type": "Polygon", "coordinates": [[[-62.685057, -22.249029], [-62.291179, -21.051635000000001], [-62.265960999999997, -20.513735], [-61.786326000000003, -19.633737], [-60.043565000000001, -19.342746999999999], [-59.115042000000003, -19.356905999999999], [-58.183470999999997, -19.868399], [-58.166392000000002, -20.176701000000001], [-57.870674000000001, -20.732688], [-57.937156000000002, -22.090176], [-56.881509999999999, -22.282153999999998], [-56.473317000000002, -22.086300000000001], [-55.797958000000001, -22.356929999999998], [-55.610683000000002, -22.655619000000002], [-55.517639000000003, -23.571998000000001], [-55.400747000000003, -23.956935000000001], [-55.027901999999997, -24.001273999999999], [-54.652833999999999, -23.839577999999999], [-54.292960000000001, -24.021014000000001], [-54.293475999999998, -24.570799999999998], [-54.428946000000003, -25.162185000000001], [-54.625290999999997, -25.739255], [-54.788795, -26.621786], [-55.695846000000003, -27.387837000000001], [-56.486702000000001, -27.548499], [-57.609760000000001, -27.395899], [-58.618174000000003, -27.123719000000001], [-57.633659999999999, -25.603656999999998], [-57.777217, -25.16234], [-58.807127999999999, -24.771459], [-60.028965999999997, -24.032796000000001], [-60.846564999999998, -23.880713], [-62.685057, -22.249029]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041f\u0430\u0440\u0430\u0433\u0432\u0430\u0439", "fr": "Paraguay", "en": "Paraguay", "nl": "Paraguay", "pt": "Paraguai", "no": "Paraguay", "de": "Paraguay", "it": "Paraguay", "sv": "Paraguay", "pl": "Paragwaj", "fi": "Paraguay", "zh": "\u5df4\u62c9\u572d", "ja": "\u30d1\u30e9\u30b0\u30a2\u30a4", "es": "Paraguay"}, "label_fr": "Paraguay", "name": "Paraguay", "dbpedia_uri": "http://dbpedia.org/resource/Paraguay"}, "id": "PRY"}, {"geometry": {"type": "Polygon", "coordinates": [[[50.810108, 24.754743000000001], [50.743910999999997, 25.482424000000002], [51.013351999999998, 26.006992], [51.286462, 26.114581999999999], [51.589078999999998, 25.801113000000001], [51.606699999999996, 25.215669999999999], [51.389608000000003, 24.627386000000001], [51.112414999999999, 24.556331], [50.810108, 24.754743000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u041a\u0430\u0442\u0430\u0440", "fr": "Qatar", "en": "Qatar", "nl": "Qatar", "pt": "Qatar", "no": "Qatar", "de": "Katar", "it": "Qatar", "sv": "Qatar", "pl": "Katar", "fi": "Qatar", "zh": "\u5361\u5854\u5c14", "ja": "\u30ab\u30bf\u30fc\u30eb", "es": "Catar"}, "label_fr": "Qatar", "name": "Qatar", "dbpedia_uri": "http://dbpedia.org/resource/Qatar"}, "id": "QAT"}, {"geometry": {"type": "Polygon", "coordinates": [[[22.710531, 47.882193999999998], [23.142236, 48.096341000000002], [23.760957999999999, 47.985598000000003], [24.402056000000002, 47.981878000000002], [24.866316999999999, 47.737526000000003], [25.207743000000001, 47.891055999999999], [25.945941000000001, 47.987149000000002], [26.19745, 48.220880999999999], [26.619337000000002, 48.220725999999999], [26.924175999999999, 48.123263999999999], [27.233872999999999, 47.826771000000001], [27.551165999999998, 47.405116999999997], [28.128029999999999, 46.810476000000001], [28.160018000000001, 46.371563000000002], [28.054442999999999, 45.944586000000001], [28.233554000000002, 45.488283000000003], [28.679779, 45.304031000000002], [29.149725, 45.464925000000001], [29.603289, 45.293308000000003], [29.626543000000002, 45.035390999999997], [29.141611999999999, 44.820210000000003], [28.837858000000001, 44.913874], [28.558081000000001, 43.707462], [27.970106999999999, 43.812468000000003], [27.2424, 44.175986000000002], [26.065159000000001, 43.943494000000001], [25.569272000000002, 43.688445000000002], [24.100679, 43.741050999999999], [23.332301999999999, 43.897010999999999], [22.944832000000002, 43.823785000000001], [22.657150000000001, 44.234923000000002], [22.474008000000001, 44.409227999999999], [22.705725999999999, 44.578003000000002], [22.459022000000001, 44.702517], [22.145088000000001, 44.478422000000002], [21.562023, 44.768946999999997], [21.483526000000001, 45.181170000000002], [20.874313000000001, 45.416375000000002], [20.762174999999999, 45.734572999999997], [20.220192000000001, 46.127468999999998], [21.021951999999999, 46.316088000000001], [21.626515000000001, 46.994238000000003], [22.099768000000001, 47.672438999999997], [22.710531, 47.882193999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0420\u0443\u043c\u044b\u043d\u0438\u044f", "fr": "Roumanie", "en": "Romania", "nl": "Roemeni\u00eb", "pt": "Rom\u00e9nia", "no": "Romania", "de": "Rum\u00e4nien", "it": "Romania", "sv": "Rum\u00e4nien", "pl": "Rumunia", "fi": "Romania", "zh": "\u7f85\u99ac\u5c3c\u4e9e", "ja": "\u30eb\u30fc\u30de\u30cb\u30a2", "es": "Rumania"}, "label_fr": "Roumanie", "name": "Romania", "dbpedia_uri": "http://dbpedia.org/resource/Romania"}, "id": "ROU"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[143.64800700000001, 50.747599999999998], [144.65414799999999, 48.976391], [143.17392799999999, 49.306550999999999], [142.55866800000001, 47.861575000000002], [143.533492, 46.836728000000001], [143.50527700000001, 46.137908000000003], [142.74770100000001, 46.740765000000003], [142.09202999999999, 45.966754999999999], [141.906925, 46.805928999999999], [142.01844299999999, 47.780132999999999], [141.90444500000001, 48.859189000000001], [142.13579999999999, 49.615163000000003], [142.17998299999999, 50.952342000000002], [141.594076, 51.935434999999998], [141.682546, 53.301966], [142.606934, 53.762144999999997], [142.20974899999999, 54.225476], [142.654786, 54.365881000000002], [142.914616, 53.704577999999998], [143.26084800000001, 52.740760000000002], [143.23526799999999, 51.756659999999997], [143.64800700000001, 50.747599999999998]]], [[[22.731099, 54.327537], [20.892244999999999, 54.312525000000001], [19.660640000000001, 54.426084000000003], [19.888480999999999, 54.866160000000001], [21.268449, 55.190482000000003], [22.315723999999999, 55.015298999999999], [22.757764000000002, 54.856574000000002], [22.651052, 54.582740999999999], [22.731099, 54.327537]]], [[[-175.01425, 66.584350000000001], [-174.33983000000001, 66.335560000000001], [-174.57182, 67.062190000000001], [-171.85731000000001, 66.913079999999994], [-169.89957999999999, 65.977239999999995], [-170.89107000000001, 65.541390000000007], [-172.53025, 65.437910000000002], [-172.55500000000001, 64.460790000000003], [-172.95533, 64.252690000000001], [-173.89184, 64.282600000000002], [-174.65392, 64.631249999999994], [-175.98353, 64.922880000000006], [-176.20715999999999, 65.356669999999994], [-177.22265999999999, 65.520240000000001], [-178.35992999999999, 65.390519999999995], [-178.90332000000001, 65.740440000000007], [-178.68611000000001, 66.112110000000001], [-179.88377, 65.874560000000002], [-179.43268, 65.404110000000003], [-180, 64.979709], [-180, 68.963635999999994], [-177.55000000000001, 68.200000000000003], [-174.92824999999999, 67.205889999999997], [-175.01425, 66.584350000000001]]], [[[180, 70.832199000000003], [178.903425, 70.781139999999994], [178.7253, 71.098799999999997], [180, 71.515714000000003], [180, 70.832199000000003]]], [[[-178.69378, 70.893020000000007], [-180, 70.832199000000003], [-180, 71.515714000000003], [-179.87187499999999, 71.55762], [-179.02432999999999, 71.555530000000005], [-177.577945, 71.269480000000001], [-177.66357500000001, 71.132769999999994], [-178.69378, 70.893020000000007]]], [[[143.60384999999999, 73.212440000000001], [142.08762999999999, 73.205439999999996], [140.03815499999999, 73.316919999999996], [139.86312000000001, 73.369829999999993], [140.81171000000001, 73.765060000000005], [142.06207000000001, 73.857579999999999], [143.48283000000001, 73.475250000000003], [143.60384999999999, 73.212440000000001]]], [[[150.73167000000001, 75.084059999999994], [149.57592500000001, 74.688919999999996], [147.977465, 74.778355000000005], [146.11919, 75.172979999999995], [146.358485, 75.49682], [148.22223, 75.345844999999997], [150.73167000000001, 75.084059999999994]]], [[[145.086285, 75.562624999999997], [144.30000000000001, 74.819999999999993], [140.61381, 74.847679999999997], [138.95544000000001, 74.61148], [136.97439, 75.261669999999995], [137.51176000000001, 75.949169999999995], [138.831075, 76.136759999999995], [141.47161500000001, 76.092889999999997], [145.086285, 75.562624999999997]]], [[[57.535693000000002, 70.720464000000007], [56.944978999999996, 70.632743000000005], [53.677374999999998, 70.762658000000002], [53.412016999999999, 71.206661999999994], [51.601894999999999, 71.474759000000006], [51.455753999999999, 72.014881000000003], [52.478274999999996, 72.229442000000006], [52.444169000000002, 72.774731000000003], [54.427613999999998, 73.627548000000004], [53.508290000000002, 73.749814000000001], [55.902459, 74.627486000000005], [55.631932999999997, 75.081412], [57.868644000000003, 75.609390000000005], [61.170043999999997, 76.251883000000007], [64.498367999999999, 76.439054999999996], [66.210977, 76.809781999999998], [68.157060000000001, 76.939696999999995], [68.852210999999997, 76.544810999999996], [68.180572999999995, 76.233642000000003], [64.637326000000002, 75.737755000000007], [61.583508000000002, 75.260885000000002], [58.477082000000003, 74.309055999999998], [56.986786000000002, 73.333044000000001], [55.419336000000001, 72.371268000000001], [55.622838000000002, 71.540594999999996], [57.535693000000002, 70.720464000000007]]], [[[106.97013, 76.974189999999993], [107.23999999999999, 76.480000000000004], [108.1538, 76.723349999999996], [111.07726, 76.709999999999994], [113.33150999999999, 76.222239999999999], [114.13417, 75.847639999999998], [113.88539, 75.327789999999993], [112.77918, 75.031859999999995], [110.15125, 74.476730000000003], [109.40000000000001, 74.180000000000007], [110.64, 74.040000000000006], [112.11919, 73.787739999999999], [113.01954000000001, 73.976929999999996], [113.52958, 73.335049999999995], [113.96881, 73.594880000000003], [115.56782, 73.752849999999995], [118.77633, 73.587720000000004], [119.02, 73.120000000000005], [123.20066, 72.971220000000002], [123.25776999999999, 73.735029999999995], [125.38, 73.560000000000002], [126.97644, 73.565489999999997], [128.59126000000001, 73.038709999999995], [129.05157, 72.398719999999997], [128.46000000000001, 71.980000000000004], [129.71599000000001, 71.193039999999996], [131.28858, 70.786990000000003], [132.2535, 71.836299999999994], [133.85766000000001, 71.386420000000001], [135.56192999999999, 71.655249999999995], [137.49754999999999, 71.347629999999995], [138.23409000000001, 71.628029999999995], [139.86983000000001, 71.487830000000002], [139.14791, 72.41619], [140.46816999999999, 72.849410000000006], [149.5, 72.200000000000003], [150.35118, 71.606430000000003], [152.96889999999999, 70.842219999999998], [157.00688, 71.031409999999994], [158.99779000000001, 70.866720000000001], [159.83031, 70.453239999999994], [159.70866000000001, 69.721980000000002], [160.94053, 69.437280000000001], [162.27906999999999, 69.642039999999994], [164.05248, 69.668229999999994], [165.94037, 69.471990000000005], [167.83566999999999, 69.582689999999999], [169.57763, 68.693799999999996], [170.81688, 69.013630000000006], [170.00819999999999, 69.652760000000001], [170.45345, 70.097030000000004], [173.64391000000001, 69.817430000000002], [175.72403, 69.877250000000004], [178.59999999999999, 69.400000000000006], [180, 68.963635999999994], [180, 64.979709], [179.99280999999999, 64.974329999999995], [178.7072, 64.534930000000003], [177.41128, 64.60821], [178.31299999999999, 64.07593], [178.90825000000001, 63.25197], [179.37034, 62.982619999999997], [179.48635999999999, 62.568939999999998], [179.22825, 62.304099999999998], [177.36429999999999, 62.521900000000002], [174.56929, 61.769150000000003], [173.68012999999999, 61.652610000000003], [172.15000000000001, 60.950000000000003], [170.6985, 60.336179999999999], [170.33085, 59.881770000000003], [168.90046000000001, 60.573549999999997], [166.29498000000001, 59.788550000000001], [165.84, 60.159999999999997], [164.87674000000001, 59.7316], [163.53928999999999, 59.86871], [163.21710999999999, 59.211010000000002], [162.01732999999999, 58.243279999999999], [162.05296999999999, 57.839120000000001], [163.19191000000001, 57.615029999999997], [163.05794, 56.159239999999997], [162.12958, 56.122190000000003], [161.70146, 55.285679999999999], [162.11749, 54.855139999999999], [160.36877000000001, 54.344329999999999], [160.02172999999999, 53.202570000000001], [158.53093999999999, 52.958680000000001], [158.23117999999999, 51.942689999999999], [156.78979000000001, 51.011049999999997], [156.41999999999999, 51.700000000000003], [155.99181999999999, 53.158949999999997], [155.43366, 55.381030000000003], [155.91442000000001, 56.767919999999997], [156.75815, 57.364699999999999], [156.81035, 57.832039999999999], [158.36433, 58.055750000000003], [160.15064000000001, 59.314770000000003], [161.87204, 60.343000000000004], [163.66969, 61.140900000000002], [164.47354999999999, 62.550609999999999], [163.25842, 62.466270000000002], [162.65790999999999, 61.642499999999998], [160.12147999999999, 60.544229999999999], [159.30232000000001, 61.773960000000002], [156.72067999999999, 61.434420000000003], [154.21806000000001, 59.758180000000003], [155.04374999999999, 59.144950000000001], [152.81184999999999, 58.883850000000002], [151.26572999999999, 58.780889999999999], [151.33815000000001, 59.503959999999999], [149.78371000000001, 59.655729999999998], [148.54481000000001, 59.164479999999998], [145.48722000000001, 59.336370000000002], [142.19782000000001, 59.03998], [138.95848000000001, 57.088050000000003], [135.12619000000001, 54.729590000000002], [136.70170999999999, 54.603549999999998], [137.19342, 53.977319999999999], [138.16470000000001, 53.755009999999999], [138.80463, 54.254550000000002], [139.90151, 54.189680000000003], [141.34531000000001, 53.089570000000002], [141.37923000000001, 52.238770000000002], [140.59742, 51.239669999999997], [140.51308, 50.045529999999999], [140.06192999999999, 48.446710000000003], [138.55472, 46.999650000000003], [138.21970999999999, 46.307949999999998], [136.86232000000001, 45.143500000000003], [135.51535000000001, 43.988999999999997], [134.86939000000001, 43.398209999999999], [133.53686999999999, 42.81147], [132.90627000000001, 42.798490000000001], [132.27807000000001, 43.284559999999999], [130.93586999999999, 42.55274], [130.78, 42.219999999999999], [130.63999999999999, 42.395000000000003], [130.63386600000001, 42.903015000000003], [131.144688, 42.929989999999997], [131.288555, 44.111519999999999], [131.02519000000001, 44.967959999999998], [131.883454, 45.321162000000001], [133.09711999999999, 45.144089999999998], [133.769644, 46.116926999999997], [134.11234999999999, 47.212479999999999], [134.50081, 47.578449999999997], [135.02631099999999, 48.478230000000003], [133.37359599999999, 48.183441999999999], [132.50668999999999, 47.788960000000003], [130.98725999999999, 47.790129999999998], [130.58229299999999, 48.729686999999998], [129.397818, 49.440600000000003], [127.6574, 49.760269999999998], [127.28745600000001, 50.739797000000003], [126.93915699999999, 51.353893999999997], [126.56439899999999, 51.784255000000002], [125.946349, 52.792799000000002], [125.06821100000001, 53.161045000000001], [123.57147000000001, 53.458799999999997], [122.24574800000001, 53.431725999999998], [121.003085, 53.251401000000001], [120.177089, 52.753886000000001], [120.72578900000001, 52.516226000000003], [120.73820000000001, 51.964109999999998], [120.18208, 51.643549999999998], [119.27939000000001, 50.582920000000001], [119.288461, 50.142882999999998], [117.879244, 49.510983000000003], [116.67880100000001, 49.888531], [115.48569500000001, 49.805177], [114.96211, 50.140247000000002], [114.36245599999999, 50.248303], [112.89774, 49.543565000000001], [111.581231, 49.377968000000003], [110.66201100000001, 49.130127999999999], [109.402449, 49.292960999999998], [108.475167, 49.282547999999998], [107.86817600000001, 49.793705000000003], [106.88880399999999, 50.274296], [105.886591, 50.406019000000001], [104.62157999999999, 50.275320000000001], [103.676545, 50.089965999999997], [102.25588999999999, 50.510559999999998], [102.06520999999999, 51.259909999999998], [100.88948000000001, 51.516855999999997], [99.981731999999994, 51.634005999999999], [98.861491000000001, 52.047365999999997], [97.825739999999996, 51.010995000000001], [98.231762000000003, 50.422401000000001], [97.25976, 49.726050000000001], [95.814019999999999, 49.977460000000001], [94.815949000000003, 50.013432999999999], [94.147565999999998, 50.480536999999998], [93.104209999999995, 50.495289999999997], [92.234712000000002, 50.802171000000001], [90.713667000000001, 50.331811999999999], [88.805566999999996, 49.470520999999998], [87.751264000000006, 49.297198000000002], [87.359970000000004, 49.214981000000002], [86.829357000000002, 49.826675000000002], [85.541269999999997, 49.692858999999999], [85.115560000000002, 50.117303], [84.416376999999997, 50.311399999999999], [83.935114999999996, 50.889246], [83.383004, 51.069183000000002], [81.945986000000005, 50.812196], [80.568447000000006, 51.388336000000002], [80.035560000000004, 50.864750999999998], [77.800916000000001, 53.404415], [76.525178999999994, 54.177002999999999], [76.891099999999994, 54.490524000000001], [74.384820000000005, 53.546849999999999], [73.425679000000002, 53.489809999999999], [73.508516, 54.035617000000002], [72.224149999999995, 54.376655], [71.180131000000003, 54.133285000000001], [70.865267000000003, 55.169733999999998], [69.068167000000003, 55.385249999999999], [68.1691, 54.970391999999997], [65.666870000000003, 54.60125], [65.178533999999999, 54.354227999999999], [61.436599999999999, 54.006250000000001], [60.978065999999998, 53.664993000000003], [61.699986000000003, 52.979996], [60.739992999999998, 52.719985999999999], [60.927269000000003, 52.447547999999998], [59.967534000000001, 51.960419999999999], [61.588003, 51.272658999999997], [61.337423999999999, 50.79907], [59.932806999999997, 50.842193999999999], [59.642282000000002, 50.545442000000001], [58.363320000000002, 51.063639999999999], [56.777979999999999, 51.043550000000003], [55.716940000000001, 50.62171], [54.532877999999997, 51.026240000000001], [52.328724000000001, 51.718651999999999], [50.766648000000004, 51.692762000000002], [48.702382, 50.605128000000001], [48.577840999999999, 49.874760000000002], [47.549480000000003, 50.454698], [46.751595999999999, 49.356006000000001], [47.043672000000001, 49.152039000000002], [46.466445999999998, 48.394151999999998], [47.315240000000003, 47.715850000000003], [48.057250000000003, 47.743769999999998], [48.694733999999997, 47.075628000000002], [48.593249999999998, 46.561039999999998], [49.10116, 46.399329999999999], [48.645409999999998, 45.806289999999997], [47.675910000000002, 45.641489999999997], [46.682009999999998, 44.609200000000001], [47.590940000000003, 43.660159999999998], [47.492519999999999, 42.986579999999996], [48.58437, 41.808880000000002], [47.987282999999998, 41.405819000000001], [47.815666, 41.151415999999998], [47.373314999999998, 41.219732], [46.686070999999998, 41.827137], [46.404950999999997, 41.860675000000001], [45.776400000000002, 42.092440000000003], [45.470278999999998, 42.502780999999999], [44.537623000000004, 42.711993], [43.93121, 42.554960000000001], [43.755989999999997, 42.740830000000003], [42.394399999999997, 43.220300000000002], [40.922190000000001, 43.382150000000003], [40.076965000000001, 43.553103999999998], [39.955008999999997, 43.434998], [38.68, 44.280000000000001], [37.539119999999997, 44.657209999999999], [36.675460000000001, 45.244689999999999], [37.403170000000003, 45.404510000000002], [38.232950000000002, 46.240870000000001], [37.673720000000003, 46.636569999999999], [39.147669999999998, 47.044750000000001], [39.121200000000002, 47.263359999999999], [38.223537999999998, 47.10219], [38.255111999999997, 47.546399999999998], [38.770569999999999, 47.825620000000001], [39.738278000000001, 47.898936999999997], [39.895620000000001, 48.232410000000002], [39.67465, 48.783819999999999], [40.080789000000003, 49.307429999999997], [40.069040000000001, 49.601050000000001], [38.594988000000001, 49.926462000000001], [38.010630999999997, 49.915661999999998], [37.393459999999997, 50.383952999999998], [36.626168, 50.225591000000001], [35.356116, 50.577196999999998], [35.37791, 50.773940000000003], [35.022182999999998, 51.207571999999999], [34.224815999999997, 51.255992999999997], [34.141978000000002, 51.566412999999997], [34.391731, 51.768881999999998], [33.752699999999997, 52.335075000000003], [32.715761000000001, 52.238464999999998], [32.412058000000002, 52.288694999999997], [32.159439999999996, 52.061250000000001], [31.785969999999999, 52.101680000000002], [31.540018, 52.742052000000001], [31.305201, 53.073996000000001], [31.497640000000001, 53.167430000000003], [32.304518999999999, 53.132725999999998], [32.693643000000002, 53.351421000000002], [32.405599000000002, 53.618045000000002], [31.731273000000002, 53.794029000000002], [31.791423999999999, 53.974639000000003], [31.384471999999999, 54.157055999999997], [30.757534, 54.811771], [30.971836, 55.081547999999998], [30.873909000000001, 55.550975999999999], [29.896294000000001, 55.789462999999998], [29.371572, 55.670090999999999], [29.229513000000001, 55.918343999999998], [28.176708999999999, 56.169130000000003], [27.855281999999999, 56.759326000000001], [27.770015999999998, 57.244258000000002], [27.288184999999999, 57.474527999999999], [27.716685999999999, 57.791899000000001], [27.42015, 58.72457], [28.131699000000001, 59.300825000000003], [27.981120000000001, 59.475369999999998], [29.117699999999999, 60.02805], [28.07, 60.503520000000002], [30.211106999999998, 61.780028000000001], [31.139990999999998, 62.357692999999998], [31.516092, 62.867686999999997], [30.035872000000001, 63.552813999999998], [30.444685, 64.204453000000001], [29.544429999999998, 64.948672000000002], [30.217649999999999, 65.805980000000005], [29.054589, 66.944286000000005], [29.977426000000001, 67.698296999999997], [28.445944000000001, 68.364613000000006], [28.591930000000001, 69.064777000000007], [29.399550000000001, 69.15692], [31.10108, 69.558109999999999], [32.132719999999999, 69.905950000000004], [33.775469999999999, 69.301419999999993], [36.513959999999997, 69.063419999999994], [40.292340000000003, 67.932400000000001], [41.059869999999997, 67.457130000000006], [41.125950000000003, 66.791579999999996], [40.015830000000001, 66.266180000000006], [38.382950000000001, 65.999529999999993], [33.918709999999997, 66.759609999999995], [33.184440000000002, 66.632530000000003], [34.814770000000003, 65.900149999999996], [34.878574, 65.436212999999995], [34.943910000000002, 64.414370000000005], [36.231290000000001, 64.109449999999995], [37.012729999999998, 63.849829999999997], [37.141970000000001, 64.334710000000001], [36.539579000000003, 64.76446], [37.17604, 65.143219999999999], [39.593449999999997, 64.520790000000005], [40.435600000000001, 64.76446], [39.762599999999999, 65.49682], [42.093089999999997, 66.476230000000001], [43.016039999999997, 66.418580000000006], [43.949750000000002, 66.06908], [44.532260000000001, 66.756339999999994], [43.698390000000003, 67.352450000000005], [44.187950000000001, 67.950509999999994], [43.452820000000003, 68.570790000000002], [46.25, 68.25], [46.821339999999999, 67.689970000000002], [45.555169999999997, 67.566519999999997], [45.562019999999997, 67.010050000000007], [46.349150000000002, 66.667670000000001], [47.894159999999999, 66.884550000000004], [48.138759999999998, 67.522379999999998], [50.22766, 67.998670000000004], [53.71743, 68.857380000000006], [54.471710000000002, 68.808149999999998], [53.485819999999997, 68.201310000000007], [54.726280000000003, 68.097020000000001], [55.442680000000003, 68.438659999999999], [57.317019999999999, 68.466279999999998], [58.802, 68.88082], [59.941420000000001, 68.278440000000003], [61.077840000000002, 68.940690000000004], [60.030000000000001, 69.519999999999996], [60.549999999999997, 69.849999999999994], [63.503999999999998, 69.547389999999993], [64.888114999999999, 69.234835000000004], [68.512159999999994, 68.092330000000004], [69.180679999999995, 68.615629999999996], [68.164439999999999, 69.144360000000006], [68.135220000000004, 69.356489999999994], [66.930080000000004, 69.454610000000002], [67.25976, 69.928730000000002], [66.724919999999997, 70.708889999999997], [66.694659999999999, 71.028970000000001], [68.540059999999997, 71.9345], [69.196359999999999, 72.843360000000004], [69.939999999999998, 73.040000000000006], [72.587540000000004, 72.776290000000003], [72.796030000000002, 72.220060000000004], [71.848110000000005, 71.40898], [72.470110000000005, 71.090190000000007], [72.791880000000006, 70.391139999999993], [72.564700000000002, 69.020849999999996], [73.667869999999994, 68.407899999999998], [73.238699999999994, 67.740399999999994], [71.280000000000001, 66.319999999999993], [72.423010000000005, 66.172669999999997], [72.820769999999996, 66.532669999999996], [73.920990000000003, 66.789460000000005], [74.186509999999998, 67.284289999999999], [75.052000000000007, 67.760469999999998], [74.469260000000006, 68.328990000000005], [74.935839999999999, 68.989180000000005], [73.842359999999999, 69.071460000000002], [73.601870000000005, 69.627629999999996], [74.399799999999999, 70.631749999999997], [73.101100000000002, 71.44717], [74.890820000000005, 72.121189999999999], [74.659260000000003, 72.832269999999994], [75.158010000000004, 72.854969999999994], [75.683509999999998, 72.300560000000004], [75.288979999999995, 71.335560000000001], [76.359110000000001, 71.152869999999993], [75.903130000000004, 71.874009999999998], [77.576650000000001, 72.267169999999993], [79.652019999999993, 72.32011], [81.5, 71.75], [80.610709999999997, 72.582849999999993], [80.511089999999996, 73.648200000000003], [82.25, 73.849999999999994], [84.655259999999998, 73.805909999999997], [86.822299999999998, 73.936880000000002], [86.009559999999993, 74.459670000000003], [87.166820000000001, 75.116429999999994], [88.315709999999996, 75.143929999999997], [90.260000000000005, 75.640000000000001], [92.900580000000005, 75.773330000000001], [93.234210000000004, 76.047200000000004], [95.859999999999999, 76.140000000000001], [96.678210000000007, 75.915480000000002], [98.922539999999998, 76.446889999999996], [100.75967, 76.430279999999996], [101.03532, 76.861890000000002], [101.99084000000001, 77.287540000000007], [104.3516, 77.697919999999996], [106.06664000000001, 77.373890000000003], [104.705, 77.127399999999994], [106.97013, 76.974189999999993]]], [[[105.07547, 78.306889999999996], [99.438140000000004, 77.921000000000006], [101.2649, 79.233990000000006], [102.08635, 79.346410000000006], [102.83781500000001, 79.281289999999998], [105.37242999999999, 78.713340000000002], [105.07547, 78.306889999999996]]], [[[51.136187, 80.547280000000001], [49.793685000000004, 80.415428000000006], [48.894410999999998, 80.339567000000002], [48.754936999999998, 80.175467999999995], [47.586118999999997, 80.010181000000003], [46.502825999999999, 80.247247000000002], [47.072454999999998, 80.559424000000007], [44.846958000000001, 80.58981], [46.799138999999997, 80.771917999999999], [48.318477000000001, 80.784009999999995], [48.522806000000003, 80.514568999999995], [49.097189999999998, 80.753985999999998], [50.039768000000002, 80.918885000000003], [51.522933000000002, 80.699725999999998], [51.136187, 80.547280000000001]]], [[[99.939760000000007, 78.880939999999995], [97.757940000000005, 78.756200000000007], [94.972589999999997, 79.044745000000006], [93.312880000000007, 79.426500000000004], [92.545400000000001, 80.143789999999996], [91.181070000000005, 80.341459999999998], [93.777659999999997, 81.024600000000007], [95.940894999999998, 81.250399999999999], [97.883849999999995, 80.746975000000006], [100.186655, 79.780135000000001], [99.939760000000007, 78.880939999999995]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0420\u043e\u0441\u0441\u0438\u044f", "fr": "Russie", "en": "Russia", "nl": "Rusland", "pt": "R\u00fassia", "no": "Russland", "de": "Russland", "it": "Russia", "sv": "Ryssland", "pl": "Rosja", "fi": "Ven\u00e4j\u00e4", "zh": "\u4fc4\u7f57\u65af", "ja": "\u30ed\u30b7\u30a2", "es": "Rusia"}, "label_fr": "Russie", "name": "Russia", "dbpedia_uri": "http://dbpedia.org/resource/Russia"}, "id": "RUS"}, {"geometry": {"type": "Polygon", "coordinates": [[[30.419104999999998, -1.1346590000000001], [30.816134999999999, -1.698914], [30.758309000000001, -2.2872499999999998], [30.469695999999999, -2.4138579999999998], [29.938358999999998, -2.348487], [29.632176000000001, -2.9178579999999998], [29.024926000000001, -2.8392580000000001], [29.117478999999999, -2.292211], [29.254835, -2.2151100000000001], [29.291886999999999, -1.6200559999999999], [29.579466, -1.341313], [29.821518999999999, -1.443322], [30.419104999999998, -1.1346590000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0420\u0443\u0430\u043d\u0434\u0430", "fr": "Rwanda", "en": "Rwanda", "nl": "Rwanda", "pt": "Ruanda", "no": "Rwanda", "de": "Ruanda", "it": "Ruanda", "sv": "Rwanda", "pl": "Rwanda", "fi": "Ruanda", "zh": "\u5362\u65fa\u8fbe", "ja": "\u30eb\u30ef\u30f3\u30c0", "es": "Ruanda"}, "label_fr": "Rwanda", "name": "Rwanda", "dbpedia_uri": "http://dbpedia.org/resource/Rwanda"}, "id": "RWA"}, {"geometry": {"type": "Polygon", "coordinates": [[[-8.7948839999999997, 27.120695999999999], [-8.8178280000000004, 27.656426], [-8.6655899999999999, 27.656426], [-8.6651240000000005, 27.589479000000001], [-8.6844000000000001, 27.395744000000001], [-8.6872939999999996, 25.881056000000001], [-11.969419, 25.933353], [-11.937224000000001, 23.374593999999998], [-12.874222, 23.284832000000002], [-13.118753999999999, 22.77122], [-12.929102, 21.327071], [-16.845193999999999, 21.333323], [-17.063423, 20.999752000000001], [-17.020427999999999, 21.42231], [-17.002962, 21.420733999999999], [-14.750954999999999, 21.500599999999999], [-14.630833000000001, 21.860939999999999], [-14.221168, 22.310162999999999], [-13.891109999999999, 23.691009000000001], [-12.500963, 24.770116000000002], [-12.030759, 26.030866], [-11.718220000000001, 26.104092000000001], [-11.392555, 26.883424000000002], [-10.551263000000001, 26.990808000000001], [-10.189424000000001, 26.860945000000001], [-9.7353430000000003, 26.860945000000001], [-9.4130369999999992, 27.088476], [-8.7948839999999997, 27.120695999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0417\u0430\u043f\u0430\u0434\u043d\u0430\u044f \u0421\u0430\u0445\u0430\u0440\u0430", "fr": "Sahara occidental", "en": "Western Sahara", "nl": "Westelijke Sahara", "pt": "Saara Ocidental", "no": "Vest-Sahara", "de": "Westsahara", "it": "Sahara Occidentale", "sv": "V\u00e4stsahara", "pl": "Sahara Zachodnia", "fi": "L\u00e4nsi-Sahara", "zh": "\u897f\u6492\u54c8\u62c9", "ja": "\u897f\u30b5\u30cf\u30e9", "es": "Sahara Occidental"}, "label_fr": "Sahara occidental", "name": "Western Sahara", "dbpedia_uri": "http://dbpedia.org/resource/Western_Sahara"}, "id": "ESH"}, {"geometry": {"type": "Polygon", "coordinates": [[[42.779331999999997, 16.347891000000001], [42.649572999999997, 16.774635], [42.347988999999998, 17.075806], [42.270887999999999, 17.474722], [41.754382, 17.833046], [41.221390999999997, 18.671600000000002], [40.939340999999999, 19.486484999999998], [40.247652000000002, 20.174634999999999], [39.801684999999999, 20.338861999999999], [39.139398999999997, 21.291905], [39.023696000000001, 21.986875000000001], [39.066329000000003, 22.579656], [38.492772000000002, 23.688451000000001], [38.023859999999999, 24.078686000000001], [37.483635, 24.285495000000001], [37.154817999999999, 24.858483], [37.209491, 25.084541999999999], [36.931626999999999, 25.602958999999998], [36.639603999999999, 25.826228], [36.249136999999997, 26.570136000000002], [35.640182000000003, 27.376519999999999], [35.130186999999999, 28.063351999999998], [34.632336000000002, 28.058546], [34.787779, 28.607427000000001], [34.83222, 28.957483], [34.956037000000002, 29.356555], [36.068941000000002, 29.197495], [36.501213999999997, 29.505254000000001], [36.740527999999998, 29.865283000000002], [37.503582000000002, 30.003775999999998], [37.668120000000002, 30.338664999999999], [37.998849, 30.508500000000002], [37.002166000000003, 31.508413000000001], [39.004885999999999, 32.010216999999997], [39.195467999999998, 32.161009], [40.399994, 31.889991999999999], [41.889980999999999, 31.190009], [44.709499000000001, 29.178891], [46.568713000000002, 29.099025000000001], [47.459822000000003, 29.002518999999999], [47.708851000000003, 28.526063000000001], [48.416094000000001, 28.552004], [48.807594999999999, 27.689627999999999], [49.299554000000001, 27.461217999999999], [49.470914, 27.109998999999998], [50.152422000000001, 26.689662999999999], [50.212935000000002, 26.277027], [50.113303000000002, 25.943971999999999], [50.239859000000003, 25.608049999999999], [50.527386999999997, 25.327808000000001], [50.660556999999997, 24.999896], [50.810108, 24.754743000000001], [51.112414999999999, 24.556331], [51.389608000000003, 24.627386000000001], [51.579518999999998, 24.245497], [51.617708, 24.014219000000001], [52.000732999999997, 23.001154], [55.006802999999998, 22.496948], [55.208340999999997, 22.70833], [55.666659000000003, 22.000001000000001], [54.999982000000003, 19.999994000000001], [52.000010000000003, 19.000003], [49.116672000000001, 18.616668000000001], [48.183343999999998, 18.166668999999999], [47.466695000000001, 17.116682000000001], [47.000005000000002, 16.949998999999998], [46.749994000000001, 17.283338000000001], [46.366658999999999, 17.233315000000001], [45.399999000000001, 17.333335000000002], [45.216650999999999, 17.433329000000001], [44.062612999999999, 17.410359], [43.791519000000001, 17.319977000000002], [43.380794000000002, 17.579986999999999], [43.115797999999998, 17.088439999999999], [43.218375000000002, 16.666889999999999], [42.779331999999997, 16.347891000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0430\u0443\u0434\u043e\u0432\u0441\u043a\u0430\u044f \u0410\u0440\u0430\u0432\u0438\u044f", "fr": "Arabie saoudite", "en": "Saudi Arabia", "nl": "Saoedi-Arabi\u00eb", "pt": "Ar\u00e1bia Saudita", "no": "Saudi-Arabia", "de": "Saudi-Arabien", "it": "Arabia Saudita", "sv": "Saudiarabien", "pl": "Arabia Saudyjska", "fi": "Saudi-Arabia", "zh": "\u6c99\u7279\u963f\u62c9\u4f2f", "ja": "\u30b5\u30a6\u30b8\u30a2\u30e9\u30d3\u30a2", "es": "Arabia Saudita"}, "label_fr": "Arabie saoudite", "name": "Saudi Arabia", "dbpedia_uri": "http://dbpedia.org/resource/Saudi_Arabia"}, "id": "SAU"}, {"geometry": {"type": "Polygon", "coordinates": [[[33.963393000000003, 9.4642850000000003], [33.824962999999997, 9.4840610000000005], [33.842131000000002, 9.9819150000000008], [33.721958999999998, 10.325262], [33.206938000000001, 10.720112], [33.086765999999997, 11.441141], [33.206938000000001, 12.179338], [32.743419000000003, 12.248008], [32.674750000000003, 12.024832], [32.073892000000001, 11.973330000000001], [32.314234999999996, 11.681483999999999], [32.400072000000002, 11.080626000000001], [31.850715999999998, 10.531271], [31.352861999999998, 9.8102409999999995], [30.837841000000001, 9.7072369999999992], [29.996638999999998, 10.290927], [29.618957000000002, 10.084918999999999], [29.515953, 9.7930740000000007], [29.000931999999999, 9.6042319999999997], [28.966597, 9.3982240000000008], [27.970890000000001, 9.3982240000000008], [27.833551, 9.6042319999999997], [27.112521000000001, 9.6385670000000001], [26.752006000000002, 9.4668930000000007], [26.477328, 9.5527300000000004], [25.962306999999999, 10.136421], [25.790633, 10.411099], [25.069604000000002, 10.273759999999999], [24.794926, 9.8102409999999995], [24.537414999999999, 8.9175380000000004], [24.194068000000001, 8.7286959999999993], [23.886980000000001, 8.6197300000000006], [23.805813000000001, 8.6663189999999997], [23.459012999999999, 8.9542859999999997], [23.394779, 9.2650679999999994], [23.55725, 9.6812179999999994], [23.554303999999998, 10.089255], [22.977544000000002, 10.714463], [22.864165, 11.142395], [22.87622, 11.38461], [22.508690000000001, 11.679360000000001], [22.497620000000001, 12.26024], [22.28801, 12.646050000000001], [21.936810000000001, 12.588179999999999], [22.037590000000002, 12.95546], [22.296579999999999, 13.37232], [22.18329, 13.786479999999999], [22.51202, 14.09318], [22.303509999999999, 14.32682], [22.56795, 14.944290000000001], [23.02459, 15.680720000000001], [23.886890000000001, 15.61084], [23.83766, 19.580469999999998], [23.850000000000001, 20], [25, 20.003039999999999], [25, 22], [29.02, 22], [32.899999999999999, 22], [36.866230000000002, 22], [37.188720000000004, 21.01885], [36.969410000000003, 20.837440000000001], [37.114699999999999, 19.807960000000001], [37.481789999999997, 18.614090000000001], [37.862760000000002, 18.36786], [38.410089999999997, 17.998307], [37.904000000000003, 17.42754], [37.167470000000002, 17.26314], [36.852530000000002, 16.95655], [36.753889999999998, 16.29186], [36.323219999999999, 14.82249], [36.429510000000001, 14.42211], [36.270220000000002, 13.563330000000001], [35.863630000000001, 12.578279999999999], [35.260489999999997, 12.08286], [34.831629999999997, 11.318960000000001], [34.73115, 10.910170000000001], [34.257449999999999, 10.630089999999999], [33.961620000000003, 9.5835799999999995], [33.963393000000003, 9.4642850000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0443\u0434\u0430\u043d", "fr": "Soudan", "en": "Sudan", "nl": "Soedan", "pt": "Sud\u00e3o", "no": "Sudan", "de": "Sudan", "it": "Sudan", "sv": "Sudan", "pl": "Sudan", "fi": "Sudan", "zh": "\u82cf\u4e39\u5171\u548c\u56fd", "ja": "\u30b9\u30fc\u30c0\u30f3", "es": "Sud\u00e1n"}, "label_fr": "Soudan", "name": "Sudan", "dbpedia_uri": "http://dbpedia.org/resource/Sudan"}, "id": "SDN"}, {"geometry": {"type": "Polygon", "coordinates": [[[33.963393000000003, 9.4642850000000003], [33.974980000000002, 8.6845599999999994], [33.825499999999998, 8.3791600000000006], [33.294800000000002, 8.3545800000000003], [32.954180000000001, 7.7849700000000004], [33.568289999999998, 7.7133399999999996], [34.075099999999999, 7.2259500000000001], [34.250320000000002, 6.8260699999999996], [34.70702, 6.59422], [35.298006999999998, 5.5060000000000002], [34.620196, 4.8471229999999998], [34.005000000000003, 4.2498849999999999], [33.390000000000001, 3.79], [32.686419999999998, 3.7923200000000001], [31.881450000000001, 3.5582699999999998], [31.245560000000001, 3.7818999999999998], [30.833850000000002, 3.5091700000000001], [29.953489999999999, 4.1737000000000002], [29.715994999999999, 4.6008050000000003], [29.159078000000001, 4.3892670000000003], [28.696677999999999, 4.4550770000000002], [28.428993999999999, 4.2871550000000003], [27.979977000000002, 4.4084130000000004], [27.374226, 5.2339440000000002], [27.213408999999999, 5.5509529999999998], [26.465909, 5.9467169999999996], [26.213418000000001, 6.5466030000000002], [25.796648000000001, 6.9793159999999999], [25.124130999999998, 7.5000850000000003], [25.114932, 7.8251039999999996], [24.567368999999999, 8.2291880000000006], [23.886980000000001, 8.6197300000000006], [24.194068000000001, 8.7286959999999993], [24.537414999999999, 8.9175380000000004], [24.794926, 9.8102409999999995], [25.069604000000002, 10.273759999999999], [25.790633, 10.411099], [25.962306999999999, 10.136421], [26.477328, 9.5527300000000004], [26.752006000000002, 9.4668930000000007], [27.112521000000001, 9.6385670000000001], [27.833551, 9.6042319999999997], [27.970890000000001, 9.3982240000000008], [28.966597, 9.3982240000000008], [29.000931999999999, 9.6042319999999997], [29.515953, 9.7930740000000007], [29.618957000000002, 10.084918999999999], [29.996638999999998, 10.290927], [30.837841000000001, 9.7072369999999992], [31.352861999999998, 9.8102409999999995], [31.850715999999998, 10.531271], [32.400072000000002, 11.080626000000001], [32.314234999999996, 11.681483999999999], [32.073892000000001, 11.973330000000001], [32.674750000000003, 12.024832], [32.743419000000003, 12.248008], [33.206938000000001, 12.179338], [33.086765999999997, 11.441141], [33.206938000000001, 10.720112], [33.721958999999998, 10.325262], [33.842131000000002, 9.9819150000000008], [33.824962999999997, 9.4840610000000005], [33.963393000000003, 9.4642850000000003]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042e\u0436\u043d\u044b\u0439 \u0421\u0443\u0434\u0430\u043d", "fr": "Soudan du Sud", "en": "South Sudan", "nl": "Zuid-Soedan", "pt": "Sud\u00e3o do Sul", "no": "S\u00f8r-Sudan", "de": "S\u00fcdsudan", "it": "Sudan del Sud", "sv": "Sydsudan", "pl": "Sudan Po\u0142udniowy", "fi": "Etel\u00e4-Sudan", "zh": "\u5357\u8607\u4e39", "ja": "\u5357\u30b9\u30fc\u30c0\u30f3", "es": "Sud\u00e1n del Sur"}, "label_fr": "Soudan du Sud", "name": "South Sudan", "dbpedia_uri": "http://dbpedia.org/resource/South_Sudan"}, "id": "SDS"}, {"geometry": {"type": "Polygon", "coordinates": [[[-16.713729000000001, 13.594958999999999], [-17.126107000000001, 14.373516], [-17.625043000000002, 14.729540999999999], [-17.185172999999999, 14.919477000000001], [-16.700706, 15.621527], [-16.463097999999999, 16.135035999999999], [-16.12069, 16.455663000000001], [-15.623666, 16.369337000000002], [-15.135737000000001, 16.587281999999998], [-14.577348000000001, 16.598264], [-14.099520999999999, 16.304302], [-13.435738000000001, 16.039383000000001], [-12.830658, 15.303692], [-12.17075, 14.616834000000001], [-12.124886999999999, 13.994726999999999], [-11.927716, 13.422075], [-11.553398, 13.141214], [-11.467898999999999, 12.754519], [-11.513942999999999, 12.442988], [-11.658301, 12.386583], [-12.203564999999999, 12.465648], [-12.278599, 12.35444], [-12.499051, 12.332090000000001], [-13.217817999999999, 12.575874000000001], [-13.700476, 12.586183], [-15.548477, 12.628170000000001], [-15.816573999999999, 12.515567000000001], [-16.147717, 12.547762000000001], [-16.677451999999999, 12.384852], [-16.841525000000001, 13.151394], [-15.931296, 13.130284], [-15.691001, 13.270353], [-15.511813, 13.27857], [-15.141163000000001, 13.509512000000001], [-14.712197, 13.298207], [-14.277702, 13.280585], [-13.844963, 13.505042], [-14.046991999999999, 13.794067999999999], [-14.376714, 13.625679999999999], [-14.687030999999999, 13.630357], [-15.081735, 13.876492000000001], [-15.398770000000001, 13.860369], [-15.624596, 13.623587000000001], [-16.713729000000001, 13.594958999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0435\u043d\u0435\u0433\u0430\u043b", "fr": "S\u00e9n\u00e9gal", "en": "Senegal", "nl": "Senegal", "pt": "Senegal", "no": "Senegal", "de": "Senegal", "it": "Senegal", "sv": "Senegal", "pl": "Senegal", "fi": "Senegal", "zh": "\u585e\u5185\u52a0\u5c14", "ja": "\u30bb\u30cd\u30ac\u30eb", "es": "Senegal"}, "label_fr": "S\u00e9n\u00e9gal", "name": "Senegal", "dbpedia_uri": "http://dbpedia.org/resource/Senegal"}, "id": "SEN"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[162.11902499999999, -10.482718999999999], [162.39864600000001, -10.826366999999999], [161.70003199999999, -10.820010999999999], [161.31979699999999, -10.204751], [161.917383, -10.446700999999999], [162.11902499999999, -10.482718999999999]]], [[[160.85222899999999, -9.8729370000000003], [160.46258800000001, -9.8952100000000005], [159.849447, -9.7940269999999998], [159.64000300000001, -9.6399799999999995], [159.702945, -9.2429500000000004], [160.362956, -9.4003040000000002], [160.68851799999999, -9.6101620000000008], [160.85222899999999, -9.8729370000000003]]], [[[161.679982, -9.5999820000000007], [161.52939699999999, -9.7843119999999999], [160.788253, -8.9175430000000002], [160.57999699999999, -8.3200090000000007], [160.920028, -8.3200090000000007], [161.28000599999999, -9.1200109999999999], [161.679982, -9.5999820000000007]]], [[[159.87502699999999, -8.3373200000000001], [159.91740200000001, -8.5382899999999999], [159.13367700000001, -8.1141810000000003], [158.58611400000001, -7.7548240000000002], [158.21115, -7.4218719999999996], [158.35997800000001, -7.3200180000000001], [158.82000099999999, -7.560003], [159.64000300000001, -8.0200270000000007], [159.87502699999999, -8.3373200000000001]]], [[[157.53842599999999, -7.3478199999999996], [157.33941999999999, -7.4047669999999997], [156.90203, -7.1768739999999998], [156.49135799999999, -6.765943], [156.54282799999999, -6.5993380000000004], [157.13999999999999, -7.0216380000000003], [157.53842599999999, -7.3478199999999996]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u043e\u043b\u043e\u043c\u043e\u043d\u043e\u0432\u044b \u041e\u0441\u0442\u0440\u043e\u0432\u0430", "fr": "Salomon (pays)", "en": "Solomon Islands", "nl": "Salomonseilanden", "pt": "Ilhas Salom\u00e3o", "no": "Salomon\u00f8yene", "de": "Salomonen", "it": "Isole Salomone", "sv": "Salomon\u00f6arna", "pl": "Wyspy Salomona", "fi": "Salomonsaaret", "zh": "\u6240\u7f57\u95e8\u7fa4\u5c9b", "ja": "\u30bd\u30ed\u30e2\u30f3\u8af8\u5cf6", "es": "Islas Salom\u00f3n"}, "label_fr": "Salomon (pays)", "name": "Solomon Islands", "dbpedia_uri": "http://dbpedia.org/resource/Solomon_Islands"}, "id": "SLB"}, {"geometry": {"type": "Polygon", "coordinates": [[[-11.438779, 6.7859170000000004], [-11.708195, 6.8600979999999998], [-12.428099, 7.2629419999999998], [-12.949049, 7.7986459999999997], [-13.124025, 8.1639459999999993], [-13.246549999999999, 8.9030489999999993], [-12.711957999999999, 9.3427120000000006], [-12.596719, 9.6201880000000006], [-12.425929, 9.8358340000000002], [-12.150338, 9.8585720000000006], [-11.917277, 10.046984], [-11.117481, 10.045873], [-10.839152, 9.6882459999999995], [-10.622394999999999, 9.2679100000000005], [-10.654769999999999, 8.9771780000000003], [-10.494315, 8.715541], [-10.505477000000001, 8.3488959999999999], [-10.230093999999999, 8.4062059999999992], [-10.695595000000001, 7.9394640000000001], [-11.146704, 7.396706], [-11.199802, 7.1058459999999997], [-11.438779, 6.7859170000000004]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u044c\u0435\u0440\u0440\u0430-\u041b\u0435\u043e\u043d\u0435", "fr": "Sierra Leone", "en": "Sierra Leone", "nl": "Sierra Leone", "pt": "Serra Leoa", "no": "Sierra Leone", "de": "Sierra Leone", "it": "Sierra Leone", "sv": "Sierra Leone", "pl": "Sierra Leone", "fi": "Sierra Leone", "zh": "\u585e\u62c9\u5229\u6602", "ja": "\u30b7\u30a8\u30e9\u30ec\u30aa\u30cd", "es": "Sierra Leona"}, "label_fr": "Sierra Leone", "name": "Sierra Leone", "dbpedia_uri": "http://dbpedia.org/resource/Sierra_Leone"}, "id": "SLE"}, {"geometry": {"type": "Polygon", "coordinates": [[[-87.793110999999996, 13.38448], [-87.904111999999998, 13.149017000000001], [-88.483301999999995, 13.163951000000001], [-88.843227999999996, 13.259734], [-89.256743, 13.458532999999999], [-89.812393999999998, 13.520621999999999], [-90.095555000000004, 13.735338], [-90.064678000000001, 13.881970000000001], [-89.721934000000005, 14.134228], [-89.534218999999993, 14.244816], [-89.587343000000004, 14.362586], [-89.353325999999996, 14.424132999999999], [-89.058511999999993, 14.340028999999999], [-88.843073000000004, 14.140506999999999], [-88.541230999999996, 13.980155], [-88.503997999999996, 13.845485999999999], [-88.065342999999999, 13.964626000000001], [-87.859515000000002, 13.893312], [-87.723502999999994, 13.78505], [-87.793110999999996, 13.38448]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0430\u043b\u044c\u0432\u0430\u0434\u043e\u0440", "fr": "Salvador", "en": "El Salvador", "nl": "El Salvador", "pt": "El Salvador", "no": "El Salvador", "de": "El Salvador", "it": "El Salvador", "sv": "El Salvador", "pl": "Salwador", "fi": "El Salvador", "zh": "\u8428\u5c14\u74e6\u591a", "ja": "\u30a8\u30eb\u30b5\u30eb\u30d0\u30c9\u30eb", "es": "El Salvador"}, "label_fr": "Salvador", "name": "El Salvador", "dbpedia_uri": "http://dbpedia.org/resource/El_Salvador"}, "id": "SLV"}, {"geometry": {"type": "Polygon", "coordinates": [[[48.938130000000001, 9.4517489999999995], [48.486736000000001, 8.8376260000000002], [47.78942, 8.0030000000000001], [46.948327999999997, 7.9968769999999996], [43.678750000000001, 9.1835799999999992], [43.296975000000003, 9.5404769999999992], [42.92812, 10.021940000000001], [42.558759999999999, 10.57258], [42.776851999999998, 10.926879], [43.145305, 11.46204], [43.470660000000002, 11.277710000000001], [43.666668000000001, 10.864169], [44.117804, 10.445538000000001], [44.614258999999997, 10.442205], [45.556941000000002, 10.698029], [46.645401, 10.816549], [47.525658, 11.127228000000001], [48.021596000000002, 11.193064], [48.378784000000003, 11.375482], [48.948205999999999, 11.410622], [48.942005000000002, 11.394266], [48.938490999999999, 10.982327], [48.938232999999997, 9.9734999999999996], [48.938130000000001, 9.4517489999999995]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u043e\u043c\u0430\u043b\u0438\u043b\u0435\u043d\u0434", "fr": "Somaliland", "en": "Somaliland", "nl": "Somaliland", "pt": "Somalil\u00e2ndia", "no": "Somaliland", "de": "Somaliland", "it": "Somaliland", "sv": "Somaliland", "pl": "Somaliland", "fi": "Somalimaa", "zh": "\u7d22\u9a6c\u91cc\u5170", "ja": "\u30bd\u30de\u30ea\u30e9\u30f3\u30c9", "es": "Somalilandia"}, "label_fr": "Somaliland", "name": "Somaliland", "dbpedia_uri": "http://dbpedia.org/resource/Somaliland"}, "id": "-99"}, {"geometry": {"type": "Polygon", "coordinates": [[[49.728619999999999, 11.578900000000001], [50.258780000000002, 11.67957], [50.732019999999999, 12.0219], [51.111199999999997, 12.02464], [51.133870000000002, 11.748150000000001], [51.041530000000002, 11.166510000000001], [51.045310000000001, 10.6409], [50.834180000000003, 10.279719999999999], [50.552390000000003, 9.1987400000000008], [50.070920000000001, 8.0817300000000003], [49.4527, 6.8046600000000002], [48.594549999999998, 5.3391099999999998], [47.740789999999997, 4.2194000000000003], [46.56476, 2.8552900000000001], [45.563989999999997, 2.04576], [44.068150000000003, 1.0528299999999999], [43.13597, 0.29220000000000002], [42.04157, -0.91915999999999998], [41.810949999999998, -1.4464699999999999], [41.585129999999999, -1.6832499999999999], [40.993000000000002, -0.85829], [40.981050000000003, 2.7845200000000001], [41.855083, 3.9189120000000002], [42.128610000000002, 4.2341300000000004], [42.769669999999998, 4.2525899999999996], [43.660870000000003, 4.9575500000000003], [44.9636, 5.00162], [47.78942, 8.0030000000000001], [48.486736000000001, 8.8376260000000002], [48.938130000000001, 9.4517489999999995], [48.938232999999997, 9.9734999999999996], [48.938490999999999, 10.982327], [48.942005000000002, 11.394266], [48.948205000000002, 11.410617], [49.267760000000003, 11.43033], [49.728619999999999, 11.578900000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u043e\u043c\u0430\u043b\u0438", "fr": "Somalie", "en": "Somalia", "nl": "Somali\u00eb", "pt": "Som\u00e1lia", "no": "Somalia", "de": "Somalia", "it": "Somalia", "sv": "Somalia", "pl": "Somalia", "fi": "Somalia", "zh": "\u7d22\u9a6c\u91cc", "ja": "\u30bd\u30de\u30ea\u30a2", "es": "Somalia"}, "label_fr": "Somalie", "name": "Somalia", "dbpedia_uri": "http://dbpedia.org/resource/Somalia"}, "id": "SOM"}, {"geometry": {"type": "Polygon", "coordinates": [[[20.874313000000001, 45.416375000000002], [21.483526000000001, 45.181170000000002], [21.562023, 44.768946999999997], [22.145088000000001, 44.478422000000002], [22.459022000000001, 44.702517], [22.705725999999999, 44.578003000000002], [22.474008000000001, 44.409227999999999], [22.657150000000001, 44.234923000000002], [22.410446, 44.008063], [22.500157000000002, 43.642814000000001], [22.986018999999999, 43.211160999999997], [22.604800999999998, 42.898519], [22.436595000000001, 42.580320999999998], [22.545012, 42.461362000000001], [22.380526, 42.320259999999998], [21.917079999999999, 42.303640000000001], [21.576636000000001, 42.245224], [21.543320000000001, 42.320250000000001], [21.66292, 42.439219999999999], [21.77505, 42.682699999999997], [21.633019999999998, 42.677169999999997], [21.438659999999999, 42.862549999999999], [21.27421, 42.909590000000001], [21.143395000000002, 43.068685000000002], [20.956510000000002, 43.130940000000002], [20.81448, 43.27205], [20.635079999999999, 43.216709999999999], [20.496790000000001, 42.884689999999999], [20.257580000000001, 42.812750000000001], [20.3398, 42.898519999999998], [19.958570000000002, 43.10604], [19.629999999999999, 43.21378], [19.483889999999999, 43.352290000000004], [19.218520000000002, 43.52384], [19.454000000000001, 43.568100000000001], [19.59976, 44.038469999999997], [19.117609999999999, 44.423070000000003], [19.368030000000001, 44.863], [19.005479999999999, 44.860230000000001], [19.390476, 45.236516000000002], [19.072769000000001, 45.521510999999997], [18.829820000000002, 45.908880000000003], [19.596045, 46.171729999999997], [20.220192000000001, 46.127468999999998], [20.762174999999999, 45.734572999999997], [20.874313000000001, 45.416375000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0435\u0440\u0431\u0438\u044f", "fr": "Serbie", "en": "Serbia", "nl": "Servi\u00eb", "pt": "S\u00e9rvia", "no": "Serbia", "de": "Serbien", "it": "Serbia", "sv": "Serbien", "pl": "Serbia", "fi": "Serbia", "zh": "\u585e\u5c14\u7ef4\u4e9a", "ja": "\u30bb\u30eb\u30d3\u30a2", "es": "Serbia"}, "label_fr": "Serbie", "name": "Republic of Serbia", "dbpedia_uri": "http://dbpedia.org/resource/Serbia"}, "id": "SRB"}, {"geometry": {"type": "Polygon", "coordinates": [[[-57.147435999999999, 5.9731500000000004], [-55.949317999999998, 5.7728780000000004], [-55.84178, 5.953125], [-55.033250000000002, 6.0252910000000002], [-53.958044999999998, 5.7565480000000004], [-54.478633000000002, 4.8967559999999999], [-54.399541999999997, 4.2126109999999999], [-54.006931000000002, 3.6200380000000001], [-54.181725999999998, 3.1897799999999998], [-54.269705000000002, 2.7323919999999999], [-54.524754000000001, 2.311849], [-55.097586999999997, 2.5237479999999999], [-55.569755000000001, 2.4215059999999999], [-55.973322000000003, 2.510364], [-56.073341999999997, 2.2207949999999999], [-55.9056, 2.0219960000000001], [-55.995697999999997, 1.8176669999999999], [-56.539386, 1.8995230000000001], [-57.150098, 2.7689270000000001], [-57.281433, 3.3334920000000001], [-57.601568999999998, 3.3346550000000001], [-58.044694, 4.0608639999999996], [-57.860210000000002, 4.5768009999999997], [-57.914288999999997, 4.8126259999999998], [-57.307245999999999, 5.0735669999999997], [-57.147435999999999, 5.9731500000000004]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0443\u0440\u0438\u043d\u0430\u043c", "fr": "Suriname", "en": "Suriname", "nl": "Suriname", "pt": "Suriname", "no": "Surinam", "de": "Suriname", "it": "Suriname", "sv": "Surinam", "pl": "Surinam", "fi": "Suriname", "zh": "\u8607\u5229\u5357", "ja": "\u30b9\u30ea\u30ca\u30e0", "es": "Surinam"}, "label_fr": "Suriname", "name": "Suriname", "dbpedia_uri": "http://dbpedia.org/resource/Suriname"}, "id": "SUR"}, {"geometry": {"type": "Polygon", "coordinates": [[[18.853144, 49.496229999999997], [18.909575, 49.435845999999998], [19.320713000000001, 49.571573999999998], [19.825023000000002, 49.217125000000003], [20.415838999999998, 49.431452999999998], [20.887955000000002, 49.328772000000001], [21.607807999999999, 49.470106999999999], [22.558138, 49.085737999999999], [22.280842, 48.825392000000001], [22.085608000000001, 48.422263999999998], [21.872236000000001, 48.319971000000002], [20.801293999999999, 48.623854000000001], [20.473562000000001, 48.562849999999997], [20.239053999999999, 48.327567000000002], [19.769470999999999, 48.202691000000002], [19.661363999999999, 48.266615000000002], [19.174365000000002, 48.111378999999999], [18.777024999999998, 48.081767999999997], [18.696512999999999, 47.880954000000003], [17.857133000000001, 47.758429], [17.488472999999999, 47.867466], [16.979666999999999, 48.123497], [16.879982999999999, 48.470013000000002], [16.960287999999998, 48.596981999999997], [17.101984999999999, 48.816969], [17.545006999999998, 48.800018999999999], [17.886485, 48.903475], [17.913512000000001, 48.996493000000001], [18.104973000000001, 49.043982999999997], [18.170497999999998, 49.271515000000001], [18.399994, 49.315001000000002], [18.554970999999998, 49.495015000000002], [18.853144, 49.496229999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u043b\u043e\u0432\u0430\u043a\u0438\u044f", "fr": "Slovaquie", "en": "Slovakia", "nl": "Slowakije", "pt": "Eslov\u00e1quia", "no": "Slovakia", "de": "Slowakei", "it": "Slovacchia", "sv": "Slovakien", "pl": "S\u0142owacja", "fi": "Slovakia", "zh": "\u65af\u6d1b\u4f10\u514b", "ja": "\u30b9\u30ed\u30d0\u30ad\u30a2", "es": "Eslovaquia"}, "label_fr": "Slovaquie", "name": "Slovakia", "dbpedia_uri": "http://dbpedia.org/resource/Slovakia"}, "id": "SVK"}, {"geometry": {"type": "Polygon", "coordinates": [[[13.806475000000001, 46.509306000000002], [14.632472, 46.431817000000002], [15.137092000000001, 46.658703000000003], [16.011664, 46.683610999999999], [16.202297999999999, 46.852386000000003], [16.370505000000001, 46.841327], [16.564807999999999, 46.503751000000001], [15.768732999999999, 46.238107999999997], [15.671530000000001, 45.834153999999998], [15.323954000000001, 45.731783], [15.327674999999999, 45.452316000000003], [14.935244000000001, 45.471694999999997], [14.595109000000001, 45.634940999999998], [14.411968, 45.466166000000001], [13.715059999999999, 45.500323999999999], [13.93763, 45.591016000000003], [13.69811, 46.016778000000002], [13.806475000000001, 46.509306000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u043b\u043e\u0432\u0435\u043d\u0438\u044f", "fr": "Slov\u00e9nie", "en": "Slovenia", "nl": "Sloveni\u00eb", "pt": "Eslov\u00e9nia", "no": "Slovenia", "de": "Slowenien", "it": "Slovenia", "sv": "Slovenien", "pl": "S\u0142owenia", "fi": "Slovenia", "zh": "\u65af\u6d1b\u6587\u5c3c\u4e9a", "ja": "\u30b9\u30ed\u30d9\u30cb\u30a2", "es": "Eslovenia"}, "label_fr": "Slov\u00e9nie", "name": "Slovenia", "dbpedia_uri": "http://dbpedia.org/resource/Slovenia"}, "id": "SVN"}, {"geometry": {"type": "Polygon", "coordinates": [[[22.183173, 65.723741000000004], [21.213517, 65.026004999999998], [21.369630999999998, 64.413588000000004], [19.778876, 63.609554000000003], [17.847778999999999, 62.749400000000001], [17.119554999999998, 61.341166000000001], [17.831346, 60.636583000000002], [18.787721999999999, 60.081913999999998], [17.869225, 58.953766000000002], [16.829184999999999, 58.719827000000002], [16.447710000000001, 57.041117999999997], [15.879785999999999, 56.104301999999997], [14.666681000000001, 56.200885], [14.100721, 55.407781], [12.942911, 55.361736999999998], [12.625101000000001, 56.307079999999999], [11.787941999999999, 57.441817], [11.027369, 58.856149000000002], [11.468272000000001, 59.432392999999998], [12.300366, 60.117933000000001], [12.631147, 61.293571999999998], [11.992063999999999, 61.800362], [11.930569, 63.128318], [12.579935000000001, 64.066219000000004], [13.571916, 64.049114000000003], [13.919905, 64.445420999999996], [13.55569, 64.787028000000007], [15.108411, 66.193866999999997], [16.108712000000001, 67.302456000000006], [16.768878999999998, 68.013936999999999], [17.729182000000002, 68.010552000000004], [17.993867999999999, 68.567391000000001], [19.87856, 68.407194000000004], [20.025269000000002, 69.065139000000002], [20.645593000000002, 69.106246999999996], [21.978535000000001, 68.616845999999995], [23.539473000000001, 67.936008999999999], [23.56588, 66.396051], [23.903379000000001, 66.006927000000005], [22.183173, 65.723741000000004]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0428\u0432\u0435\u0446\u0438\u044f", "fr": "Su\u00e8de", "en": "Sweden", "nl": "Zweden", "pt": "Su\u00e9cia", "no": "Sverige", "de": "Schweden", "it": "Svezia", "sv": "Sverige", "pl": "Szwecja", "fi": "Ruotsi", "zh": "\u745e\u5178", "ja": "\u30b9\u30a6\u30a7\u30fc\u30c7\u30f3", "es": "Suecia"}, "label_fr": "Su\u00e8de", "name": "Sweden", "dbpedia_uri": "http://dbpedia.org/resource/Sweden"}, "id": "SWE"}, {"geometry": {"type": "Polygon", "coordinates": [[[32.071665000000003, -26.733820000000001], [31.86806, -27.177927], [31.282772999999999, -27.285879000000001], [30.685962, -26.743845], [30.676608999999999, -26.398078000000002], [30.949667000000002, -26.022649000000001], [31.044080000000001, -25.731452000000001], [31.333158000000001, -25.660191000000001], [31.837778, -25.843332], [31.985779000000001, -26.291779999999999], [32.071665000000003, -26.733820000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0432\u0430\u0437\u0438\u043b\u0435\u043d\u0434", "fr": "Swaziland", "en": "Swaziland", "nl": "Swaziland", "pt": "Suazil\u00e2ndia", "no": "Swaziland", "de": "Swasiland", "it": "Swaziland", "sv": "Swaziland", "pl": "Suazi", "fi": "Swazimaa", "zh": "\u65af\u5a01\u58eb\u5170", "ja": "\u30b9\u30ef\u30b8\u30e9\u30f3\u30c9", "es": "Suazilandia"}, "label_fr": "Swaziland", "name": "Swaziland", "dbpedia_uri": "http://dbpedia.org/resource/Swaziland"}, "id": "SWZ"}, {"geometry": {"type": "Polygon", "coordinates": [[[38.792341, 33.378686000000002], [36.834062000000003, 32.312938000000003], [35.719918, 32.709192000000002], [35.700797999999999, 32.716014000000001], [35.836396999999998, 32.868122999999997], [35.821100999999999, 33.277425999999998], [36.066459999999999, 33.824911999999998], [36.611750000000001, 34.201788999999998], [36.448194000000001, 34.593935000000002], [35.998403000000003, 34.644914], [35.905023, 35.410009000000002], [36.149763, 35.821534999999997], [36.417549999999999, 36.040616999999997], [36.685389000000001, 36.259698999999998], [36.739494000000001, 36.817520000000002], [37.066761, 36.623035999999999], [38.167726999999999, 36.901209999999999], [38.699891000000001, 36.712927000000001], [39.522579999999998, 36.716054], [40.673259000000002, 37.091276000000001], [41.212088999999999, 37.074351999999998], [42.349590999999997, 37.229872999999998], [41.837063999999998, 36.605854000000001], [41.289707, 36.358815], [41.383965000000003, 35.628317000000003], [41.006158999999997, 34.419372000000003], [38.792341, 33.378686000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u0438\u0440\u0438\u044f", "fr": "Syrie", "en": "Syria", "nl": "Syri\u00eb", "pt": "S\u00edria", "no": "Syria", "de": "Syrien", "it": "Siria", "sv": "Syrien", "pl": "Syria", "fi": "Syyria", "zh": "\u53d9\u5229\u4e9a", "ja": "\u30b7\u30ea\u30a2", "es": "Siria"}, "label_fr": "Syrie", "name": "Syria", "dbpedia_uri": "http://dbpedia.org/resource/Syria"}, "id": "SYR"}, {"geometry": {"type": "Polygon", "coordinates": [[[14.495787, 12.859396], [14.595781000000001, 13.330427], [13.954477000000001, 13.353448999999999], [13.956699, 13.996691], [13.540393999999999, 14.367134], [13.97217, 15.684369999999999], [15.247731, 16.627306000000001], [15.300440999999999, 17.927949999999999], [15.685741, 19.957180000000001], [15.903247, 20.387619000000001], [15.487147999999999, 20.730415000000001], [15.47106, 21.048449999999999], [15.096888, 21.308519], [14.8513, 22.862950000000001], [15.860849999999999, 23.40972], [19.849260000000001, 21.495090000000001], [23.83766, 19.580469999999998], [23.886890000000001, 15.61084], [23.02459, 15.680720000000001], [22.56795, 14.944290000000001], [22.303509999999999, 14.32682], [22.51202, 14.09318], [22.18329, 13.786479999999999], [22.296579999999999, 13.37232], [22.037590000000002, 12.95546], [21.936810000000001, 12.588179999999999], [22.28801, 12.646050000000001], [22.497620000000001, 12.26024], [22.508690000000001, 11.679360000000001], [22.87622, 11.38461], [22.864165, 11.142395], [22.231128999999999, 10.971888999999999], [21.723821999999998, 10.567055999999999], [21.000868000000001, 9.4759849999999997], [20.059685000000002, 9.0127059999999997], [19.094007999999999, 9.0748470000000001], [18.812010000000001, 8.9829150000000002], [18.911021999999999, 8.6308950000000006], [18.389555000000001, 8.2813040000000004], [17.964929999999999, 7.8909140000000004], [16.705988000000001, 7.5083279999999997], [16.456185000000001, 7.7347739999999998], [16.290562000000001, 7.7543069999999998], [16.106231999999999, 7.4970879999999998], [15.27946, 7.4219249999999999], [15.436092, 7.692812], [15.120865999999999, 8.3821499999999993], [14.979996, 8.7961039999999997], [14.544466999999999, 8.9658610000000003], [13.954217999999999, 9.5494950000000003], [14.171466000000001, 10.021378], [14.627200999999999, 9.9209189999999996], [14.909354, 9.9921290000000003], [15.467873000000001, 9.9823369999999993], [14.923565, 10.891325], [14.960152000000001, 11.555574], [14.893359999999999, 12.219049999999999], [14.495787, 12.859396]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0427\u0430\u0434", "fr": "Tchad", "en": "Chad", "nl": "Tsjaad", "pt": "Chade", "no": "Tsjad", "de": "Tschad", "it": "Ciad", "sv": "Tchad", "pl": "Czad", "fi": "T\u0161ad", "zh": "\u4e4d\u5f97", "ja": "\u30c1\u30e3\u30c9", "es": "Chad"}, "label_fr": "Tchad", "name": "Chad", "dbpedia_uri": "http://dbpedia.org/resource/Chad"}, "id": "TCD"}, {"geometry": {"type": "Polygon", "coordinates": [[[1.8652409999999999, 6.1421580000000002], [1.060122, 5.9288369999999997], [0.83693099999999998, 6.279979], [0.570384, 6.9143590000000001], [0.49095699999999998, 7.4117439999999997], [0.71202900000000002, 8.3124649999999995], [0.46119199999999999, 8.6772229999999997], [0.36590099999999998, 9.4650040000000004], [0.36758000000000002, 10.191212999999999], [-0.049785000000000003, 10.706918], [0.023803000000000001, 11.018682], [0.899563, 10.997339], [0.77233600000000002, 10.470808], [1.0777950000000001, 10.175606999999999], [1.4250609999999999, 9.8253950000000003], [1.4630430000000001, 9.3346239999999998], [1.6644779999999999, 9.1285900000000009], [1.618951, 6.8320379999999998], [1.8652409999999999, 6.1421580000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u043e\u0433\u043e", "fr": "Togo", "en": "Togo", "nl": "Togo", "pt": "Togo", "no": "Togo", "de": "Togo", "it": "Togo", "sv": "Togo", "pl": "Togo", "fi": "Togo", "zh": "\u591a\u54e5", "ja": "\u30c8\u30fc\u30b4", "es": "Togo"}, "label_fr": "Togo", "name": "Togo", "dbpedia_uri": "http://dbpedia.org/resource/Togo"}, "id": "TGO"}, {"geometry": {"type": "Polygon", "coordinates": [[[102.58493199999999, 12.186595000000001], [101.687158, 12.64574], [100.83181, 12.627084999999999], [100.97846699999999, 13.412722], [100.097797, 13.406855999999999], [100.018733, 12.307001], [99.478921, 10.846367000000001], [99.153772000000004, 9.9630609999999997], [99.222398999999996, 9.239255], [99.873831999999993, 9.2078620000000004], [100.279647, 8.2951530000000009], [100.45927399999999, 7.4295730000000004], [101.01732800000001, 6.8568689999999997], [101.623079, 6.7406220000000001], [102.141187, 6.2216360000000002], [101.81428200000001, 5.8108079999999998], [101.154219, 5.6913840000000002], [101.07551599999999, 6.2048670000000001], [100.259596, 6.6428250000000002], [100.085757, 6.4644890000000004], [99.690691000000001, 6.8482130000000003], [99.519642000000005, 7.3434540000000004], [98.988253, 7.9079930000000003], [98.503786000000005, 8.3823050000000006], [98.339662000000004, 7.7945120000000001], [98.150008999999997, 8.3500069999999997], [98.259150000000005, 8.9739229999999992], [98.553550999999999, 9.9329599999999996], [99.038121000000004, 10.960546000000001], [99.587286000000006, 11.892763], [99.196353999999999, 12.804748], [99.212012000000001, 13.269294], [99.097755000000006, 13.827503], [98.430819, 14.622028], [98.192074000000005, 15.123703000000001], [98.537375999999995, 15.308496999999999], [98.903347999999994, 16.177824000000001], [98.493761000000006, 16.837835999999999], [97.859122999999997, 17.567945999999999], [97.375895999999997, 18.445437999999999], [97.797782999999995, 18.627079999999999], [98.253724000000005, 19.708203000000001], [98.959676000000002, 19.752980999999998], [99.543308999999994, 20.186598], [100.115988, 20.417850000000001], [100.54888099999999, 20.109238000000001], [100.60629400000001, 19.508344000000001], [101.282015, 19.462585000000001], [101.03593100000001, 18.408928], [101.05954800000001, 17.512497], [102.113592, 18.109102], [102.413005, 17.932782], [102.998706, 17.961694999999999], [103.200192, 18.309632000000001], [103.95647700000001, 18.240953999999999], [104.716947, 17.428858999999999], [104.779321, 16.441865], [105.589039, 15.570316], [105.544338, 14.723934], [105.218777, 14.273211999999999], [104.281418, 14.416743], [102.988422, 14.225721], [102.348099, 13.394247], [102.58493199999999, 12.186595000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0430\u0438\u043b\u0430\u043d\u0434", "fr": "Tha\u00eflande", "en": "Thailand", "nl": "Thailand", "pt": "Tail\u00e2ndia", "no": "Thailand", "de": "Thailand", "it": "Thailandia", "sv": "Thailand", "pl": "Tajlandia", "fi": "Thaimaa", "zh": "\u6cf0\u56fd", "ja": "\u30bf\u30a4\u738b\u56fd", "es": "Tailandia"}, "label_fr": "Tha\u00eflande", "name": "Thailand", "dbpedia_uri": "http://dbpedia.org/resource/Thailand"}, "id": "THA"}, {"geometry": {"type": "Polygon", "coordinates": [[[71.014197999999993, 40.244365999999999], [70.648019000000005, 39.935754000000003], [69.559610000000006, 40.103211000000002], [69.464887000000004, 39.526682999999998], [70.549161999999995, 39.604197999999997], [71.784694000000002, 39.279463], [73.675379000000007, 39.431237000000003], [73.928852000000006, 38.505814999999998], [74.257514, 38.606507000000001], [74.864816000000005, 38.378846000000003], [74.829986000000005, 37.990006999999999], [74.980001999999999, 37.419989999999999], [73.948695999999998, 37.421565999999999], [73.260056000000006, 37.495257000000002], [72.636889999999994, 37.047558000000002], [72.193040999999994, 36.948287999999998], [71.844638000000003, 36.738171000000001], [71.448693000000006, 37.065645000000004], [71.541917999999995, 37.905774000000001], [71.239403999999993, 37.953265000000002], [71.348130999999995, 38.258904999999999], [70.806820999999999, 38.486282000000003], [70.376304000000005, 38.138396], [70.270573999999996, 37.735165000000002], [70.116578000000004, 37.588222999999999], [69.518784999999994, 37.608997000000002], [69.196273000000005, 37.151144000000002], [68.859446000000005, 37.344335999999998], [68.135561999999993, 37.023114999999997], [67.829999999999998, 37.144993999999997], [68.392032999999998, 38.157024999999997], [68.176024999999996, 38.901553], [67.442220000000006, 39.140143999999999], [67.701429000000005, 39.580477999999999], [68.536416000000003, 39.533453000000002], [69.011633000000003, 40.086157999999998], [69.329494999999994, 40.727823999999998], [70.666622000000004, 40.960213000000003], [70.458160000000007, 40.496495000000003], [70.601406999999995, 40.218527000000002], [71.014197999999993, 40.244365999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0430\u0434\u0436\u0438\u043a\u0438\u0441\u0442\u0430\u043d", "fr": "Tadjikistan", "en": "Tajikistan", "nl": "Tadzjikistan", "pt": "Tadjiquist\u00e3o", "no": "Tadsjikistan", "de": "Tadschikistan", "it": "Tagikistan", "sv": "Tadzjikistan", "pl": "Tad\u017cykistan", "fi": "Tad\u017eikistan", "zh": "\u5854\u5409\u514b\u65af\u5766", "ja": "\u30bf\u30b8\u30ad\u30b9\u30bf\u30f3", "es": "Tayikist\u00e1n"}, "label_fr": "Tadjikistan", "name": "Tajikistan", "dbpedia_uri": "http://dbpedia.org/resource/Tajikistan"}, "id": "TJK"}, {"geometry": {"type": "Polygon", "coordinates": [[[61.210816999999999, 35.650072000000002], [61.123071000000003, 36.491596999999999], [60.377637999999997, 36.527383], [59.234762000000003, 37.412987999999999], [58.436154000000002, 37.522309], [57.330433999999997, 38.029229000000001], [56.619365999999999, 38.121394000000002], [56.180374999999998, 37.935127000000001], [55.511578, 37.964117000000002], [54.800303999999997, 37.392420999999999], [53.921598000000003, 37.198917999999999], [53.735511000000002, 37.906135999999996], [53.880929000000002, 38.952092999999998], [53.101027999999999, 39.290573999999999], [53.357807999999999, 39.975285999999997], [52.693973, 40.033628999999998], [52.915250999999998, 40.876522999999999], [53.858139000000001, 40.631034], [54.736845000000002, 40.951014999999998], [54.008310999999999, 41.551211000000002], [53.721713000000001, 42.123190999999998], [52.91675, 41.868116999999998], [52.814689000000001, 41.135370999999999], [52.502459999999999, 41.783315999999999], [52.944293000000002, 42.116033999999999], [54.079417999999997, 42.324109], [54.755344999999998, 42.043970999999999], [55.455250999999997, 41.259858999999999], [55.968190999999997, 41.308641999999999], [57.096390999999997, 41.322310000000002], [56.932214999999999, 41.826025999999999], [57.786529999999999, 42.170552999999998], [58.629010999999998, 42.751550999999999], [59.976421999999999, 42.223081999999998], [60.083340999999997, 41.425145999999998], [60.465952999999999, 41.220326999999997], [61.547179, 41.266370000000002], [61.882714, 41.084857], [62.37426, 40.053885999999999], [63.518014999999998, 39.363256999999997], [64.170222999999993, 38.892406999999999], [65.215998999999996, 38.402695000000001], [66.546149999999997, 37.974685000000001], [66.518607000000003, 37.362783999999998], [66.217384999999993, 37.393790000000003], [65.745631000000003, 37.661163999999999], [65.588948000000002, 37.305216999999999], [64.746105, 37.111818], [64.546479000000005, 36.312072999999998], [63.982895999999997, 36.007956999999998], [63.193537999999997, 35.857165999999999], [62.984662, 35.404040999999999], [62.230651000000002, 35.270663999999996], [61.210816999999999, 35.650072000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0443\u0440\u043a\u043c\u0435\u043d\u0438\u044f", "fr": "Turkm\u00e9nistan", "en": "Turkmenistan", "nl": "Turkmenistan", "pt": "Turquemenist\u00e3o", "no": "Turkmenistan", "de": "Turkmenistan", "it": "Turkmenistan", "sv": "Turkmenistan", "pl": "Turkmenistan", "fi": "Turkmenistan", "zh": "\u571f\u5e93\u66fc\u65af\u5766", "ja": "\u30c8\u30eb\u30af\u30e1\u30cb\u30b9\u30bf\u30f3", "es": "Turkmenist\u00e1n"}, "label_fr": "Turkm\u00e9nistan", "name": "Turkmenistan", "dbpedia_uri": "http://dbpedia.org/resource/Turkmenistan"}, "id": "TKM"}, {"geometry": {"type": "Polygon", "coordinates": [[[124.968682, -8.8927899999999998], [125.086246, -8.6568869999999993], [125.94707200000001, -8.4320950000000003], [126.644704, -8.3982469999999996], [126.95724300000001, -8.2733450000000008], [127.335928, -8.3973169999999993], [126.967992, -8.6682559999999995], [125.92588499999999, -9.106007], [125.08852, -9.3931730000000009], [125.07002, -9.0899870000000007], [124.968682, -8.8927899999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0412\u043e\u0441\u0442\u043e\u0447\u043d\u044b\u0439 \u0422\u0438\u043c\u043e\u0440", "fr": "Timor oriental", "en": "East Timor", "nl": "Oost-Timor", "pt": "Timor-Leste", "no": "\u00d8st-Timor", "de": "Osttimor", "it": "Timor Est", "sv": "\u00d6sttimor", "pl": "Timor Wschodni", "fi": "It\u00e4-Timor", "zh": "\u4e1c\u5e1d\u6c76", "ja": "\u6771\u30c6\u30a3\u30e2\u30fc\u30eb", "es": "Timor Oriental"}, "label_fr": "Timor oriental", "name": "East Timor", "dbpedia_uri": "http://dbpedia.org/resource/East_Timor"}, "id": "TLS"}, {"geometry": {"type": "Polygon", "coordinates": [[[-61.68, 10.76], [-61.104999999999997, 10.890000000000001], [-60.895000000000003, 10.855], [-60.935000000000002, 10.109999999999999], [-61.770000000000003, 10], [-61.950000000000003, 10.09], [-61.659999999999997, 10.365], [-61.68, 10.76]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0440\u0438\u043d\u0438\u0434\u0430\u0434 \u0438 \u0422\u043e\u0431\u0430\u0433\u043e", "fr": "Trinit\u00e9-et-Tobago", "en": "Trinidad and Tobago", "nl": "Trinidad en Tobago", "pt": "Trinidad e Tobago", "no": "Trinidad og Tobago", "de": "Trinidad und Tobago", "it": "Trinidad e Tobago", "sv": "Trinidad och Tobago", "pl": "Trynidad i Tobago", "fi": "Trinidad ja Tobago", "zh": "\u5343\u91cc\u9054\u53ca\u6258\u5df4\u54e5", "ja": "\u30c8\u30ea\u30cb\u30c0\u30fc\u30c9\u30fb\u30c8\u30d0\u30b4", "es": "Trinidad y Tobago"}, "label_fr": "Trinit\u00e9-et-Tobago", "name": "Trinidad and Tobago", "dbpedia_uri": "http://dbpedia.org/resource/Trinidad_and_Tobago"}, "id": "TTO"}, {"geometry": {"type": "Polygon", "coordinates": [[[9.4821399999999993, 30.307556000000002], [9.0556029999999996, 32.102691999999998], [8.4391029999999994, 32.506284999999998], [8.4304729999999992, 32.748336999999999], [7.6126420000000001, 33.344115000000002], [7.5244819999999999, 34.097375999999997], [8.140981, 34.655146000000002], [8.3763679999999994, 35.479875999999997], [8.2178240000000002, 36.433177000000001], [8.4209639999999997, 36.946427], [9.5099940000000007, 37.349994000000002], [10.210001999999999, 37.230001999999999], [10.18065, 36.724038], [11.028867, 37.092103000000002], [11.100026, 36.899996000000002], [10.600004999999999, 36.409999999999997], [10.593287, 35.947443999999997], [10.939519000000001, 35.698984000000003], [10.807847000000001, 34.833506999999997], [10.149592999999999, 34.330773000000001], [10.339658999999999, 33.785741999999999], [10.856835999999999, 33.768740000000001], [11.108501, 33.293343], [11.488787, 33.136996000000003], [11.432252999999999, 32.368903000000003], [10.944789999999999, 32.081814999999999], [10.636901, 31.761420999999999], [9.9502249999999997, 31.376069999999999], [10.056575, 30.961831], [9.9700170000000004, 30.539325000000002], [9.4821399999999993, 30.307556000000002]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0443\u043d\u0438\u0441", "fr": "Tunisie", "en": "Tunisia", "nl": "Tunesi\u00eb", "pt": "Tun\u00edsia", "no": "Tunisia", "de": "Tunesien", "it": "Tunisia", "sv": "Tunisien", "pl": "Tunezja", "fi": "Tunisia", "zh": "\u7a81\u5c3c\u897f\u4e9e", "ja": "\u30c1\u30e5\u30cb\u30b8\u30a2", "es": "T\u00fanez"}, "label_fr": "Tunisie", "name": "Tunisia", "dbpedia_uri": "http://dbpedia.org/resource/Tunisia"}, "id": "TUN"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[36.913127000000003, 41.335357999999999], [38.347664999999999, 40.948585999999999], [39.512607000000003, 41.102763000000003], [40.373432999999999, 41.013672999999997], [41.554084000000003, 41.535656000000003], [42.619548999999999, 41.583173000000002], [43.582746, 41.092143], [43.752657999999997, 40.740200999999999], [43.656435999999999, 40.253563999999997], [44.400008999999997, 40.005000000000003], [44.793990000000001, 39.713003], [44.109225000000002, 39.428136000000002], [44.421402999999998, 38.281281], [44.225755999999997, 37.971584], [44.772699000000003, 37.170445000000001], [44.293452000000002, 37.001514], [43.942259, 37.256228], [42.779125999999998, 37.385263999999999], [42.349590999999997, 37.229872999999998], [41.212088999999999, 37.074351999999998], [40.673259000000002, 37.091276000000001], [39.522579999999998, 36.716054], [38.699891000000001, 36.712927000000001], [38.167726999999999, 36.901209999999999], [37.066761, 36.623035999999999], [36.739494000000001, 36.817520000000002], [36.685389000000001, 36.259698999999998], [36.417549999999999, 36.040616999999997], [36.149763, 35.821534999999997], [35.782085000000002, 36.274994999999997], [36.160822000000003, 36.650606000000003], [35.550936, 36.565443000000002], [34.714553000000002, 36.795532000000001], [34.026895000000003, 36.21996], [32.509157999999999, 36.107564000000004], [31.699594999999999, 36.644275], [30.621625000000002, 36.677864999999997], [30.391096000000001, 36.262981000000003], [29.699975999999999, 36.144356999999999], [28.732903, 36.676831], [27.641186999999999, 36.658822000000001], [27.048767999999999, 37.653360999999997], [26.318218000000002, 38.208132999999997], [26.8047, 38.985759999999999], [26.170784999999999, 39.463611999999998], [27.28002, 40.420014000000002], [28.819977999999999, 40.460011000000002], [29.240003999999999, 41.219991], [31.145934, 41.087622000000003], [32.347979000000002, 41.736263999999998], [33.513283000000001, 42.01896], [35.167704000000001, 42.040225], [36.913127000000003, 41.335357999999999]]], [[[27.192377, 40.690565999999997], [26.358008999999999, 40.151994000000002], [26.043351000000001, 40.617753999999998], [26.056941999999999, 40.824123], [26.294602000000001, 40.936261000000002], [26.604196000000002, 41.562114999999999], [26.117042000000001, 41.826904999999996], [27.135739000000001, 42.141485000000003], [27.99672, 42.007359000000001], [28.115525000000002, 41.622886000000001], [28.988443, 41.299934], [28.806438, 41.054962000000003], [27.619016999999999, 40.999822999999999], [27.192377, 40.690565999999997]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0443\u0440\u0446\u0438\u044f", "fr": "Turquie", "en": "Turkey", "nl": "Turkije", "pt": "Turquia", "no": "Tyrkia", "de": "T\u00fcrkei", "it": "Turchia", "sv": "Turkiet", "pl": "Turcja", "fi": "Turkki", "zh": "\u571f\u8033\u5176", "ja": "\u30c8\u30eb\u30b3", "es": "Turqu\u00eda"}, "label_fr": "Turquie", "name": "Turkey", "dbpedia_uri": "http://dbpedia.org/resource/Turkey"}, "id": "TUR"}, {"geometry": {"type": "Polygon", "coordinates": [[[121.777818, 24.394273999999999], [121.17563199999999, 22.790856999999999], [120.74708, 21.970571], [120.220083, 22.814861000000001], [120.106189, 23.556263000000001], [120.69468000000001, 24.538450999999998], [121.49504399999999, 25.295459000000001], [121.951244, 24.997596000000001], [121.777818, 24.394273999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0430\u0439\u0432\u0430\u043d\u044c", "fr": "Ta\u00efwan", "en": "Taiwan", "nl": "Taiwan", "pt": "Ilha Formosa", "no": "Taiwan", "de": "Taiwan", "it": "Isola di Taiwan", "sv": "Taiwan (\u00f6)", "pl": "Tajwan (wyspa)", "fi": "Taiwan", "zh": "\u53f0\u7063", "ja": "\u53f0\u6e7e", "es": "Isla de Taiw\u00e1n"}, "label_fr": "Ta\u00efwan", "name": "Taiwan", "dbpedia_uri": "http://dbpedia.org/resource/Taiwan"}, "id": "TWN"}, {"geometry": {"type": "Polygon", "coordinates": [[[33.903711000000001, -0.94999999999999996], [34.072620000000001, -1.05982], [37.698689999999999, -3.0969899999999999], [37.7669, -3.6771199999999999], [39.202219999999997, -4.6767700000000003], [38.740540000000003, -5.9089499999999999], [38.799770000000002, -6.4756600000000004], [39.439999999999998, -6.8399999999999999], [39.469999999999999, -7.0999999999999996], [39.194690000000001, -7.7039], [39.252029999999998, -8.0078099999999992], [39.186520000000002, -8.4855099999999997], [39.535739999999997, -9.1123700000000003], [39.949599999999997, -10.0984], [40.316589999999998, -10.3171], [39.521000000000001, -10.896879999999999], [38.427557, -11.285202], [37.827640000000002, -11.268789999999999], [37.471290000000003, -11.568759999999999], [36.775151000000001, -11.594537000000001], [36.514082000000002, -11.720938], [35.312398000000002, -11.439145999999999], [34.559989000000002, -11.520020000000001], [34.280000000000001, -10.16], [33.940837999999999, -9.6936739999999997], [33.739719999999998, -9.4171499999999995], [32.759374999999999, -9.2305989999999998], [32.191865, -8.9303589999999993], [31.556348, -8.7620489999999993], [31.157751000000001, -8.5945789999999995], [30.739999999999998, -8.3399999999999999], [30.199999999999999, -7.0800000000000001], [29.620000000000001, -6.5199999999999996], [29.419993000000002, -5.9399990000000003], [29.519987, -5.4199789999999997], [29.339998000000001, -4.4999830000000003], [29.753512000000001, -4.4523890000000002], [30.116320000000002, -4.0901199999999998], [30.50554, -3.5685799999999999], [30.75224, -3.3593099999999998], [30.743010000000002, -3.0343100000000001], [30.527660000000001, -2.80762], [30.469670000000001, -2.4138299999999999], [30.758309000000001, -2.2872499999999998], [30.816134999999999, -1.698914], [30.419104999999998, -1.1346590000000001], [30.769860000000001, -1.0145500000000001], [31.86617, -1.0273600000000001], [33.903711000000001, -0.94999999999999996]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0422\u0430\u043d\u0437\u0430\u043d\u0438\u044f", "fr": "Tanzanie", "en": "Tanzania", "nl": "Tanzania", "pt": "Tanz\u00e2nia", "no": "Tanzania", "de": "Tansania", "it": "Tanzania", "sv": "Tanzania", "pl": "Tanzania", "fi": "Tansania", "zh": "\u5766\u6851\u5c3c\u4e9a", "ja": "\u30bf\u30f3\u30b6\u30cb\u30a2", "es": "Tanzania"}, "label_fr": "Tanzanie", "name": "United Republic of Tanzania", "dbpedia_uri": "http://dbpedia.org/resource/Tanzania"}, "id": "TZA"}, {"geometry": {"type": "Polygon", "coordinates": [[[31.86617, -1.0273600000000001], [30.769860000000001, -1.0145500000000001], [30.419104999999998, -1.1346590000000001], [29.821518999999999, -1.443322], [29.579466, -1.341313], [29.587838000000001, -0.58740599999999998], [29.819500000000001, -0.20530000000000001], [29.875779000000001, 0.59738000000000002], [30.086154000000001, 1.0623130000000001], [30.468508, 1.5838049999999999], [30.85267, 1.849396], [31.174149, 2.2044649999999999], [30.773319999999998, 2.33989], [30.833850000000002, 3.5091700000000001], [31.245560000000001, 3.7818999999999998], [31.881450000000001, 3.5582699999999998], [32.686419999999998, 3.7923200000000001], [33.390000000000001, 3.79], [34.005000000000003, 4.2498849999999999], [34.479129999999998, 3.5556000000000001], [34.596069999999997, 3.0537399999999999], [35.035989999999998, 1.90584], [34.6721, 1.1769400000000001], [34.18, 0.51500000000000001], [33.893568999999999, 0.10981399999999999], [33.903711000000001, -0.94999999999999996], [31.86617, -1.0273600000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0423\u0433\u0430\u043d\u0434\u0430", "fr": "Ouganda", "en": "Uganda", "nl": "Oeganda", "pt": "Uganda", "no": "Uganda", "de": "Uganda", "it": "Uganda", "sv": "Uganda", "pl": "Uganda", "fi": "Uganda", "zh": "\u4e4c\u5e72\u8fbe", "ja": "\u30a6\u30ac\u30f3\u30c0", "es": "Uganda"}, "label_fr": "Ouganda", "name": "Uganda", "dbpedia_uri": "http://dbpedia.org/resource/Uganda"}, "id": "UGA"}, {"geometry": {"type": "Polygon", "coordinates": [[[31.785997999999999, 52.101678], [32.159412000000003, 52.061267000000001], [32.412058000000002, 52.288694999999997], [32.715761000000001, 52.238464999999998], [33.752699999999997, 52.335075000000003], [34.391731, 51.768881999999998], [34.141978000000002, 51.566412999999997], [34.224815999999997, 51.255992999999997], [35.022182999999998, 51.207571999999999], [35.377924, 50.773955000000001], [35.356116, 50.577196999999998], [36.626168, 50.225591000000001], [37.393459999999997, 50.383952999999998], [38.010630999999997, 49.915661999999998], [38.594988000000001, 49.926462000000001], [40.069057999999998, 49.601055000000002], [40.080789000000003, 49.307429999999997], [39.674664, 48.783817999999997], [39.895631999999999, 48.232405], [39.738278000000001, 47.898936999999997], [38.770584999999997, 47.825608000000003], [38.255111999999997, 47.546399999999998], [38.223537999999998, 47.10219], [37.425136999999999, 47.022221000000002], [36.759855000000002, 46.698700000000002], [35.823684999999998, 46.645963999999999], [34.962342, 46.273197000000003], [35.020788000000003, 45.651218999999998], [35.510008999999997, 45.409993], [36.529997999999999, 45.469990000000003], [36.334713000000001, 45.113216000000001], [35.239998999999997, 44.939996000000001], [33.882511000000001, 44.361479000000003], [33.326421000000003, 44.564877000000003], [33.546923999999997, 45.034770999999999], [32.454174000000002, 45.327466000000001], [32.630803999999998, 45.519185999999998], [33.588161999999997, 45.851568999999998], [33.298566999999998, 46.080598000000002], [31.744140000000002, 46.333348000000001], [31.675307, 46.706245000000003], [30.748749, 46.583100000000002], [30.377609, 46.032409999999999], [29.603289, 45.293308000000003], [29.149725, 45.464925000000001], [28.679779, 45.304031000000002], [28.233554000000002, 45.488283000000003], [28.485268999999999, 45.596907000000002], [28.659987000000001, 45.939987000000002], [28.933717000000001, 46.258830000000003], [28.862971999999999, 46.437888999999998], [29.072106999999999, 46.517677999999997], [29.170653999999999, 46.379261999999997], [29.759972000000001, 46.349988000000003], [30.024659, 46.423937000000002], [29.83821, 46.525326], [29.908852, 46.674360999999998], [29.559674000000001, 46.928583000000003], [29.415134999999999, 47.346645000000002], [29.050868000000001, 47.510227], [29.122698, 47.849094999999998], [28.670891000000001, 48.118149000000003], [28.259547000000001, 48.155562000000003], [27.522537, 48.467118999999997], [26.857824000000001, 48.368211000000002], [26.619337000000002, 48.220725999999999], [26.19745, 48.220880999999999], [25.945941000000001, 47.987149000000002], [25.207743000000001, 47.891055999999999], [24.866316999999999, 47.737526000000003], [24.402056000000002, 47.981878000000002], [23.760957999999999, 47.985598000000003], [23.142236, 48.096341000000002], [22.710531, 47.882193999999998], [22.640820000000001, 48.150239999999997], [22.085608000000001, 48.422263999999998], [22.280842, 48.825392000000001], [22.558138, 49.085737999999999], [22.776419000000001, 49.027394999999999], [22.518450000000001, 49.476773999999999], [23.426507999999998, 50.308506000000001], [23.922757000000001, 50.424880999999999], [24.029986000000001, 50.705407000000001], [23.527070999999999, 51.578454000000001], [24.005078000000001, 51.617443999999999], [24.553106, 51.888461], [25.327788000000002, 51.910656000000003], [26.337959000000001, 51.832289000000003], [27.454066000000001, 51.592303000000001], [28.241614999999999, 51.572226999999998], [28.617612999999999, 51.427714000000002], [28.992834999999999, 51.602043999999999], [29.254937999999999, 51.368234000000001], [30.157364000000001, 51.416137999999997], [30.555116999999999, 51.319502999999997], [30.619454000000001, 51.822806], [30.927548999999999, 52.042352999999999], [31.785997999999999, 52.101678]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0423\u043a\u0440\u0430\u0438\u043d\u0430", "fr": "Ukraine", "en": "Ukraine", "nl": "Oekra\u00efne", "pt": "Ucr\u00e2nia", "no": "Ukraina", "de": "Ukraine", "it": "Ucraina", "sv": "Ukraina", "pl": "Ukraina", "fi": "Ukraina", "zh": "\u4e4c\u514b\u5170", "ja": "\u30a6\u30af\u30e9\u30a4\u30ca", "es": "Ucrania"}, "label_fr": "Ukraine", "name": "Ukraine", "dbpedia_uri": "http://dbpedia.org/resource/Ukraine"}, "id": "UKR"}, {"geometry": {"type": "Polygon", "coordinates": [[[-57.625132999999998, -30.216294999999999], [-56.976025999999997, -30.109686], [-55.973244999999999, -30.883075999999999], [-55.601509999999998, -30.853878999999999], [-54.572451999999998, -31.494510999999999], [-53.787951999999997, -32.047243000000002], [-53.209589000000001, -32.727665999999999], [-53.650543999999996, -33.202004000000002], [-53.373662000000003, -33.768377999999998], [-53.806426000000002, -34.396814999999997], [-54.935865999999997, -34.952646999999999], [-55.67409, -34.752659000000001], [-56.215297, -34.859836000000001], [-57.139685, -34.430456], [-57.817861000000001, -34.462547000000001], [-58.427073999999998, -33.909453999999997], [-58.349611000000003, -33.263188999999997], [-58.132648000000003, -33.040567000000003], [-58.142440000000001, -32.044504000000003], [-57.874937000000003, -31.016556000000001], [-57.625132999999998, -30.216294999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0423\u0440\u0443\u0433\u0432\u0430\u0439", "fr": "Uruguay", "en": "Uruguay", "nl": "Uruguay", "pt": "Uruguai", "no": "Uruguay", "de": "Uruguay", "it": "Uruguay", "sv": "Uruguay", "pl": "Urugwaj", "fi": "Uruguay", "zh": "\u4e4c\u62c9\u572d", "ja": "\u30a6\u30eb\u30b0\u30a2\u30a4", "es": "Uruguay"}, "label_fr": "Uruguay", "name": "Uruguay", "dbpedia_uri": "http://dbpedia.org/resource/Uruguay"}, "id": "URY"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[-155.54211000000001, 19.083480000000002], [-155.68817000000001, 18.91619], [-155.93664999999999, 19.05939], [-155.90806000000001, 19.33888], [-156.07346999999999, 19.702940000000002], [-156.02368000000001, 19.814219999999999], [-155.85007999999999, 19.97729], [-155.91907, 20.173950000000001], [-155.86107999999999, 20.267209999999999], [-155.78505000000001, 20.248699999999999], [-155.40214, 20.079750000000001], [-155.22452000000001, 19.993020000000001], [-155.06226000000001, 19.859100000000002], [-154.80741, 19.508710000000001], [-154.83147, 19.453279999999999], [-155.22217000000001, 19.239719999999998], [-155.54211000000001, 19.083480000000002]]], [[[-156.07926, 20.643969999999999], [-156.41444999999999, 20.572410000000001], [-156.58672999999999, 20.783000000000001], [-156.70167000000001, 20.8643], [-156.71055000000001, 20.926760000000002], [-156.61258000000001, 21.01249], [-156.25711000000001, 20.917449999999999], [-155.99565999999999, 20.764040000000001], [-156.07926, 20.643969999999999]]], [[[-156.75824, 21.176839999999999], [-156.78933000000001, 21.068729999999999], [-157.32521, 21.097770000000001], [-157.25027, 21.219580000000001], [-156.75824, 21.176839999999999]]], [[[-157.65282999999999, 21.32217], [-157.70703, 21.264420000000001], [-157.77860000000001, 21.277290000000001], [-158.12666999999999, 21.312439999999999], [-158.25380000000001, 21.539190000000001], [-158.29265000000001, 21.57912], [-158.02520000000001, 21.71696], [-157.94161, 21.652719999999999], [-157.65282999999999, 21.32217]]], [[[-159.34512000000001, 21.981999999999999], [-159.46372, 21.882989999999999], [-159.80051, 22.065329999999999], [-159.74877000000001, 22.138200000000001], [-159.59620000000001, 22.236180000000001], [-159.36569, 22.214939999999999], [-159.34512000000001, 21.981999999999999]]], [[[-94.817580000000007, 49.389049999999997], [-94.640000000000001, 48.840000000000003], [-94.329139999999995, 48.670740000000002], [-93.630870000000002, 48.609259999999999], [-92.609999999999999, 48.450000000000003], [-91.640000000000001, 48.140000000000001], [-90.829999999999998, 48.270000000000003], [-89.599999999999994, 48.009999999999998], [-89.272917000000007, 48.019807999999998], [-88.378113999999997, 48.302917999999998], [-87.439792999999995, 47.939999999999998], [-86.461990999999998, 47.553337999999997], [-85.652362999999994, 47.220219], [-84.876080000000002, 46.900083000000002], [-84.779238000000007, 46.637101999999999], [-84.543749000000005, 46.538684000000003], [-84.604900000000001, 46.439599999999999], [-84.336699999999993, 46.408769999999997], [-84.142120000000006, 46.512225999999998], [-84.091851000000005, 46.275418999999999], [-83.890765000000002, 46.116926999999997], [-83.616130999999996, 46.116926999999997], [-83.469550999999996, 45.994686000000002], [-83.592850999999996, 45.816893999999998], [-82.550925000000007, 45.347517000000003], [-82.337762999999995, 44.439999999999998], [-82.137642, 43.571088000000003], [-82.430000000000007, 42.979999999999997], [-82.900000000000006, 42.43], [-83.120000000000005, 42.079999999999998], [-83.141999999999996, 41.975681000000002], [-83.029809999999998, 41.832796000000002], [-82.690089, 41.675105000000002], [-82.439278000000002, 41.675105000000002], [-81.277747000000005, 42.209026000000001], [-80.247448000000006, 42.366199999999999], [-78.939362000000003, 42.863610999999999], [-78.920000000000002, 42.965000000000003], [-79.010000000000005, 43.270000000000003], [-79.171673999999996, 43.466338999999998], [-78.720280000000002, 43.625089000000003], [-77.737885000000006, 43.629055999999999], [-76.820034000000007, 43.628784000000003], [-76.5, 44.018459], [-76.375, 44.096310000000003], [-75.318209999999993, 44.816450000000003], [-74.867000000000004, 45.000480000000003], [-73.347830000000002, 45.007379999999998], [-71.50506, 45.008200000000002], [-71.405000000000001, 45.255000000000003], [-71.084819999999993, 45.305239999999998], [-70.659999999999997, 45.460000000000001], [-70.305000000000007, 45.914999999999999], [-69.999970000000005, 46.693069999999999], [-69.237216000000004, 47.447780999999999], [-68.905000000000001, 47.185000000000002], [-68.234440000000006, 47.354860000000002], [-67.790459999999996, 47.066360000000003], [-67.791340000000005, 45.702809999999999], [-67.137410000000003, 45.137529999999998], [-66.964659999999995, 44.809699999999999], [-68.032520000000005, 44.325200000000002], [-69.060000000000002, 43.979999999999997], [-70.116169999999997, 43.684049999999999], [-70.645476000000002, 43.090237999999999], [-70.814890000000005, 42.865299999999998], [-70.825000000000003, 42.335000000000001], [-70.495000000000005, 41.805], [-70.079999999999998, 41.780000000000001], [-70.185000000000002, 42.145000000000003], [-69.884969999999996, 41.922829999999998], [-69.965029999999999, 41.637169999999998], [-70.640000000000001, 41.475000000000001], [-71.12039, 41.494450000000001], [-71.859999999999999, 41.32], [-72.295000000000002, 41.270000000000003], [-72.876429999999999, 41.220649999999999], [-73.709999999999994, 40.931102000000003], [-72.241259999999997, 41.119480000000003], [-71.944999999999993, 40.93], [-73.344999999999999, 40.630000000000003], [-73.981999999999999, 40.628], [-73.952325000000002, 40.750749999999996], [-74.256709999999998, 40.473509999999997], [-73.962440000000001, 40.427630000000001], [-74.178380000000004, 39.70926], [-74.906040000000004, 38.939540000000001], [-74.980410000000006, 39.196399999999997], [-75.200019999999995, 39.248449999999998], [-75.528049999999993, 39.4985], [-75.319999999999993, 38.960000000000001], [-75.071834999999993, 38.782032000000001], [-75.056730000000002, 38.404119999999999], [-75.377470000000002, 38.015509999999999], [-75.94023, 37.216889999999999], [-76.031270000000006, 37.256599999999999], [-75.722049999999996, 37.937049999999999], [-76.232870000000005, 38.319215], [-76.349999999999994, 39.149999999999999], [-76.542725000000004, 38.717615000000002], [-76.329329999999999, 38.083260000000003], [-76.989998, 38.239992000000001], [-76.30162, 37.917945000000003], [-76.258740000000003, 36.9664], [-75.971800000000002, 36.897260000000003], [-75.868039999999993, 36.551250000000003], [-75.727490000000003, 35.550739999999998], [-76.36318, 34.808540000000001], [-77.397634999999994, 34.512009999999997], [-78.054959999999994, 33.925469999999997], [-78.554349999999999, 33.861330000000002], [-79.060670000000002, 33.493949999999998], [-79.203569999999999, 33.158389999999997], [-80.301325000000006, 32.509354999999999], [-80.864980000000003, 32.033299999999997], [-81.336290000000005, 31.44049], [-81.49042, 30.729990000000001], [-81.31371, 30.035520000000002], [-80.980000000000004, 29.18], [-80.535584999999998, 28.47213], [-80.530000000000001, 28.039999999999999], [-80.056539000000001, 26.879999999999999], [-80.088014999999999, 26.205765], [-80.131559999999993, 25.816775], [-80.381029999999996, 25.206160000000001], [-80.680000000000007, 25.079999999999998], [-81.172129999999996, 25.201260000000001], [-81.329999999999998, 25.640000000000001], [-81.709999999999994, 25.870000000000001], [-82.239999999999995, 26.73], [-82.705150000000003, 27.495039999999999], [-82.855260000000001, 27.886240000000001], [-82.650000000000006, 28.550000000000001], [-82.930000000000007, 29.100000000000001], [-83.709590000000006, 29.93656], [-84.099999999999994, 30.09], [-85.108819999999994, 29.636150000000001], [-85.287840000000003, 29.686119999999999], [-85.773099999999999, 30.152609999999999], [-86.400000000000006, 30.399999999999999], [-87.530360000000002, 30.274329999999999], [-88.417820000000006, 30.384899999999998], [-89.180490000000006, 30.31598], [-89.593830999999994, 30.159994000000001], [-89.413735000000003, 29.894189999999998], [-89.430000000000007, 29.48864], [-89.217669999999998, 29.291080000000001], [-89.408230000000003, 29.159610000000001], [-89.77928, 29.30714], [-90.154629999999997, 29.117429999999999], [-90.880224999999996, 29.148534999999999], [-91.626784999999998, 29.677], [-92.49906, 29.552299999999999], [-93.226370000000003, 29.783750000000001], [-93.848420000000004, 29.713629999999998], [-94.689999999999998, 29.48], [-95.600260000000006, 28.738630000000001], [-96.594040000000007, 28.307480000000002], [-97.140000000000001, 27.829999999999998], [-97.370000000000005, 27.379999999999999], [-97.379999999999995, 26.690000000000001], [-97.329999999999998, 26.210000000000001], [-97.140000000000001, 25.870000000000001], [-97.530000000000001, 25.84], [-98.239999999999995, 26.059999999999999], [-99.019999999999996, 26.370000000000001], [-99.299999999999997, 26.84], [-99.519999999999996, 27.539999999999999], [-100.11, 28.109999999999999], [-100.45583999999999, 28.696120000000001], [-100.9576, 29.380710000000001], [-101.66240000000001, 29.779299999999999], [-102.48, 29.760000000000002], [-103.11, 28.969999999999999], [-103.94, 29.27], [-104.45697, 29.571960000000001], [-104.70574999999999, 30.121729999999999], [-105.03737, 30.644020000000001], [-105.63159, 31.083829999999999], [-106.1429, 31.39995], [-106.50758999999999, 31.754519999999999], [-108.23999999999999, 31.754854000000002], [-108.24194, 31.342220000000001], [-109.035, 31.341940000000001], [-111.02361000000001, 31.334720000000001], [-113.30498, 32.039140000000003], [-114.815, 32.525280000000002], [-114.72139, 32.720829999999999], [-115.99135, 32.612389999999998], [-117.12775999999999, 32.535339999999998], [-117.29593800000001, 33.046225], [-117.944, 33.621236000000003], [-118.410602, 33.740909000000002], [-118.51989500000001, 34.027782000000002], [-119.081, 34.078000000000003], [-119.438841, 34.348477000000003], [-120.36778, 34.447110000000002], [-120.62286, 34.608550000000001], [-120.74433000000001, 35.156860000000002], [-121.71456999999999, 36.161529999999999], [-122.54747, 37.551760000000002], [-122.51201, 37.783389999999997], [-122.95319000000001, 38.113709999999998], [-123.7272, 38.951659999999997], [-123.86517000000001, 39.76699], [-124.39807, 40.313200000000002], [-124.17886, 41.142020000000002], [-124.2137, 41.999639999999999], [-124.53283999999999, 42.765990000000002], [-124.14214, 43.708379999999998], [-124.020535, 44.615895000000002], [-123.89892999999999, 45.523409999999998], [-124.079635, 46.864750000000001], [-124.39567, 47.720170000000003], [-124.68720999999999, 48.184432999999999], [-124.566101, 48.379714999999997], [-123.12, 48.039999999999999], [-122.58736, 47.095999999999997], [-122.34, 47.359999999999999], [-122.5, 48.18], [-122.84, 49], [-120, 49], [-117.03121, 49], [-116.04818, 49], [-113, 49], [-110.05, 49], [-107.05, 49], [-104.04826, 48.999859999999998], [-100.65000000000001, 49], [-97.228719999999996, 49.000700000000002], [-95.15907, 49], [-95.156090000000006, 49.384250000000002], [-94.817580000000007, 49.389049999999997]]], [[[-153.006314, 57.115842000000001], [-154.00509, 56.734676999999998], [-154.516403, 56.992749000000003], [-154.67099300000001, 57.461196000000001], [-153.76277999999999, 57.816575], [-153.22872899999999, 57.968967999999997], [-152.56479100000001, 57.901426999999998], [-152.14114699999999, 57.591059000000001], [-153.006314, 57.115842000000001]]], [[[-165.57916399999999, 59.909987000000001], [-166.19277, 59.754441], [-166.84833699999999, 59.941406000000001], [-167.455277, 60.213068999999997], [-166.467792, 60.384169999999997], [-165.67443, 60.293607000000002], [-165.57916399999999, 59.909987000000001]]], [[[-171.73165700000001, 63.782514999999997], [-171.11443399999999, 63.592191], [-170.49111199999999, 63.694974999999999], [-169.68250499999999, 63.431116000000003], [-168.68943899999999, 63.297505999999998], [-168.771941, 63.188597999999999], [-169.52943999999999, 62.976931], [-170.29055600000001, 63.194437999999998], [-170.67138600000001, 63.375821999999999], [-171.55306300000001, 63.317788999999998], [-171.791111, 63.405845999999997], [-171.73165700000001, 63.782514999999997]]], [[[-155.06779, 71.147775999999993], [-154.344165, 70.696409000000003], [-153.90000599999999, 70.889989], [-152.21000599999999, 70.829992000000004], [-152.27000200000001, 70.600005999999993], [-150.739992, 70.430017000000007], [-149.72000299999999, 70.530010000000004], [-147.613362, 70.214034999999996], [-145.68998999999999, 70.120009999999994], [-144.92001099999999, 69.989992000000001], [-143.58944600000001, 70.152513999999996], [-142.07250999999999, 69.851938000000004], [-140.98598799999999, 69.711997999999994], [-140.98598799999999, 69.711997999999994], [-140.99249900000001, 66.000028999999998], [-140.99777, 60.306396999999997], [-140.01299800000001, 60.276837999999998], [-139.03899999999999, 60.000006999999997], [-138.34089, 59.562109999999997], [-137.45249999999999, 58.905000000000001], [-136.47971999999999, 59.463889999999999], [-135.47583, 59.787779999999998], [-134.94499999999999, 59.270560000000003], [-134.27110999999999, 58.861109999999996], [-133.355549, 58.410285000000002], [-132.73042000000001, 57.692889999999998], [-131.70780999999999, 56.552120000000002], [-130.00778, 55.91583], [-129.979994, 55.284998000000002], [-130.53611000000001, 54.802753000000003], [-131.08581799999999, 55.178905999999998], [-131.96721099999999, 55.497776000000002], [-132.250011, 56.369996], [-133.53918100000001, 57.178887000000003], [-134.07806299999999, 58.123068000000004], [-135.03821099999999, 58.187714999999997], [-136.628062, 58.212209000000001], [-137.800006, 58.499994999999998], [-139.86778699999999, 59.537762000000001], [-140.82527400000001, 59.727516999999999], [-142.574444, 60.084446999999997], [-143.95888099999999, 59.999180000000003], [-145.925557, 60.45861], [-147.114374, 60.884656], [-148.22430600000001, 60.672989000000001], [-148.018066, 59.978329000000002], [-148.57082299999999, 59.914172999999998], [-149.727858, 59.705658], [-150.60824299999999, 59.368211000000002], [-151.71639300000001, 59.155821000000003], [-151.859433, 59.744984000000002], [-151.409719, 60.725802999999999], [-150.34694099999999, 61.033588000000002], [-150.62111100000001, 61.284424999999999], [-151.895839, 60.727198000000001], [-152.57832999999999, 60.061656999999997], [-154.019172, 59.350279], [-153.28751099999999, 58.864727999999999], [-154.23249200000001, 58.146374000000002], [-155.307491, 57.727795], [-156.308335, 57.422773999999997], [-156.55609699999999, 56.979984999999999], [-158.11721700000001, 56.463608000000001], [-158.43332100000001, 55.994154000000002], [-159.60332700000001, 55.566685999999997], [-160.28971999999999, 55.643580999999998], [-161.22304800000001, 55.364735000000003], [-162.23776599999999, 55.024186999999998], [-163.069447, 54.689737000000001], [-164.78556900000001, 54.404173], [-164.94222600000001, 54.572225000000003], [-163.84834000000001, 55.039431], [-162.870001, 55.348042999999997], [-161.80417499999999, 55.894986000000003], [-160.563605, 56.008054999999999], [-160.07056, 56.418055000000003], [-158.68444299999999, 57.016674999999999], [-158.461097, 57.216920999999999], [-157.72277, 57.570000999999998], [-157.550274, 58.328325999999997], [-157.041675, 58.918885000000003], [-158.19473099999999, 58.615802000000002], [-158.51721800000001, 58.787781000000003], [-159.058606, 58.424185999999999], [-159.71166700000001, 58.93139], [-159.981289, 58.572549000000002], [-160.35527099999999, 59.071123], [-161.35500300000001, 58.670838000000003], [-161.96889400000001, 58.671664999999997], [-162.05498700000001, 59.266925000000001], [-161.87417099999999, 59.633620999999998], [-162.51805899999999, 59.989724000000002], [-163.818341, 59.798056000000003], [-164.662218, 60.267484000000003], [-165.34638799999999, 60.507496000000003], [-165.350832, 61.073895], [-166.12137899999999, 61.500019000000002], [-165.734452, 62.074997000000003], [-164.91917900000001, 62.633076000000003], [-164.56250800000001, 63.146377999999999], [-163.753332, 63.219448999999997], [-163.06722400000001, 63.059458999999997], [-162.26055500000001, 63.541936], [-161.53444999999999, 63.455817000000003], [-160.77250699999999, 63.766108000000003], [-160.95833500000001, 64.222798999999995], [-161.518068, 64.402788000000001], [-160.77777800000001, 64.788604000000007], [-161.39192600000001, 64.777235000000005], [-162.45304999999999, 64.559444999999997], [-162.75778600000001, 64.338605000000001], [-163.54639399999999, 64.559160000000006], [-164.96082999999999, 64.446944999999999], [-166.42528799999999, 64.686672000000002], [-166.84500399999999, 65.088896000000005], [-168.11055999999999, 65.669996999999995], [-166.70527100000001, 66.088318000000001], [-164.47470999999999, 66.576660000000004], [-163.652512, 66.576660000000004], [-163.788602, 66.077207000000001], [-161.677774, 66.116119999999995], [-162.48971499999999, 66.735564999999994], [-163.719717, 67.116394999999997], [-164.43099100000001, 67.616337999999999], [-165.390287, 68.042771999999999], [-166.76444100000001, 68.358877000000007], [-166.20470700000001, 68.883031000000003], [-164.43081100000001, 68.915535000000006], [-163.16861399999999, 69.371115000000003], [-162.930566, 69.858062000000004], [-161.908897, 70.333330000000004], [-160.934797, 70.447689999999994], [-159.039176, 70.891642000000004], [-158.11972299999999, 70.824720999999997], [-156.580825, 71.357764000000003], [-155.06779, 71.147775999999993]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0421\u043e\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0435 \u0428\u0442\u0430\u0442\u044b \u0410\u043c\u0435\u0440\u0438\u043a\u0438", "fr": "\u00c9tats-Unis", "en": "United States", "nl": "Verenigde Staten", "pt": "Estados Unidos", "no": "USA", "de": "Vereinigte Staaten", "it": "Stati Uniti d'America", "sv": "USA", "pl": "Stany Zjednoczone", "fi": "Yhdysvallat", "zh": "\u7f8e\u570b", "ja": "\u30a2\u30e1\u30ea\u30ab\u5408\u8846\u56fd", "es": "Estados Unidos"}, "label_fr": "\u00c9tats-Unis", "name": "United States of America", "dbpedia_uri": "http://dbpedia.org/resource/United_States"}, "id": "USA"}, {"geometry": {"type": "Polygon", "coordinates": [[[66.518607000000003, 37.362783999999998], [66.546149999999997, 37.974685000000001], [65.215998999999996, 38.402695000000001], [64.170222999999993, 38.892406999999999], [63.518014999999998, 39.363256999999997], [62.37426, 40.053885999999999], [61.882714, 41.084857], [61.547179, 41.266370000000002], [60.465952999999999, 41.220326999999997], [60.083340999999997, 41.425145999999998], [59.976421999999999, 42.223081999999998], [58.629010999999998, 42.751550999999999], [57.786529999999999, 42.170552999999998], [56.932214999999999, 41.826025999999999], [57.096390999999997, 41.322310000000002], [55.968190999999997, 41.308641999999999], [55.928916999999998, 44.995857999999998], [58.503126999999999, 45.586804000000001], [58.689988999999997, 45.500014], [60.239972000000002, 44.784036999999998], [61.058320000000002, 44.405816999999999], [62.013300000000001, 43.504477000000001], [63.185786999999998, 43.650075000000001], [64.900824, 43.728081000000003], [66.098011999999997, 42.997660000000003], [66.023392000000001, 41.994646000000003], [66.510649000000001, 41.987644000000003], [66.714046999999994, 41.168444000000001], [67.985855999999998, 41.135990999999997], [68.259895999999998, 40.662325000000003], [68.632482999999993, 40.668680999999999], [69.070026999999996, 41.384244000000002], [70.388964999999999, 42.081308], [70.962315000000004, 42.266154], [71.259247999999999, 42.167710999999997], [70.420022000000003, 41.519998000000001], [71.157859000000002, 41.143586999999997], [71.870114999999998, 41.392899999999997], [73.055417000000006, 40.866033000000002], [71.774874999999994, 40.145843999999997], [71.014197999999993, 40.244365999999999], [70.601406999999995, 40.218527000000002], [70.458160000000007, 40.496495000000003], [70.666622000000004, 40.960213000000003], [69.329494999999994, 40.727823999999998], [69.011633000000003, 40.086157999999998], [68.536416000000003, 39.533453000000002], [67.701429000000005, 39.580477999999999], [67.442220000000006, 39.140143999999999], [68.176024999999996, 38.901553], [68.392032999999998, 38.157024999999997], [67.829999999999998, 37.144993999999997], [67.075782000000004, 37.356144], [66.518607000000003, 37.362783999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0423\u0437\u0431\u0435\u043a\u0438\u0441\u0442\u0430\u043d", "fr": "Ouzb\u00e9kistan", "en": "Uzbekistan", "nl": "Oezbekistan", "pt": "Uzbequist\u00e3o", "no": "Usbekistan", "de": "Usbekistan", "it": "Uzbekistan", "sv": "Uzbekistan", "pl": "Uzbekistan", "fi": "Uzbekistan", "zh": "\u4e4c\u5179\u522b\u514b\u65af\u5766", "ja": "\u30a6\u30ba\u30d9\u30ad\u30b9\u30bf\u30f3", "es": "Uzbekist\u00e1n"}, "label_fr": "Ouzb\u00e9kistan", "name": "Uzbekistan", "dbpedia_uri": "http://dbpedia.org/resource/Uzbekistan"}, "id": "UZB"}, {"geometry": {"type": "Polygon", "coordinates": [[[-71.331584000000007, 11.776284], [-71.360005999999998, 11.539994], [-71.947050000000004, 11.423282], [-71.620868000000002, 10.96946], [-71.633064000000005, 10.446494], [-72.074173999999999, 9.8656509999999997], [-71.695644000000001, 9.0722629999999995], [-71.264559000000006, 9.1371950000000002], [-71.039998999999995, 9.8599929999999993], [-71.350083999999995, 10.211935], [-71.400622999999996, 10.968969], [-70.155298999999999, 11.375482], [-70.293842999999995, 11.846822], [-69.943245000000005, 12.162307], [-69.584299999999999, 11.459611000000001], [-68.882998999999998, 11.443384999999999], [-68.233271000000002, 10.885744000000001], [-68.194126999999995, 10.554653], [-67.296249000000003, 10.545868], [-66.227863999999997, 10.648626999999999], [-65.655237999999997, 10.200799], [-64.890451999999996, 10.077215000000001], [-64.329479000000006, 10.389599], [-64.318006999999994, 10.641418], [-63.079321999999998, 10.701724], [-61.880946000000002, 10.715624999999999], [-62.730119000000002, 10.420268999999999], [-62.388511999999999, 9.9482040000000005], [-61.588766999999997, 9.8730670000000007], [-60.830596999999997, 9.3813399999999998], [-60.671252000000003, 8.5801739999999995], [-60.150095999999998, 8.6027570000000004], [-59.758285000000001, 8.3670349999999996], [-60.550587999999998, 7.7796029999999998], [-60.637973000000002, 7.415], [-60.295667999999999, 7.0439109999999996], [-60.543998999999999, 6.8565839999999998], [-61.159336000000003, 6.6960769999999998], [-61.139415, 6.2342969999999998], [-61.410302999999999, 5.9590680000000003], [-60.733573999999997, 5.2002769999999998], [-60.601179000000002, 4.9180979999999996], [-60.966892999999999, 4.5364680000000002], [-62.085430000000002, 4.1621240000000004], [-62.804532999999999, 4.0069650000000001], [-63.093198000000001, 3.7705709999999999], [-63.888342999999999, 4.0205299999999999], [-64.628658999999999, 4.1484810000000003], [-64.816063999999997, 4.0564450000000001], [-64.368493999999998, 3.7972100000000002], [-64.408828, 3.1267860000000001], [-64.269998999999999, 2.4970059999999998], [-63.422866999999997, 2.4110680000000002], [-63.368788000000002, 2.2008999999999999], [-64.083084999999997, 1.916369], [-64.199306000000007, 1.492855], [-64.611012000000002, 1.3287310000000001], [-65.354713000000004, 1.0952820000000001], [-65.548266999999996, 0.78925400000000001], [-66.325765000000004, 0.72445199999999998], [-66.876326000000006, 1.2533609999999999], [-67.181293999999994, 2.2506379999999999], [-67.447091999999998, 2.6002809999999998], [-67.809938000000002, 2.8206549999999999], [-67.303173000000001, 3.318454], [-67.337564, 3.5423420000000001], [-67.621836000000002, 3.8394819999999998], [-67.823012000000006, 4.5039369999999996], [-67.744697000000002, 5.2211290000000004], [-67.521531999999993, 5.55687], [-67.341440000000006, 6.0954680000000003], [-67.695087000000001, 6.2673180000000004], [-68.265051999999997, 6.1532679999999997], [-68.985319000000004, 6.2068050000000001], [-69.389480000000006, 6.0998609999999998], [-70.093312999999995, 6.9603760000000001], [-70.674233999999998, 7.0877850000000002], [-71.960176000000004, 6.9916150000000004], [-72.198352, 7.3404309999999997], [-72.444486999999995, 7.4237849999999996], [-72.479679000000004, 7.6325060000000002], [-72.360900999999998, 8.0026379999999993], [-72.439862000000005, 8.4052749999999996], [-72.660494999999997, 8.6252879999999994], [-72.788730000000001, 9.0850270000000002], [-73.304952, 9.1519999999999992], [-73.027603999999997, 9.7367699999999999], [-72.905286000000004, 10.450343999999999], [-72.614658000000006, 10.821975], [-72.227575000000002, 11.108701999999999], [-71.973922000000002, 11.608672], [-71.331584000000007, 11.776284]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0412\u0435\u043d\u0435\u0441\u0443\u044d\u043b\u0430", "fr": "Venezuela", "en": "Venezuela", "nl": "Venezuela", "pt": "Venezuela", "no": "Venezuela", "de": "Venezuela", "it": "Venezuela", "sv": "Venezuela", "pl": "Wenezuela", "fi": "Venezuela", "zh": "\u59d4\u5167\u745e\u62c9", "ja": "\u30d9\u30cd\u30ba\u30a8\u30e9", "es": "Venezuela"}, "label_fr": "Venezuela", "name": "Venezuela", "dbpedia_uri": "http://dbpedia.org/resource/Venezuela"}, "id": "VEN"}, {"geometry": {"type": "Polygon", "coordinates": [[[108.05018, 21.552379999999999], [106.715068, 20.696850999999999], [105.881682, 19.752050000000001], [105.66200600000001, 19.058164999999999], [106.426817, 18.004121000000001], [107.361954, 16.697457], [108.26949500000001, 16.079742], [108.877107, 15.276691], [109.33526999999999, 13.426028000000001], [109.200136, 11.666859000000001], [108.36613, 11.008321], [107.220929, 10.364483999999999], [106.405113, 9.5308399999999995], [105.158264, 8.5997599999999998], [104.795185, 9.2410379999999996], [105.07620199999999, 9.9184909999999995], [104.334335, 10.486544], [105.199915, 10.88931], [106.24966999999999, 10.961812], [105.810524, 11.567615], [107.49140300000001, 12.337206], [107.614548, 13.535531000000001], [107.382727, 14.202441], [107.564525, 15.202173], [107.31270600000001, 15.908538], [106.55600800000001, 16.604284], [105.92576200000001, 17.485315], [105.094598, 18.666975000000001], [103.89653199999999, 19.265180999999998], [104.18338799999999, 19.624668], [104.822574, 19.886641999999998], [104.435, 20.758732999999999], [103.203861, 20.766562], [102.754896, 21.675136999999999], [102.170436, 22.464753000000002], [102.706992, 22.708794999999999], [103.504515, 22.703757], [104.47685799999999, 22.81915], [105.32920900000001, 23.352063000000001], [105.81124699999999, 22.976891999999999], [106.725403, 22.794267999999999], [106.567273, 22.218205000000001], [107.04342, 21.811899], [108.05018, 21.552379999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0412\u044c\u0435\u0442\u043d\u0430\u043c", "fr": "Vi\u00eat Nam", "en": "Vietnam", "nl": "Vietnam", "pt": "Vietname", "no": "Vietnam", "de": "Vietnam", "it": "Vietnam", "sv": "Vietnam", "pl": "Wietnam", "fi": "Vietnam", "zh": "\u8d8a\u5357", "ja": "\u30d9\u30c8\u30ca\u30e0", "es": "Vietnam"}, "label_fr": "Vi\u00eat Nam", "name": "Vietnam", "dbpedia_uri": "http://dbpedia.org/resource/Vietnam"}, "id": "VNM"}, {"geometry": {"type": "MultiPolygon", "coordinates": [[[[167.844877, -16.466332999999999], [167.51518100000001, -16.597850000000001], [167.18000799999999, -16.159994999999999], [167.216801, -15.891845999999999], [167.844877, -16.466332999999999]]], [[[167.10771199999999, -14.933920000000001], [167.270028, -15.740021], [167.00120699999999, -15.614602], [166.79315800000001, -15.668811], [166.64985899999999, -15.392704], [166.62913699999999, -14.626497000000001], [167.10771199999999, -14.933920000000001]]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0412\u0430\u043d\u0443\u0430\u0442\u0443", "fr": "Vanuatu", "en": "Vanuatu", "nl": "Vanuatu", "pt": "Vanuatu", "no": "Vanuatu", "de": "Vanuatu", "it": "Vanuatu", "sv": "Vanuatu", "pl": "Vanuatu", "fi": "Vanuatu", "zh": "\u74e6\u52aa\u963f\u56fe", "ja": "\u30d0\u30cc\u30a2\u30c4", "es": "Vanuatu"}, "label_fr": "Vanuatu", "name": "Vanuatu", "dbpedia_uri": "http://dbpedia.org/resource/Vanuatu"}, "id": "VUT"}, {"geometry": {"type": "Polygon", "coordinates": [[[35.545665, 32.393991999999997], [35.545251999999998, 31.782505], [35.397561000000003, 31.489086], [34.927408, 31.353435000000001], [34.970506999999998, 31.616778], [35.225892000000002, 31.754341], [34.974640999999998, 31.866582000000001], [35.183929999999997, 32.532511], [35.545665, 32.393991999999997]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0417\u0430\u043f\u0430\u0434\u043d\u044b\u0439 \u0431\u0435\u0440\u0435\u0433 \u0440\u0435\u043a\u0438 \u0418\u043e\u0440\u0434\u0430\u043d", "fr": "Cisjordanie", "en": "West Bank", "nl": "Westelijke Jordaanoever", "pt": "Cisjord\u00e2nia", "no": "Vestbredden", "de": "Westjordanland", "it": "Cisgiordania", "sv": "V\u00e4stbanken", "pl": "Zachodni Brzeg", "fi": "L\u00e4nsiranta", "zh": "\u7d04\u65e6\u6cb3\u897f\u5cb8\u5730\u5340", "ja": "\u30e8\u30eb\u30c0\u30f3\u5ddd\u897f\u5cb8\u5730\u533a", "es": "Cisjordania"}, "label_fr": "Cisjordanie", "name": "West Bank", "dbpedia_uri": "http://dbpedia.org/resource/West_Bank"}, "id": "PSE"}, {"geometry": {"type": "Polygon", "coordinates": [[[53.108573, 16.651050999999999], [52.385205999999997, 16.382411000000001], [52.191729000000002, 15.938433], [52.168165000000002, 15.59742], [51.172514999999997, 15.17525], [49.574576, 14.708767], [48.679231000000001, 14.003202], [48.238947000000003, 13.948090000000001], [47.938913999999997, 14.007232999999999], [47.354453999999997, 13.592219999999999], [46.717075999999999, 13.399699], [45.877592999999997, 13.347764], [45.625050000000002, 13.290946], [45.406458999999998, 13.026904999999999], [45.144356000000002, 12.953938000000001], [44.989533000000002, 12.699586999999999], [44.494576000000002, 12.721653], [44.175113000000003, 12.58595], [43.482959000000001, 12.636799999999999], [43.222870999999998, 13.22095], [43.251448000000003, 13.767583999999999], [43.087944, 14.06263], [42.892245000000003, 14.802249], [42.604872999999998, 15.213335000000001], [42.805014999999997, 15.261963], [42.702438000000001, 15.718885999999999], [42.823670999999997, 15.911742], [42.779331999999997, 16.347891000000001], [43.218375000000002, 16.666889999999999], [43.115797999999998, 17.088439999999999], [43.380794000000002, 17.579986999999999], [43.791519000000001, 17.319977000000002], [44.062612999999999, 17.410359], [45.216650999999999, 17.433329000000001], [45.399999000000001, 17.333335000000002], [46.366658999999999, 17.233315000000001], [46.749994000000001, 17.283338000000001], [47.000005000000002, 16.949998999999998], [47.466695000000001, 17.116682000000001], [48.183343999999998, 18.166668999999999], [49.116672000000001, 18.616668000000001], [52.000010000000003, 19.000003], [52.782184000000001, 17.349741999999999], [53.108573, 16.651050999999999]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0419\u0435\u043c\u0435\u043d", "fr": "Y\u00e9men", "en": "Yemen", "nl": "Jemen", "pt": "I\u00e9men", "no": "Jemen", "de": "Jemen", "it": "Yemen", "sv": "Jemen", "pl": "Jemen", "fi": "Jemen", "zh": "\u4e5f\u95e8", "ja": "\u30a4\u30a8\u30e1\u30f3", "es": "Yemen"}, "label_fr": "Y\u00e9men", "name": "Yemen", "dbpedia_uri": "http://dbpedia.org/resource/Yemen"}, "id": "YEM"}, {"geometry": {"type": "Polygon", "coordinates": [[[31.521000999999998, -29.257387000000001], [31.325561, -29.401978], [30.901762999999999, -29.909956999999999], [30.622813000000001, -30.423776], [30.055716, -31.140269], [28.925553000000001, -32.172041], [28.219756, -32.771953000000003], [27.464607999999998, -33.226964000000002], [26.419452, -33.61495], [25.909663999999999, -33.66704], [25.780628, -33.944645999999999], [25.172861999999999, -33.796850999999997], [24.677852999999999, -33.987175999999998], [23.594042999999999, -33.794474000000001], [22.988188999999998, -33.916431000000003], [22.574157, -33.864083000000001], [21.542798999999999, -34.258839000000002], [20.689053000000001, -34.417175], [20.071261, -34.795136999999997], [19.616405, -34.819166000000003], [19.193277999999999, -34.462598999999997], [18.855315000000001, -34.444305999999997], [18.424643, -33.997872999999998], [18.377410999999999, -34.136521000000002], [18.244499000000001, -33.867752000000003], [18.250080000000001, -33.281430999999998], [17.925190000000001, -32.611291000000001], [18.247910000000001, -32.429130999999998], [18.221761999999998, -31.661632999999998], [17.566918000000001, -30.725721], [17.064416000000001, -29.878640999999998], [17.062918, -29.875954], [16.344977, -28.576705], [16.824017000000001, -28.082162], [17.218928999999999, -28.355943], [17.387497, -28.783514], [17.836151999999998, -28.856377999999999], [18.464898999999999, -29.045462000000001], [19.002127000000002, -28.972442999999998], [19.894734, -28.461105], [19.895768, -24.767790000000002], [20.165725999999999, -24.917961999999999], [20.758609, -25.868136], [20.66647, -26.477453000000001], [20.889609, -26.828543], [21.605896000000001, -26.726534000000001], [22.105969000000002, -26.280256000000001], [22.579532, -25.979448000000001], [22.824271, -25.500458999999999], [23.312097000000001, -25.268689999999999], [23.73357, -25.390129000000002], [24.211266999999999, -25.670216], [25.025171, -25.719670000000001], [25.664666, -25.486816000000001], [25.765848999999999, -25.174845000000001], [25.941652000000001, -24.696373000000001], [26.485752999999999, -24.616326999999998], [26.786407000000001, -24.240691000000002], [27.119409999999998, -23.574323], [28.017236, -22.827753999999999], [29.432188, -22.091313], [29.839037000000001, -22.102215999999999], [30.322883000000001, -22.271612000000001], [30.659865, -22.151567], [31.191409, -22.25151], [31.670397999999999, -23.658968999999999], [31.930589000000001, -24.369416999999999], [31.752407999999999, -25.484283999999999], [31.837778, -25.843332], [31.333158000000001, -25.660191000000001], [31.044080000000001, -25.731452000000001], [30.949667000000002, -26.022649000000001], [30.676608999999999, -26.398078000000002], [30.685962, -26.743845], [31.282772999999999, -27.285879000000001], [31.86806, -27.177927], [32.071665000000003, -26.733820000000001], [32.830120000000001, -26.742191999999999], [32.580264999999997, -27.470158000000001], [32.462133000000001, -28.301010999999999], [32.203389000000001, -28.752405], [31.521000999999998, -29.257387000000001]], [[28.978262999999998, -28.955597000000001], [28.541699999999999, -28.647501999999999], [28.074338000000001, -28.851469000000002], [27.532511, -29.242711], [26.999262000000002, -29.875954], [27.749396999999998, -30.645105999999998], [28.107205, -30.545732000000001], [28.291069, -30.226216999999998], [28.848400000000002, -30.070050999999999], [29.018415000000001, -29.743766000000001], [29.325165999999999, -29.257387000000001], [28.978262999999998, -28.955597000000001]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u042e\u0436\u043d\u043e-\u0410\u0444\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0430\u044f \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430", "fr": "Afrique du Sud", "en": "South Africa", "nl": "Zuid-Afrika", "pt": "\u00c1frica do Sul", "no": "S\u00f8r-Afrika", "de": "S\u00fcdafrika", "it": "Sudafrica", "sv": "Sydafrika", "pl": "Republika Po\u0142udniowej Afryki", "fi": "Etel\u00e4-Afrikka", "zh": "\u5357\u975e", "ja": "\u5357\u30a2\u30d5\u30ea\u30ab\u5171\u548c\u56fd", "es": "Sud\u00e1frica"}, "label_fr": "Afrique du Sud", "name": "South Africa", "dbpedia_uri": "http://dbpedia.org/resource/South_Africa"}, "id": "ZAF"}, {"geometry": {"type": "Polygon", "coordinates": [[[32.759374999999999, -9.2305989999999998], [33.231388000000003, -9.6767219999999998], [33.485688000000003, -10.525558999999999], [33.315309999999997, -10.79655], [33.114288999999999, -11.607198], [33.306421999999998, -12.435778000000001], [32.991764000000003, -12.783871], [32.688164999999998, -13.712858000000001], [33.214024999999999, -13.97186], [30.179480999999999, -14.796099], [30.274256000000001, -15.507787], [29.516833999999999, -15.644678000000001], [28.947462999999999, -16.043050999999998], [28.825869000000001, -16.389748999999998], [28.467905999999999, -16.468399999999999], [27.598243, -17.290831000000001], [27.044426999999999, -17.938026000000001], [26.706772999999998, -17.961228999999999], [26.381934999999999, -17.846042000000001], [25.264226000000001, -17.736540000000002], [25.084443, -17.661816000000002], [25.07695, -17.578823], [24.682348999999999, -17.353411000000001], [24.033861999999999, -17.295843000000001], [23.215047999999999, -17.523116000000002], [22.562477999999999, -16.898451000000001], [21.887843, -16.080310000000001], [21.933886000000001, -12.898436999999999], [24.016137000000001, -12.911046000000001], [23.930921999999999, -12.565848000000001], [24.079905, -12.191297], [23.904153999999998, -11.722282], [24.017893999999998, -11.237297999999999], [23.912215, -10.926826], [24.257155000000001, -10.951993], [24.314516000000001, -11.262826], [24.783169999999998, -11.238694000000001], [25.418118, -11.330935999999999], [25.752310000000001, -11.784965], [26.553087999999999, -11.924440000000001], [27.16442, -11.608748], [27.388798999999999, -12.132747], [28.155108999999999, -12.272481000000001], [28.523561999999998, -12.698604], [28.934286, -13.248958], [29.699614, -13.257227], [29.616001000000001, -12.178895000000001], [29.341548, -12.360744], [28.642416999999998, -11.971569000000001], [28.372253000000001, -11.793647], [28.49607, -10.789884000000001], [28.673681999999999, -9.6059249999999992], [28.449871000000002, -9.1649180000000001], [28.734867000000001, -8.5265590000000007], [29.002911999999998, -8.4070319999999992], [30.346086, -8.2382570000000008], [30.740015, -8.3400069999999999], [31.157751000000001, -8.5945789999999995], [31.556348, -8.7620489999999993], [32.191865, -8.9303589999999993], [32.759374999999999, -9.2305989999999998]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0417\u0430\u043c\u0431\u0438\u044f", "fr": "Zambie", "en": "Zambia", "nl": "Zambia", "pt": "Z\u00e2mbia", "no": "Zambia", "de": "Sambia", "it": "Zambia", "sv": "Zambia", "pl": "Zambia", "fi": "Sambia", "zh": "\u8d5e\u6bd4\u4e9a", "ja": "\u30b6\u30f3\u30d3\u30a2", "es": "Zambia"}, "label_fr": "Zambie", "name": "Zambia", "dbpedia_uri": "http://dbpedia.org/resource/Zambia"}, "id": "ZMB"}, {"geometry": {"type": "Polygon", "coordinates": [[[31.191409, -22.25151], [30.659865, -22.151567], [30.322883000000001, -22.271612000000001], [29.839037000000001, -22.102215999999999], [29.432188, -22.091313], [28.794656, -21.639454000000001], [28.021370000000001, -21.485975], [27.727228, -20.851801999999999], [27.724747000000001, -20.499058999999999], [27.296505, -20.39152], [26.164791000000001, -19.293085999999999], [25.850390999999998, -18.714413], [25.649163000000001, -18.536026], [25.264226000000001, -17.736540000000002], [26.381934999999999, -17.846042000000001], [26.706772999999998, -17.961228999999999], [27.044426999999999, -17.938026000000001], [27.598243, -17.290831000000001], [28.467905999999999, -16.468399999999999], [28.825869000000001, -16.389748999999998], [28.947462999999999, -16.043050999999998], [29.516833999999999, -15.644678000000001], [30.274256000000001, -15.507787], [30.338954999999999, -15.880839], [31.173064, -15.860944], [31.636498, -16.07199], [31.852041, -16.319417000000001], [32.328239000000004, -16.392074000000001], [32.847639000000001, -16.713398000000002], [32.849860999999997, -17.979057000000001], [32.654885999999998, -18.672090000000001], [32.611994000000003, -19.419383], [32.772708000000002, -19.715592000000001], [32.659742999999999, -20.304290000000002], [32.508693000000001, -20.395292000000001], [32.244987999999999, -21.116489000000001], [31.191409, -22.25151]]]}, "type": "Feature", "properties": {"labels": {"ru": "\u0417\u0438\u043c\u0431\u0430\u0431\u0432\u0435", "fr": "Zimbabwe", "en": "Zimbabwe", "nl": "Zimbabwe", "pt": "Zimbabwe", "no": "Zimbabwe", "de": "Simbabwe", "it": "Zimbabwe", "sv": "Zimbabwe", "pl": "Zimbabwe", "fi": "Zimbabwe", "zh": "\u8f9b\u5df4\u5a01", "ja": "\u30b8\u30f3\u30d0\u30d6\u30a8", "es": "Zimbabue"}, "label_fr": "Zimbabwe", "name": "Zimbabwe", "dbpedia_uri": "http://dbpedia.org/resource/Zimbabwe"}, "id": "ZWE"}]}
\ No newline at end of file
--- a/web/hdalab/static/hdalab/lib/jquery-1.7.1.min.js	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-/*! jQuery v1.7.1 jquery.com | jquery.org/license */
-(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+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(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
-f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.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 contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.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|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={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,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
-{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
\ No newline at end of file
--- a/web/hdalab/static/hdalab/lib/jquery-ui-1.8.16.custom.min.js	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,356 +0,0 @@
-/*!
- * jQuery UI 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI
- */
-(function(c,j){function k(a,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.16",
-keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({propAttr:c.fn.prop||c.fn.attr,_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=
-this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,
-"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":
-"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,
-outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a,
-"tabindex"),d=isNaN(b);return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&
-a.element[0].parentNode)for(var e=0;e<b.length;e++)a.options[b[e][0]]&&b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&
-c.ui.isOverAxis(b,e,i)}})}})(jQuery);
-;/*!
- * jQuery UI Widget 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Widget
- */
-(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)try{b(d).triggerHandler("remove")}catch(e){}k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(d){}});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=
-function(h){return!!b.data(h,a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):
-d;if(e&&d.charAt(0)==="_")return h;e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=
-b.extend(true,{},this.options,this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+
-"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",
-c);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
-;/*!
- * jQuery UI Mouse 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Mouse
- *
- * Depends:
- *	jquery.ui.widget.js
- */
-(function(b){var d=false;b(document).mouseup(function(){d=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(c){return a._mouseDown(c)}).bind("click."+this.widgetName,function(c){if(true===b.data(c.target,a.widgetName+".preventClickEvent")){b.removeData(c.target,a.widgetName+".preventClickEvent");c.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+
-this.widgetName)},_mouseDown:function(a){if(!d){this._mouseStarted&&this._mouseUp(a);this._mouseDownEvent=a;var c=this,f=a.which==1,g=typeof this.options.cancel=="string"&&a.target.nodeName?b(a.target).closest(this.options.cancel).length:false;if(!f||g||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){c.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=
-this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault();return true}}true===b.data(a.target,this.widgetName+".preventClickEvent")&&b.removeData(a.target,this.widgetName+".preventClickEvent");this._mouseMoveDelegate=function(e){return c._mouseMove(e)};this._mouseUpDelegate=function(e){return c._mouseUp(e)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);a.preventDefault();return d=true}},_mouseMove:function(a){if(b.browser.msie&&
-!(document.documentMode>=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=
-false;a.target==this._mouseDownEvent.target&&b.data(a.target,this.widgetName+".preventClickEvent",true);this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
-;/*
- * jQuery UI Position 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Position
- */
-(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY,
-left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+=
-k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-=
-m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left=
-d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+=
-a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b),
-g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery);
-;/*
- * jQuery UI Draggable 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Draggables
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.mouse.js
- *	jquery.ui.widget.js
- */
-(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper==
-"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b=
-this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;if(b.iframeFix)d(b.iframeFix===true?"iframe":b.iframeFix).each(function(){d('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")});return true},_mouseStart:function(a){var b=this.options;
-this.helper=this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});
-this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions();d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);d.ui.ddmanager&&d.ui.ddmanager.dragStart(this,a);return true},
-_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b=
-false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&this.options.revert.call(this.element,b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,
-10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",a)!==false&&this._clear();return false},_mouseUp:function(a){this.options.iframeFix===true&&d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});d.ui.ddmanager&&d.ui.ddmanager.dragStop(this,a);return d.ui.mouse.prototype._mouseUp.call(this,a)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle||
-!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone().removeAttr("id"):this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&&
-a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=
-this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),
-10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),
-10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[a.containment=="document"?0:d(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,a.containment=="document"?0:d(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,
-(a.containment=="document"?0:d(window).scrollLeft())+d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a.containment=="document"?0:d(window).scrollTop())+(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&a.containment.constructor!=Array){a=d(a.containment);var b=a[0];if(b){a.offset();var c=d(b).css("overflow")!=
-"hidden";this.containment=[(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0),(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0),(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),
-10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom];this.relative_container=a}}else if(a.containment.constructor==Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+
-this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&
-!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,h=a.pageY;if(this.originalPosition){var g;if(this.containment){if(this.relative_container){g=this.relative_container.offset();g=[this.containment[0]+g.left,this.containment[1]+g.top,this.containment[2]+g.left,this.containment[3]+g.top]}else g=this.containment;if(a.pageX-this.offset.click.left<g[0])e=g[0]+this.offset.click.left;
-if(a.pageY-this.offset.click.top<g[1])h=g[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>g[2])e=g[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>g[3])h=g[3]+this.offset.click.top}if(b.grid){h=b.grid[1]?this.originalPageY+Math.round((h-this.originalPageY)/b.grid[1])*b.grid[1]:this.originalPageY;h=g?!(h-this.offset.click.top<g[1]||h-this.offset.click.top>g[3])?h:!(h-this.offset.click.top<g[1])?h-b.grid[1]:h+b.grid[1]:h;e=b.grid[0]?this.originalPageX+Math.round((e-this.originalPageX)/
-b.grid[0])*b.grid[0]:this.originalPageX;e=g?!(e-this.offset.click.left<g[0]||e-this.offset.click.left>g[2])?e:!(e-this.offset.click.left<g[0])?e-b.grid[0]:e+b.grid[0]:e}}return{top:h-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop()),left:e-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&d.browser.version<
-526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(a,b,c){c=c||this._uiHash();d.ui.plugin.call(this,a,[b,c]);if(a=="drag")this.positionAbs=this._convertPositionTo("absolute");return d.Widget.prototype._trigger.call(this,a,b,
-c)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});d.extend(d.ui.draggable,{version:"1.8.16"});d.ui.plugin.add("draggable","connectToSortable",{start:function(a,b){var c=d(this).data("draggable"),f=c.options,e=d.extend({},b,{item:c.element});c.sortables=[];d(f.connectToSortable).each(function(){var h=d.data(this,"sortable");if(h&&!h.options.disabled){c.sortables.push({instance:h,shouldRevert:h.options.revert});
-h.refreshPositions();h._trigger("activate",a,e)}})},stop:function(a,b){var c=d(this).data("draggable"),f=d.extend({},b,{item:c.element});d.each(c.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;c.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(a);this.instance.options.helper=this.instance.options._helper;c.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval=
-false;this.instance._trigger("deactivate",a,f)}})},drag:function(a,b){var c=d(this).data("draggable"),f=this;d.each(c.sortables,function(){this.instance.positionAbs=c.positionAbs;this.instance.helperProportions=c.helperProportions;this.instance.offset.click=c.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=d(f).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",true);
-this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return b.helper[0]};a.target=this.instance.currentItem[0];this.instance._mouseCapture(a,true);this.instance._mouseStart(a,true,true);this.instance.offset.click.top=c.offset.click.top;this.instance.offset.click.left=c.offset.click.left;this.instance.offset.parent.left-=c.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=c.offset.parent.top-this.instance.offset.parent.top;
-c._trigger("toSortable",a);c.dropped=this.instance.element;c.currentItem=c.element;this.instance.fromOutside=c}this.instance.currentItem&&this.instance._mouseDrag(a)}else if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",a,this.instance._uiHash(this.instance));this.instance._mouseStop(a,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&&
-this.instance.placeholder.remove();c._trigger("fromSortable",a);c.dropped=false}})}});d.ui.plugin.add("draggable","cursor",{start:function(){var a=d("body"),b=d(this).data("draggable").options;if(a.css("cursor"))b._cursor=a.css("cursor");a.css("cursor",b.cursor)},stop:function(){var a=d(this).data("draggable").options;a._cursor&&d("body").css("cursor",a._cursor)}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("opacity"))b._opacity=
-a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");if(a.scrollParent[0]!=document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){if(!c.axis||c.axis!=
-"x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop+c.scrollSpeed;else if(a.pageY-b.overflowOffset.top<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop-c.scrollSpeed;if(!c.axis||c.axis!="y")if(b.overflowOffset.left+b.scrollParent[0].offsetWidth-a.pageX<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft+c.scrollSpeed;else if(a.pageX-b.overflowOffset.left<
-c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft-c.scrollSpeed}else{if(!c.axis||c.axis!="x")if(a.pageY-d(document).scrollTop()<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()-c.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()+c.scrollSpeed);if(!c.axis||c.axis!="y")if(a.pageX-d(document).scrollLeft()<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()-
-c.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()+c.scrollSpeed)}f!==false&&d.ui.ddmanager&&!c.dropBehaviour&&d.ui.ddmanager.prepareOffsets(b,a)}});d.ui.plugin.add("draggable","snap",{start:function(){var a=d(this).data("draggable"),b=a.options;a.snapElements=[];d(b.snap.constructor!=String?b.snap.items||":data(draggable)":b.snap).each(function(){var c=d(this),f=c.offset();this!=a.element[0]&&a.snapElements.push({item:this,
-width:c.outerWidth(),height:c.outerHeight(),top:f.top,left:f.left})})},drag:function(a,b){for(var c=d(this).data("draggable"),f=c.options,e=f.snapTolerance,h=b.offset.left,g=h+c.helperProportions.width,n=b.offset.top,o=n+c.helperProportions.height,i=c.snapElements.length-1;i>=0;i--){var j=c.snapElements[i].left,l=j+c.snapElements[i].width,k=c.snapElements[i].top,m=k+c.snapElements[i].height;if(j-e<h&&h<l+e&&k-e<n&&n<m+e||j-e<h&&h<l+e&&k-e<o&&o<m+e||j-e<g&&g<l+e&&k-e<n&&n<m+e||j-e<g&&g<l+e&&k-e<o&&
-o<m+e){if(f.snapMode!="inner"){var p=Math.abs(k-o)<=e,q=Math.abs(m-n)<=e,r=Math.abs(j-g)<=e,s=Math.abs(l-h)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k-c.helperProportions.height,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:m,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j-c.helperProportions.width}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l}).left-c.margins.left}var t=
-p||q||r||s;if(f.snapMode!="outer"){p=Math.abs(k-n)<=e;q=Math.abs(m-o)<=e;r=Math.abs(j-h)<=e;s=Math.abs(l-g)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:m-c.helperProportions.height,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l-c.helperProportions.width}).left-c.margins.left}if(!c.snapElements[i].snapping&&
-(p||q||r||s||t))c.options.snap.snap&&c.options.snap.snap.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=p||q||r||s||t}else{c.snapElements[i].snapping&&c.options.snap.release&&c.options.snap.release.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=false}}}});d.ui.plugin.add("draggable","stack",{start:function(){var a=d(this).data("draggable").options;a=d.makeArray(d(a.stack)).sort(function(c,f){return(parseInt(d(c).css("zIndex"),
-10)||0)-(parseInt(d(f).css("zIndex"),10)||0)});if(a.length){var b=parseInt(a[0].style.zIndex)||0;d(a).each(function(c){this.style.zIndex=b+c});this[0].style.zIndex=b+a.length}}});d.ui.plugin.add("draggable","zIndex",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("zIndex"))b._zIndex=a.css("zIndex");a.css("zIndex",b.zIndex)},stop:function(a,b){a=d(this).data("draggable").options;a._zIndex&&d(b.helper).css("zIndex",a._zIndex)}})})(jQuery);
-;/*
- * jQuery UI Droppable 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Droppables
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.widget.js
- *	jquery.ui.mouse.js
- *	jquery.ui.draggable.js
- */
-(function(d){d.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"},_create:function(){var a=this.options,b=a.accept;this.isover=0;this.isout=1;this.accept=d.isFunction(b)?b:function(c){return c.is(b)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};d.ui.ddmanager.droppables[a.scope]=d.ui.ddmanager.droppables[a.scope]||[];d.ui.ddmanager.droppables[a.scope].push(this);
-a.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var a=d.ui.ddmanager.droppables[this.options.scope],b=0;b<a.length;b++)a[b]==this&&a.splice(b,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(a,b){if(a=="accept")this.accept=d.isFunction(b)?b:function(c){return c.is(b)};d.Widget.prototype._setOption.apply(this,arguments)},_activate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&
-this.element.addClass(this.options.activeClass);b&&this._trigger("activate",a,this.ui(b))},_deactivate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);b&&this._trigger("deactivate",a,this.ui(b))},_over:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.addClass(this.options.hoverClass);
-this._trigger("over",a,this.ui(b))}},_out:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("out",a,this.ui(b))}},_drop:function(a,b){var c=b||d.ui.ddmanager.current;if(!c||(c.currentItem||c.element)[0]==this.element[0])return false;var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var g=
-d.data(this,"droppable");if(g.options.greedy&&!g.options.disabled&&g.options.scope==c.options.scope&&g.accept.call(g.element[0],c.currentItem||c.element)&&d.ui.intersect(c,d.extend(g,{offset:g.element.offset()}),g.options.tolerance)){e=true;return false}});if(e)return false;if(this.accept.call(this.element[0],c.currentItem||c.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass);this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("drop",
-a,this.ui(c));return this.element}return false},ui:function(a){return{draggable:a.currentItem||a.element,helper:a.helper,position:a.position,offset:a.positionAbs}}});d.extend(d.ui.droppable,{version:"1.8.16"});d.ui.intersect=function(a,b,c){if(!b.offset)return false;var e=(a.positionAbs||a.position.absolute).left,g=e+a.helperProportions.width,f=(a.positionAbs||a.position.absolute).top,h=f+a.helperProportions.height,i=b.offset.left,k=i+b.proportions.width,j=b.offset.top,l=j+b.proportions.height;
-switch(c){case "fit":return i<=e&&g<=k&&j<=f&&h<=l;case "intersect":return i<e+a.helperProportions.width/2&&g-a.helperProportions.width/2<k&&j<f+a.helperProportions.height/2&&h-a.helperProportions.height/2<l;case "pointer":return d.ui.isOver((a.positionAbs||a.position.absolute).top+(a.clickOffset||a.offset.click).top,(a.positionAbs||a.position.absolute).left+(a.clickOffset||a.offset.click).left,j,i,b.proportions.height,b.proportions.width);case "touch":return(f>=j&&f<=l||h>=j&&h<=l||f<j&&h>l)&&(e>=
-i&&e<=k||g>=i&&g<=k||e<i&&g>k);default:return false}};d.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,b){var c=d.ui.ddmanager.droppables[a.options.scope]||[],e=b?b.type:null,g=(a.currentItem||a.element).find(":data(droppable)").andSelf(),f=0;a:for(;f<c.length;f++)if(!(c[f].options.disabled||a&&!c[f].accept.call(c[f].element[0],a.currentItem||a.element))){for(var h=0;h<g.length;h++)if(g[h]==c[f].element[0]){c[f].proportions.height=0;continue a}c[f].visible=c[f].element.css("display")!=
-"none";if(c[f].visible){e=="mousedown"&&c[f]._activate.call(c[f],b);c[f].offset=c[f].element.offset();c[f].proportions={width:c[f].element[0].offsetWidth,height:c[f].element[0].offsetHeight}}}},drop:function(a,b){var c=false;d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(this.options){if(!this.options.disabled&&this.visible&&d.ui.intersect(a,this,this.options.tolerance))c=c||this._drop.call(this,b);if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],a.currentItem||
-a.element)){this.isout=1;this.isover=0;this._deactivate.call(this,b)}}});return c},dragStart:function(a,b){a.element.parents(":not(body,html)").bind("scroll.droppable",function(){a.options.refreshPositions||d.ui.ddmanager.prepareOffsets(a,b)})},drag:function(a,b){a.options.refreshPositions&&d.ui.ddmanager.prepareOffsets(a,b);d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var c=d.ui.intersect(a,this,this.options.tolerance);
-if(c=!c&&this.isover==1?"isout":c&&this.isover==0?"isover":null){var e;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");if(g.length){e=d.data(g[0],"droppable");e.greedyChild=c=="isover"?1:0}}if(e&&c=="isover"){e.isover=0;e.isout=1;e._out.call(e,b)}this[c]=1;this[c=="isout"?"isover":"isout"]=0;this[c=="isover"?"_over":"_out"].call(this,b);if(e&&c=="isout"){e.isout=0;e.isover=1;e._over.call(e,b)}}}})},dragStop:function(a,b){a.element.parents(":not(body,html)").unbind("scroll.droppable");
-a.options.refreshPositions||d.ui.ddmanager.prepareOffsets(a,b)}}})(jQuery);
-;/*
- * jQuery UI Resizable 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Resizables
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.mouse.js
- *	jquery.ui.widget.js
- */
-(function(e){e.widget("ui.resizable",e.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var b=this,a=this.options;this.element.addClass("ui-resizable");e.extend(this,{_aspectRatio:!!a.aspectRatio,aspectRatio:a.aspectRatio,originalElement:this.element,
-_proportionallyResizeElements:[],_helper:a.helper||a.ghost||a.animate?a.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&e.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(e('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),
-top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=
-this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=a.handles||(!e(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",
-nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var d=0;d<c.length;d++){var f=e.trim(c[d]),g=e('<div class="ui-resizable-handle '+("ui-resizable-"+f)+'"></div>');/sw|se|ne|nw/.test(f)&&g.css({zIndex:++a.zIndex});"se"==f&&g.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[f]=".ui-resizable-"+f;this.element.append(g)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor==
-String)this.handles[i]=e(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=e(this.handles[i],this.element),l=0;l=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,l);this._proportionallyResize()}e(this.handles[i])}};this._renderAxis(this.element);this._handles=e(".ui-resizable-handle",this.element).disableSelection();
-this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();e(this.element).addClass("ui-resizable-autohide").hover(function(){if(!a.disabled){e(this).removeClass("ui-resizable-autohide");b._handles.show()}},function(){if(!a.disabled)if(!b.resizing){e(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();
-var b=function(c){e(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a=
-false;for(var c in this.handles)if(e(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:e(document).scrollTop(),left:e(document).scrollLeft()};if(d.is(".ui-draggable")||/absolute/.test(d.css("position")))d.css({position:"absolute",top:c.top,left:c.left});e.browser.opera&&/relative/.test(d.css("position"))&&d.css({position:"relative",top:"auto",left:"auto"});
-this._renderProxy();c=m(this.helper.css("left"));var f=m(this.helper.css("top"));if(a.containment){c+=e(a.containment).scrollLeft()||0;f+=e(a.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:c,top:f};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:c,top:f};this.sizeDiff=
-{width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio:this.originalSize.width/this.originalSize.height||1;a=e(".ui-resizable-"+this.axis).css("cursor");e("body").css("cursor",a=="auto"?this.axis+"-resize":a);d.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,d=this._change[this.axis];
-if(!d)return false;c=d.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);this._updateVirtualBoundaries(b.shiftKey);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize",b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false},
-_mouseStop:function(b){this.resizing=false;var a=this.options,c=this;if(this._helper){var d=this._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName);d=f&&e.ui.hasScroll(d[0],"left")?0:c.sizeDiff.height;f=f?0:c.sizeDiff.width;f={width:c.helper.width()-f,height:c.helper.height()-d};d=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var g=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(e.extend(f,
-{top:g,left:d}));c.helper.height(c.size.height);c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}e("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",b);this._helper&&this.helper.remove();return false},_updateVirtualBoundaries:function(b){var a=this.options,c,d,f;a={minWidth:k(a.minWidth)?a.minWidth:0,maxWidth:k(a.maxWidth)?a.maxWidth:Infinity,minHeight:k(a.minHeight)?a.minHeight:0,maxHeight:k(a.maxHeight)?a.maxHeight:
-Infinity};if(this._aspectRatio||b){b=a.minHeight*this.aspectRatio;d=a.minWidth/this.aspectRatio;c=a.maxHeight*this.aspectRatio;f=a.maxWidth/this.aspectRatio;if(b>a.minWidth)a.minWidth=b;if(d>a.minHeight)a.minHeight=d;if(c<a.maxWidth)a.maxWidth=c;if(f<a.maxHeight)a.maxHeight=f}this._vBoundaries=a},_updateCache:function(b){this.offset=this.helper.offset();if(k(b.left))this.position.left=b.left;if(k(b.top))this.position.top=b.top;if(k(b.height))this.size.height=b.height;if(k(b.width))this.size.width=
-b.width},_updateRatio:function(b){var a=this.position,c=this.size,d=this.axis;if(k(b.height))b.width=b.height*this.aspectRatio;else if(k(b.width))b.height=b.width/this.aspectRatio;if(d=="sw"){b.left=a.left+(c.width-b.width);b.top=null}if(d=="nw"){b.top=a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this._vBoundaries,c=this.axis,d=k(b.width)&&a.maxWidth&&a.maxWidth<b.width,f=k(b.height)&&a.maxHeight&&a.maxHeight<b.height,g=k(b.width)&&a.minWidth&&
-a.minWidth>b.width,h=k(b.height)&&a.minHeight&&a.minHeight>b.height;if(g)b.width=a.minWidth;if(h)b.height=a.minHeight;if(d)b.width=a.maxWidth;if(f)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+this.size.height,l=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(g&&l)b.left=i-a.minWidth;if(d&&l)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(f&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left=
-null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=this.helper||this.element,a=0;a<this._proportionallyResizeElements.length;a++){var c=this._proportionallyResizeElements[a];if(!this.borderDif){var d=[c.css("borderTopWidth"),c.css("borderRightWidth"),c.css("borderBottomWidth"),c.css("borderLeftWidth")],f=[c.css("paddingTop"),c.css("paddingRight"),c.css("paddingBottom"),c.css("paddingLeft")];this.borderDif=e.map(d,function(g,h){g=parseInt(g,10)||
-0;h=parseInt(f[h],10)||0;return g+h})}e.browser.msie&&(e(b).is(":hidden")||e(b).parents(":hidden").length)||c.css({height:b.height()-this.borderDif[0]-this.borderDif[2]||0,width:b.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var b=this.options;this.elementOffset=this.element.offset();if(this._helper){this.helper=this.helper||e('<div style="overflow:hidden;"></div>');var a=e.browser.msie&&e.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+
-a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,a){return{width:this.originalSize.width+a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+
-c}},se:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a,c]))},ne:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){e.ui.plugin.call(this,b,[a,this.ui()]);
-b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});e.extend(e.ui.resizable,{version:"1.8.16"});e.ui.plugin.add("resizable","alsoResize",{start:function(){var b=e(this).data("resizable").options,a=function(c){e(c).each(function(){var d=e(this);d.data("resizable-alsoresize",{width:parseInt(d.width(),
-10),height:parseInt(d.height(),10),left:parseInt(d.css("left"),10),top:parseInt(d.css("top"),10),position:d.css("position")})})};if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize=b.alsoResize[0];a(b.alsoResize)}else e.each(b.alsoResize,function(c){a(c)});else a(b.alsoResize)},resize:function(b,a){var c=e(this).data("resizable");b=c.options;var d=c.originalSize,f=c.originalPosition,g={height:c.size.height-d.height||0,width:c.size.width-d.width||0,top:c.position.top-
-f.top||0,left:c.position.left-f.left||0},h=function(i,j){e(i).each(function(){var l=e(this),q=e(this).data("resizable-alsoresize"),p={},r=j&&j.length?j:l.parents(a.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(r,function(n,o){if((n=(q[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(e.browser.opera&&/relative/.test(l.css("position"))){c._revertToRelativePosition=true;l.css({position:"absolute",top:"auto",left:"auto"})}l.css(p)})};typeof b.alsoResize=="object"&&!b.alsoResize.nodeType?
-e.each(b.alsoResize,function(i,j){h(i,j)}):h(b.alsoResize)},stop:function(){var b=e(this).data("resizable"),a=b.options,c=function(d){e(d).each(function(){var f=e(this);f.css({position:f.data("resizable-alsoresize").position})})};if(b._revertToRelativePosition){b._revertToRelativePosition=false;typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?e.each(a.alsoResize,function(d){c(d)}):c(a.alsoResize)}e(this).removeData("resizable-alsoresize")}});e.ui.plugin.add("resizable","animate",{stop:function(b){var a=
-e(this).data("resizable"),c=a.options,d=a._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName),g=f&&e.ui.hasScroll(d[0],"left")?0:a.sizeDiff.height;f={width:a.size.width-(f?0:a.sizeDiff.width),height:a.size.height-g};g=parseInt(a.element.css("left"),10)+(a.position.left-a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(e.extend(f,h&&g?{top:h,left:g}:{}),{duration:c.animateDuration,easing:c.animateEasing,
-step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};d&&d.length&&e(d[0]).css({width:i.width,height:i.height});a._updateCache(i);a._propagate("resize",b)}})}});e.ui.plugin.add("resizable","containment",{start:function(){var b=e(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof e?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement=
-e(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,top:0};b.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}}else{var d=e(a),f=[];e(["Top","Right","Left","Bottom"]).each(function(i,j){f[i]=m(d.css("padding"+j))});b.containerOffset=d.offset();b.containerPosition=d.position();b.containerSize={height:d.innerHeight()-f[3],width:d.innerWidth()-f[1]};c=b.containerOffset;
-var g=b.containerSize.height,h=b.containerSize.width;h=e.ui.hasScroll(a,"left")?a.scrollWidth:h;g=e.ui.hasScroll(a)?a.scrollHeight:g;b.parentData={element:a,left:c.left,top:c.top,width:h,height:g}}}},resize:function(b){var a=e(this).data("resizable"),c=a.options,d=a.containerOffset,f=a.position;b=a._aspectRatio||b.shiftKey;var g={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))g=d;if(f.left<(a._helper?d.left:0)){a.size.width+=a._helper?a.position.left-d.left:
-a.position.left-g.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?d.left:0}if(f.top<(a._helper?d.top:0)){a.size.height+=a._helper?a.position.top-d.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper?d.top:0}a.offset.left=a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-g.left:a.offset.left-g.left)+a.sizeDiff.width);d=Math.abs((a._helper?a.offset.top-g.top:a.offset.top-
-d.top)+a.sizeDiff.height);f=a.containerElement.get(0)==a.element.parent().get(0);g=/relative|absolute/.test(a.containerElement.css("position"));if(f&&g)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height=a.size.width/a.aspectRatio}if(d+a.size.height>=a.parentData.height){a.size.height=a.parentData.height-d;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=e(this).data("resizable"),a=b.options,c=b.containerOffset,d=b.containerPosition,
-f=b.containerElement,g=e(b.helper),h=g.offset(),i=g.outerWidth()-b.sizeDiff.width;g=g.outerHeight()-b.sizeDiff.height;b._helper&&!a.animate&&/relative/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g});b._helper&&!a.animate&&/static/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g})}});e.ui.plugin.add("resizable","ghost",{start:function(){var b=e(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25,
-display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost=="string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=e(this).data("resizable");b.ghost&&b.ghost.css({position:"relative",height:b.size.height,width:b.size.width})},stop:function(){var b=e(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});e.ui.plugin.add("resizable","grid",{resize:function(){var b=
-e(this).data("resizable"),a=b.options,c=b.size,d=b.originalSize,f=b.originalPosition,g=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;var h=Math.round((c.width-d.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-d.height)/(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else if(/^(ne)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}else{if(/^(sw)$/.test(g)){b.size.width=d.width+h;b.size.height=
-d.height+a}else{b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}b.position.left=f.left-h}}});var m=function(b){return parseInt(b,10)||0},k=function(b){return!isNaN(parseInt(b,10))}})(jQuery);
-;/*
- * jQuery UI Selectable 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Selectables
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.mouse.js
- *	jquery.ui.widget.js
- */
-(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(c.options.filter,c.element[0]);f.each(function(){var d=e(this),b=d.offset();e.data(this,"selectable-item",{element:this,$element:d,left:b.left,top:b.top,right:b.left+d.outerWidth(),bottom:b.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"),
-selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX,
-c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting");b.unselecting=true;f._trigger("unselecting",
-c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f=this;this.dragged=true;if(!this.options.disabled){var d=
-this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.right<b||a.top>i||a.bottom<g);else if(d.tolerance=="fit")k=a.left>b&&a.right<h&&a.top>g&&a.bottom<i;if(k){if(a.selected){a.$element.removeClass("ui-selected");a.selected=false}if(a.unselecting){a.$element.removeClass("ui-unselecting");
-a.unselecting=false}if(!a.selecting){a.$element.addClass("ui-selecting");a.selecting=true;f._trigger("selecting",c,{selecting:a.element})}}else{if(a.selecting)if(c.metaKey&&a.startselected){a.$element.removeClass("ui-selecting");a.selecting=false;a.$element.addClass("ui-selected");a.selected=true}else{a.$element.removeClass("ui-selecting");a.selecting=false;if(a.startselected){a.$element.addClass("ui-unselecting");a.unselecting=true}f._trigger("unselecting",c,{unselecting:a.element})}if(a.selected)if(!c.metaKey&&
-!a.startselected){a.$element.removeClass("ui-selected");a.selected=false;a.$element.addClass("ui-unselecting");a.unselecting=true;f._trigger("unselecting",c,{unselecting:a.element})}}}});return false}},_mouseStop:function(c){var f=this;this.dragged=false;e(".ui-unselecting",this.element[0]).each(function(){var d=e.data(this,"selectable-item");d.$element.removeClass("ui-unselecting");d.unselecting=false;d.startselected=false;f._trigger("unselected",c,{unselected:d.element})});e(".ui-selecting",this.element[0]).each(function(){var d=
-e.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected");d.selecting=false;d.selected=true;d.startselected=true;f._trigger("selected",c,{selected:d.element})});this._trigger("stop",c);this.helper.remove();return false}});e.extend(e.ui.selectable,{version:"1.8.16"})})(jQuery);
-;/*
- * jQuery UI Sortable 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Sortables
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.mouse.js
- *	jquery.ui.widget.js
- */
-(function(d){d.widget("ui.sortable",d.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){var a=this.options;this.containerCache={};this.element.addClass("ui-sortable");
-this.refresh();this.floating=this.items.length?a.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData("sortable-item");return this},_setOption:function(a,b){if(a===
-"disabled"){this.options[a]=b;this.widget()[b?"addClass":"removeClass"]("ui-sortable-disabled")}else d.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(a,b){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(a);var c=null,e=this;d(a.target).parents().each(function(){if(d.data(this,"sortable-item")==e){c=d(this);return false}});if(d.data(a.target,"sortable-item")==e)c=d(a.target);if(!c)return false;if(this.options.handle&&
-!b){var f=false;d(this.options.handle,c).find("*").andSelf().each(function(){if(this==a.target)f=true});if(!f)return false}this.currentItem=c;this._removeCurrentsFromItems();return true},_mouseStart:function(a,b,c){b=this.options;var e=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,
-left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};
-this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();b.containment&&this._setContainment();if(b.cursor){if(d("body").css("cursor"))this._storedCursor=d("body").css("cursor");d("body").css("cursor",b.cursor)}if(b.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",b.opacity)}if(b.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",b.zIndex)}if(this.scrollParent[0]!=
-document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",a,e._uiHash(this));if(d.ui.ddmanager)d.ui.ddmanager.current=this;d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a);
-return true},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var b=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageY<b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop+b.scrollSpeed;else if(a.pageY-this.overflowOffset.top<
-b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop-b.scrollSpeed;if(this.overflowOffset.left+this.scrollParent[0].offsetWidth-a.pageX<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft+b.scrollSpeed;else if(a.pageX-this.overflowOffset.left<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft-b.scrollSpeed}else{if(a.pageY-d(document).scrollTop()<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()-
-b.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()+b.scrollSpeed);if(a.pageX-d(document).scrollLeft()<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()-b.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()+b.scrollSpeed)}c!==false&&d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,
-a)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(b=this.items.length-1;b>=0;b--){c=this.items[b];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!d.ui.contains(this.placeholder[0],e)&&(this.options.type=="semi-dynamic"?!d.ui.contains(this.element[0],
-e):true)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(a,c);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(a,b){if(a){d.ui.ddmanager&&!this.options.dropBehaviour&&d.ui.ddmanager.drop(this,a);if(this.options.revert){var c=this;b=c.placeholder.offset();
-c.reverting=true;d(this.helper).animate({left:b.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:b.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(a)})}else this._clear(a,b);return false}},cancel:function(){var a=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):
-this.currentItem.show();for(var b=this.containers.length-1;b>=0;b--){this.containers[b]._trigger("deactivate",null,a._uiHash(this));if(this.containers[b].containerCache.over){this.containers[b]._trigger("out",null,a._uiHash(this));this.containers[b].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();d.extend(this,{helper:null,
-dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?d(this.domPosition.prev).after(this.currentItem):d(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};d(b).each(function(){var e=(d(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);if(e)c.push((a.key||e[1]+"[]")+"="+(a.key&&a.expression?e[1]:e[2]))});!c.length&&a.key&&c.push(a.key+"=");return c.join("&")},
-toArray:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};b.each(function(){c.push(d(a.item||this).attr(a.attribute||"id")||"")});return c},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,g=a.left,h=g+a.width,i=a.top,k=i+a.height,j=this.offset.click.top,l=this.offset.click.left;j=e+j>i&&e+j<k&&b+l>g&&b+l<h;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||
-this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>a[this.floating?"width":"height"]?j:g<b+this.helperProportions.width/2&&c-this.helperProportions.width/2<h&&i<e+this.helperProportions.height/2&&f-this.helperProportions.height/2<k},_intersectsWithPointer:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left,a.width);b=b&&a;a=this._getDragVerticalDirection();
-var c=this._getDragHorizontalDirection();if(!b)return false;return this.floating?c&&c=="right"||a=="down"?2:1:a&&(a=="down"?2:1)},_intersectsWithSides:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top+a.height/2,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left+a.width/2,a.width);var c=this._getDragVerticalDirection(),e=this._getDragHorizontalDirection();return this.floating&&e?e=="right"&&a||e=="left"&&!a:c&&(c=="down"&&b||c=="up"&&!b)},
-_getDragVerticalDirection:function(){var a=this.positionAbs.top-this.lastPositionAbs.top;return a!=0&&(a>0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a);this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(a){var b=[],c=[],e=this._connectWith();
-if(e&&a)for(a=e.length-1;a>=0;a--)for(var f=d(e[a]),g=f.length-1;g>=0;g--){var h=d.data(f[g],"sortable");if(h&&h!=this&&!h.options.disabled)c.push([d.isFunction(h.options.items)?h.options.items.call(h.element):d(h.options.items,h.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),h])}c.push([d.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):d(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),
-this]);for(a=c.length-1;a>=0;a--)c[a][0].each(function(){b.push(this)});return d(b)},_removeCurrentsFromItems:function(){for(var a=this.currentItem.find(":data(sortable-item)"),b=0;b<this.items.length;b++)for(var c=0;c<a.length;c++)a[c]==this.items[b].item[0]&&this.items.splice(b,1)},_refreshItems:function(a){this.items=[];this.containers=[this];var b=this.items,c=[[d.isFunction(this.options.items)?this.options.items.call(this.element[0],a,{item:this.currentItem}):d(this.options.items,this.element),
-this]],e=this._connectWith();if(e)for(var f=e.length-1;f>=0;f--)for(var g=d(e[f]),h=g.length-1;h>=0;h--){var i=d.data(g[h],"sortable");if(i&&i!=this&&!i.options.disabled){c.push([d.isFunction(i.options.items)?i.options.items.call(i.element[0],a,{item:this.currentItem}):d(i.options.items,i.element),i]);this.containers.push(i)}}for(f=c.length-1;f>=0;f--){a=c[f][1];e=c[f][0];h=0;for(g=e.length;h<g;h++){i=d(e[h]);i.data("sortable-item",a);b.push({item:i,instance:a,width:0,height:0,left:0,top:0})}}},refreshPositions:function(a){if(this.offsetParent&&
-this.helper)this.offset.parent=this._getParentOffset();for(var b=this.items.length-1;b>=0;b--){var c=this.items[b];if(!(c.instance!=this.currentContainer&&this.currentContainer&&c.item[0]!=this.currentItem[0])){var e=this.options.toleranceElement?d(this.options.toleranceElement,c.item):c.item;if(!a){c.width=e.outerWidth();c.height=e.outerHeight()}e=e.offset();c.left=e.left;c.top=e.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(b=
-this.containers.length-1;b>=0;b--){e=this.containers[b].element.offset();this.containers[b].containerCache.left=e.left;this.containers[b].containerCache.top=e.top;this.containers[b].containerCache.width=this.containers[b].element.outerWidth();this.containers[b].containerCache.height=this.containers[b].element.outerHeight()}return this},_createPlaceholder:function(a){var b=a||this,c=b.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f=
-d(document.createElement(b.currentItem[0].nodeName)).addClass(e||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!e)f.style.visibility="hidden";return f},update:function(f,g){if(!(e&&!c.forcePlaceholderSize)){g.height()||g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10));g.width()||g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||
-0,10))}}}}b.placeholder=d(c.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);c.placeholder.update(b,b.placeholder)},_contactContainers:function(a){for(var b=null,c=null,e=this.containers.length-1;e>=0;e--)if(!d.ui.contains(this.currentItem[0],this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(b&&d.ui.contains(this.containers[e].element[0],b.element[0]))){b=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out",
-a,this._uiHash(this));this.containers[e].containerCache.over=0}if(b)if(this.containers.length===1){this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){b=1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],g=this.items.length-1;g>=0;g--)if(d.ui.contains(this.containers[c].element[0],this.items[g].item[0])){var h=this.items[g][this.containers[c].floating?"left":"top"];if(Math.abs(h-
-f)<b){b=Math.abs(h-f);e=this.items[g]}}if(e||this.options.dropOnEmpty){this.currentContainer=this.containers[c];e?this._rearrange(a,e,null,true):this._rearrange(a,null,this.containers[c].element,true);this._trigger("change",a,this._uiHash());this.containers[c]._trigger("change",a,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder);this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}}},_createHelper:function(a){var b=
-this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a,this.currentItem])):b.helper=="clone"?this.currentItem.clone():this.currentItem;a.parents("body").length||d(b.appendTo!="parent"?b.appendTo:this.currentItem[0].parentNode)[0].appendChild(a[0]);if(a[0]==this.currentItem[0])this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")};if(a[0].style.width==
-""||b.forceHelperSize)a.width(this.currentItem.width());if(a[0].style.height==""||b.forceHelperSize)a.height(this.currentItem.height());return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=
-this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a=
-{top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.currentItem.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),
-10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,d(a.containment=="document"?
-document:window).width()-this.helperProportions.width-this.margins.left,(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)){var b=d(a.containment)[0];a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"),
-10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(a,b){if(!b)b=
-this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&
-this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0]))this.offset.relative=this._getRelativeOffset();
-var f=a.pageX,g=a.pageY;if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.left<this.containment[0])f=this.containment[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<this.containment[1])g=this.containment[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>this.containment[2])f=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-
-this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:!(g-this.offset.click.top<this.containment[1])?g-b.grid[1]:g+b.grid[1]:g;f=this.originalPageX+Math.round((f-this.originalPageX)/b.grid[0])*b.grid[0];f=this.containment?!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:!(f-this.offset.click.left<this.containment[0])?f-b.grid[0]:f+b.grid[0]:f}}return{top:g-
-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())}},_rearrange:function(a,b,c,e){c?c[0].appendChild(this.placeholder[0]):b.item[0].parentNode.insertBefore(this.placeholder[0],
-this.direction=="down"?b.item[0]:b.item[0].nextSibling);this.counter=this.counter?++this.counter:1;var f=this,g=this.counter;window.setTimeout(function(){g==f.counter&&f.refreshPositions(!e)},0)},_clear:function(a,b){this.reverting=false;var c=[];!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem);this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var e in this._storedCSS)if(this._storedCSS[e]=="auto"||this._storedCSS[e]=="static")this._storedCSS[e]=
-"";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!b&&c.push(function(f){this._trigger("receive",f,this._uiHash(this.fromOutside))});if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!b)c.push(function(f){this._trigger("update",f,this._uiHash())});if(!d.ui.contains(this.element[0],this.currentItem[0])){b||c.push(function(f){this._trigger("remove",
-f,this._uiHash())});for(e=this.containers.length-1;e>=0;e--)if(d.ui.contains(this.containers[e].element[0],this.currentItem[0])&&!b){c.push(function(f){return function(g){f._trigger("receive",g,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(g){f._trigger("update",g,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){b||c.push(function(f){return function(g){f._trigger("deactivate",g,this._uiHash(this))}}.call(this,
-this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out",g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop",
-a,this._uiHash());for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}return false}b||this._trigger("beforeStop",a,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!b){for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){d.Widget.prototype._trigger.apply(this,arguments)===false&&this.cancel()},
-_uiHash:function(a){var b=a||this;return{helper:b.helper,placeholder:b.placeholder||d([]),position:b.position,originalPosition:b.originalPosition,offset:b.positionAbs,item:b.currentItem,sender:a?a.element:null}}});d.extend(d.ui.sortable,{version:"1.8.16"})})(jQuery);
-;/*
- * jQuery UI Autocomplete 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Autocomplete
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.widget.js
- *	jquery.ui.position.js
- */
-(function(d){var e=0;d.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var a=this,b=this.element[0].ownerDocument,g;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!(a.options.disabled||a.element.propAttr("readOnly"))){g=
-false;var f=d.ui.keyCode;switch(c.keyCode){case f.PAGE_UP:a._move("previousPage",c);break;case f.PAGE_DOWN:a._move("nextPage",c);break;case f.UP:a._move("previous",c);c.preventDefault();break;case f.DOWN:a._move("next",c);c.preventDefault();break;case f.ENTER:case f.NUMPAD_ENTER:if(a.menu.active){g=true;c.preventDefault()}case f.TAB:if(!a.menu.active)return;a.menu.select(c);break;case f.ESCAPE:a.element.val(a.term);a.close(c);break;default:clearTimeout(a.searching);a.searching=setTimeout(function(){if(a.term!=
-a.element.val()){a.selectedItem=null;a.search(null,c)}},a.options.delay);break}}}).bind("keypress.autocomplete",function(c){if(g){g=false;c.preventDefault()}}).bind("focus.autocomplete",function(){if(!a.options.disabled){a.selectedItem=null;a.previous=a.element.val()}}).bind("blur.autocomplete",function(c){if(!a.options.disabled){clearTimeout(a.searching);a.closing=setTimeout(function(){a.close(c);a._change(c)},150)}});this._initSource();this.response=function(){return a._response.apply(a,arguments)};
-this.menu=d("<ul></ul>").addClass("ui-autocomplete").appendTo(d(this.options.appendTo||"body",b)[0]).mousedown(function(c){var f=a.menu.element[0];d(c.target).closest(".ui-menu-item").length||setTimeout(function(){d(document).one("mousedown",function(h){h.target!==a.element[0]&&h.target!==f&&!d.ui.contains(f,h.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,f){f=f.item.data("item.autocomplete");false!==a._trigger("focus",c,{item:f})&&/^key/.test(c.originalEvent.type)&&
-a.element.val(f.value)},selected:function(c,f){var h=f.item.data("item.autocomplete"),i=a.previous;if(a.element[0]!==b.activeElement){a.element.focus();a.previous=i;setTimeout(function(){a.previous=i;a.selectedItem=h},1)}false!==a._trigger("select",c,{item:h})&&a.element.val(h.value);a.term=a.element.val();a.close(c);a.selectedItem=h},blur:function(){a.menu.element.is(":visible")&&a.element.val()!==a.term&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");
-d.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();d.Widget.prototype.destroy.call(this)},_setOption:function(a,b){d.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource();if(a==="appendTo")this.menu.element.appendTo(d(b||"body",this.element[0].ownerDocument)[0]);a==="disabled"&&
-b&&this.xhr&&this.xhr.abort()},_initSource:function(){var a=this,b,g;if(d.isArray(this.options.source)){b=this.options.source;this.source=function(c,f){f(d.ui.autocomplete.filter(b,c.term))}}else if(typeof this.options.source==="string"){g=this.options.source;this.source=function(c,f){a.xhr&&a.xhr.abort();a.xhr=d.ajax({url:g,data:c,dataType:"json",autocompleteRequest:++e,success:function(h){this.autocompleteRequest===e&&f(h)},error:function(){this.autocompleteRequest===e&&f([])}})}}else this.source=
-this.options.source},search:function(a,b){a=a!=null?a:this.element.val();this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search",b)!==false)return this._search(a)},_search:function(a){this.pending++;this.element.addClass("ui-autocomplete-loading");this.source({term:a},this.response)},_response:function(a){if(!this.options.disabled&&a&&a.length){a=this._normalize(a);this._suggest(a);this._trigger("open")}else this.close();
-this.pending--;this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(a){clearTimeout(this.closing);if(this.menu.element.is(":visible")){this.menu.element.hide();this.menu.deactivate();this._trigger("close",a)}},_change:function(a){this.previous!==this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(a){if(a.length&&a[0].label&&a[0].value)return a;return d.map(a,function(b){if(typeof b==="string")return{label:b,value:b};return d.extend({label:b.label||
-b.value,value:b.value||b.label},b)})},_suggest:function(a){var b=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(b,a);this.menu.deactivate();this.menu.refresh();b.show();this._resizeMenu();b.position(d.extend({of:this.element},this.options.position));this.options.autoFocus&&this.menu.next(new d.Event("mouseover"))},_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(a,b){var g=this;
-d.each(b,function(c,f){g._renderItem(a,f)})},_renderItem:function(a,b){return d("<li></li>").data("item.autocomplete",b).append(d("<a></a>").text(b.label)).appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);else this.search(null,b)},widget:function(){return this.menu.element}});d.extend(d.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,
-"\\$&")},filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i");return d.grep(a,function(c){return g.test(c.label||c.value||c)})}})})(jQuery);
-(function(d){d.widget("ui.menu",{_create:function(){var e=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(a){if(d(a.target).closest(".ui-menu-item a").length){a.preventDefault();e.select(a)}});this.refresh()},refresh:function(){var e=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex",
--1).mouseenter(function(a){e.activate(a,d(this).parent())}).mouseleave(function(){e.deactivate()})},activate:function(e,a){this.deactivate();if(this.hasScroll()){var b=a.offset().top-this.element.offset().top,g=this.element.scrollTop(),c=this.element.height();if(b<0)this.element.scrollTop(g+b);else b>=c&&this.element.scrollTop(g+b-c+a.height())}this.active=a.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",e,{item:a})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id");
-this._trigger("blur");this.active=null}},next:function(e){this.move("next",".ui-menu-item:first",e)},previous:function(e){this.move("prev",".ui-menu-item:last",e)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(e,a,b){if(this.active){e=this.active[e+"All"](".ui-menu-item").eq(0);e.length?this.activate(b,e):this.activate(b,this.element.children(a))}else this.activate(b,
-this.element.children(a))},nextPage:function(e){if(this.hasScroll())if(!this.active||this.last())this.activate(e,this.element.children(".ui-menu-item:first"));else{var a=this.active.offset().top,b=this.element.height(),g=this.element.children(".ui-menu-item").filter(function(){var c=d(this).offset().top-a-b+d(this).height();return c<10&&c>-10});g.length||(g=this.element.children(".ui-menu-item:last"));this.activate(e,g)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||
-this.last()?":first":":last"))},previousPage:function(e){if(this.hasScroll())if(!this.active||this.first())this.activate(e,this.element.children(".ui-menu-item:last"));else{var a=this.active.offset().top,b=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var g=d(this).offset().top-a+b-d(this).height();return g<10&&g>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(e,result)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||
-this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[d.fn.prop?"prop":"attr"]("scrollHeight")},select:function(e){this._trigger("selected",e,{item:this.active})}})})(jQuery);
-;/*
- * jQuery UI Slider 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Slider
- *
- * Depends:
- *	jquery.ui.core.js
- *	jquery.ui.mouse.js
- *	jquery.ui.widget.js
- */
-(function(d){d.widget("ui.slider",d.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var a=this,b=this.options,c=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f=b.values&&b.values.length||1,e=[];this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+
-this.orientation+" ui-widget ui-widget-content ui-corner-all"+(b.disabled?" ui-slider-disabled ui-disabled":""));this.range=d([]);if(b.range){if(b.range===true){if(!b.values)b.values=[this._valueMin(),this._valueMin()];if(b.values.length&&b.values.length!==2)b.values=[b.values[0],b.values[0]]}this.range=d("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(b.range==="min"||b.range==="max"?" ui-slider-range-"+b.range:""))}for(var j=c.length;j<f;j+=1)e.push("<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>");
-this.handles=c.add(d(e.join("")).appendTo(a.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(g){g.preventDefault()}).hover(function(){b.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(b.disabled)d(this).blur();else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(g){d(this).data("index.ui-slider-handle",
-g)});this.handles.keydown(function(g){var k=true,l=d(this).data("index.ui-slider-handle"),i,h,m;if(!a.options.disabled){switch(g.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:k=false;if(!a._keySliding){a._keySliding=true;d(this).addClass("ui-state-active");i=a._start(g,l);if(i===false)return}break}m=a.options.step;i=a.options.values&&a.options.values.length?
-(h=a.values(l)):(h=a.value());switch(g.keyCode){case d.ui.keyCode.HOME:h=a._valueMin();break;case d.ui.keyCode.END:h=a._valueMax();break;case d.ui.keyCode.PAGE_UP:h=a._trimAlignValue(i+(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.PAGE_DOWN:h=a._trimAlignValue(i-(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(i===a._valueMax())return;h=a._trimAlignValue(i+m);break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(i===a._valueMin())return;h=a._trimAlignValue(i-
-m);break}a._slide(g,l,h);return k}}).keyup(function(g){var k=d(this).data("index.ui-slider-handle");if(a._keySliding){a._keySliding=false;a._stop(g,k);a._change(g,k);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy();
-return this},_mouseCapture:function(a){var b=this.options,c,f,e,j,g;if(b.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:a.pageX,y:a.pageY});f=this._valueMax()-this._valueMin()+1;j=this;this.handles.each(function(k){var l=Math.abs(c-j.values(k));if(f>l){f=l;e=d(this);g=k}});if(b.range===true&&this.values(1)===b.min){g+=1;e=d(this.handles[g])}if(this._start(a,g)===false)return false;
-this._mouseSliding=true;j._handleIndex=g;e.addClass("ui-state-active").focus();b=e.offset();this._clickOffset=!d(a.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:a.pageX-b.left-e.width()/2,top:a.pageY-b.top-e.height()/2-(parseInt(e.css("borderTopWidth"),10)||0)-(parseInt(e.css("borderBottomWidth"),10)||0)+(parseInt(e.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(a,g,c);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(a){var b=
-this._normValueFromMouse({x:a.pageX,y:a.pageY});this._slide(a,this._handleIndex,b);return false},_mouseStop:function(a){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(a,this._handleIndex);this._change(a,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b;if(this.orientation==="horizontal"){b=
-this.elementSize.width;a=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{b=this.elementSize.height;a=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}b=a/b;if(b>1)b=1;if(b<0)b=0;if(this.orientation==="vertical")b=1-b;a=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+b*a)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);
-c.values=this.values()}return this._trigger("start",a,c)},_slide:function(a,b,c){var f;if(this.options.values&&this.options.values.length){f=this.values(b?0:1);if(this.options.values.length===2&&this.options.range===true&&(b===0&&c>f||b===1&&c<f))c=f;if(c!==this.values(b)){f=this.values();f[b]=c;a=this._trigger("slide",a,{handle:this.handles[b],value:c,values:f});this.values(b?0:1);a!==false&&this.values(b,c,true)}}else if(c!==this.value()){a=this._trigger("slide",a,{handle:this.handles[b],value:c});
-a!==false&&this.value(c)}},_stop:function(a,b){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);c.values=this.values()}this._trigger("stop",a,c)},_change:function(a,b){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);c.values=this.values()}this._trigger("change",a,c)}},value:function(a){if(arguments.length){this.options.value=
-this._trimAlignValue(a);this._refreshValue();this._change(null,0)}else return this._value()},values:function(a,b){var c,f,e;if(arguments.length>1){this.options.values[a]=this._trimAlignValue(b);this._refreshValue();this._change(null,a)}else if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;f=arguments[0];for(e=0;e<c.length;e+=1){c[e]=this._trimAlignValue(f[e]);this._change(null,e)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(a):
-this.value();else return this._values()},_setOption:function(a,b){var c,f=0;if(d.isArray(this.options.values))f=this.options.values.length;d.Widget.prototype._setOption.apply(this,arguments);switch(a){case "disabled":if(b){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.propAttr("disabled",true);this.element.addClass("ui-disabled")}else{this.handles.propAttr("disabled",false);this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation();
-this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(c=0;c<f;c+=1)this._change(null,c);this._animateOff=false;break}},_value:function(){var a=this.options.value;return a=this._trimAlignValue(a)},_values:function(a){var b,c;if(arguments.length){b=this.options.values[a];
-return b=this._trimAlignValue(b)}else{b=this.options.values.slice();for(c=0;c<b.length;c+=1)b[c]=this._trimAlignValue(b[c]);return b}},_trimAlignValue:function(a){if(a<=this._valueMin())return this._valueMin();if(a>=this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=(a-this._valueMin())%b;a=a-c;if(Math.abs(c)*2>=b)a+=c>0?b:-b;return parseFloat(a.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var a=
-this.options.range,b=this.options,c=this,f=!this._animateOff?b.animate:false,e,j={},g,k,l,i;if(this.options.values&&this.options.values.length)this.handles.each(function(h){e=(c.values(h)-c._valueMin())/(c._valueMax()-c._valueMin())*100;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";d(this).stop(1,1)[f?"animate":"css"](j,b.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(h===0)c.range.stop(1,1)[f?"animate":"css"]({left:e+"%"},b.animate);if(h===1)c.range[f?"animate":"css"]({width:e-
-g+"%"},{queue:false,duration:b.animate})}else{if(h===0)c.range.stop(1,1)[f?"animate":"css"]({bottom:e+"%"},b.animate);if(h===1)c.range[f?"animate":"css"]({height:e-g+"%"},{queue:false,duration:b.animate})}g=e});else{k=this.value();l=this._valueMin();i=this._valueMax();e=i!==l?(k-l)/(i-l)*100:0;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";this.handle.stop(1,1)[f?"animate":"css"](j,b.animate);if(a==="min"&&this.orientation==="horizontal")this.range.stop(1,1)[f?"animate":"css"]({width:e+"%"},
-b.animate);if(a==="max"&&this.orientation==="horizontal")this.range[f?"animate":"css"]({width:100-e+"%"},{queue:false,duration:b.animate});if(a==="min"&&this.orientation==="vertical")this.range.stop(1,1)[f?"animate":"css"]({height:e+"%"},b.animate);if(a==="max"&&this.orientation==="vertical")this.range[f?"animate":"css"]({height:100-e+"%"},{queue:false,duration:b.animate})}}});d.extend(d.ui.slider,{version:"1.8.16"})})(jQuery);
-;/*
- * jQuery UI Progressbar 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Progressbar
- *
- * Depends:
- *   jquery.ui.core.js
- *   jquery.ui.widget.js
- */
-(function(b,d){b.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=b("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");
-this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===d)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){if(a==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*
-this._value()/this.options.max},_refreshValue:function(){var a=this.value(),c=this._percentage();if(this.oldValue!==a){this.oldValue=a;this._trigger("change")}this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.16"})})(jQuery);
-;
\ No newline at end of file
Binary file web/hdalab/static/hdalab/lib/leaflet/images/layers.png has changed
Binary file web/hdalab/static/hdalab/lib/leaflet/images/marker-shadow.png has changed
Binary file web/hdalab/static/hdalab/lib/leaflet/images/marker.png has changed
Binary file web/hdalab/static/hdalab/lib/leaflet/images/popup-close.png has changed
Binary file web/hdalab/static/hdalab/lib/leaflet/images/zoom-in.png has changed
Binary file web/hdalab/static/hdalab/lib/leaflet/images/zoom-out.png has changed
--- a/web/hdalab/static/hdalab/lib/leaflet/leaflet-src.js	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5637 +0,0 @@
-/*
- Copyright (c) 2010-2011, CloudMade, Vladimir Agafonkin
- Leaflet is a modern open-source JavaScript library for interactive maps.
- http://leaflet.cloudmade.com
-*/
-
-(function (root) {
-	root.L = {
-		VERSION: '0.3',
-
-		ROOT_URL: root.L_ROOT_URL || (function () {
-			var scripts = document.getElementsByTagName('script'),
-				leafletRe = /\/?leaflet[\-\._]?([\w\-\._]*)\.js\??/;
-
-			var i, len, src, matches;
-
-			for (i = 0, len = scripts.length; i < len; i++) {
-				src = scripts[i].src;
-				matches = src.match(leafletRe);
-
-				if (matches) {
-					if (matches[1] === 'include') {
-						return '../../dist/';
-					}
-					return src.replace(leafletRe, '') + '/';
-				}
-			}
-			return '';
-		}()),
-
-		noConflict: function () {
-			root.L = this._originalL;
-			return this;
-		},
-
-		_originalL: root.L
-	};
-}(this));
-
-
-/*
- * L.Util is a namespace for various utility functions.
- */
-
-L.Util = {
-	extend: function (/*Object*/ dest) /*-> Object*/ {	// merge src properties into dest
-		var sources = Array.prototype.slice.call(arguments, 1);
-		for (var j = 0, len = sources.length, src; j < len; j++) {
-			src = sources[j] || {};
-			for (var i in src) {
-				if (src.hasOwnProperty(i)) {
-					dest[i] = src[i];
-				}
-			}
-		}
-		return dest;
-	},
-
-	bind: function (/*Function*/ fn, /*Object*/ obj) /*-> Object*/ {
-		return function () {
-			return fn.apply(obj, arguments);
-		};
-	},
-
-	stamp: (function () {
-		var lastId = 0, key = '_leaflet_id';
-		return function (/*Object*/ obj) {
-			obj[key] = obj[key] || ++lastId;
-			return obj[key];
-		};
-	}()),
-
-	requestAnimFrame: (function () {
-		function timeoutDefer(callback) {
-			window.setTimeout(callback, 1000 / 60);
-		}
-
-		var requestFn = window.requestAnimationFrame ||
-			window.webkitRequestAnimationFrame ||
-			window.mozRequestAnimationFrame ||
-			window.oRequestAnimationFrame ||
-			window.msRequestAnimationFrame ||
-			timeoutDefer;
-
-		return function (callback, context, immediate, contextEl) {
-			callback = context ? L.Util.bind(callback, context) : callback;
-			if (immediate && requestFn === timeoutDefer) {
-				callback();
-			} else {
-				requestFn(callback, contextEl);
-			}
-		};
-	}()),
-
-	limitExecByInterval: function (fn, time, context) {
-		var lock, execOnUnlock, args;
-		function exec() {
-			lock = false;
-			if (execOnUnlock) {
-				args.callee.apply(context, args);
-				execOnUnlock = false;
-			}
-		}
-		return function () {
-			args = arguments;
-			if (!lock) {
-				lock = true;
-				setTimeout(exec, time);
-				fn.apply(context, args);
-			} else {
-				execOnUnlock = true;
-			}
-		};
-	},
-
-	falseFn: function () {
-		return false;
-	},
-
-	formatNum: function (num, digits) {
-		var pow = Math.pow(10, digits || 5);
-		return Math.round(num * pow) / pow;
-	},
-
-	setOptions: function (obj, options) {
-		obj.options = L.Util.extend({}, obj.options, options);
-	},
-
-	getParamString: function (obj) {
-		var params = [];
-		for (var i in obj) {
-			if (obj.hasOwnProperty(i)) {
-				params.push(i + '=' + obj[i]);
-			}
-		}
-		return '?' + params.join('&');
-	},
-
-	template: function (str, data) {
-		return str.replace(/\{ *([\w_]+) *\}/g, function (str, key) {
-			var value = data[key];
-			if (!data.hasOwnProperty(key)) {
-				throw new Error('No value provided for variable ' + str);
-			}
-			return value;
-		});
-	}
-};
-
-
-/*
- * Class powers the OOP facilities of the library. Thanks to John Resig and Dean Edwards for inspiration!
- */
-
-L.Class = function () {};
-
-L.Class.extend = function (/*Object*/ props) /*-> Class*/ {
-
-	// extended class with the new prototype
-	var NewClass = function () {
-		if (this.initialize) {
-			this.initialize.apply(this, arguments);
-		}
-	};
-
-	// instantiate class without calling constructor
-	var F = function () {};
-	F.prototype = this.prototype;
-	var proto = new F();
-
-	proto.constructor = NewClass;
-	NewClass.prototype = proto;
-
-	// add superclass access
-	NewClass.superclass = this.prototype;
-
-	// add class name
-	//proto.className = props;
-
-	//inherit parent's statics
-	for (var i in this) {
-		if (this.hasOwnProperty(i) && i !== 'prototype' && i !== 'superclass') {
-			NewClass[i] = this[i];
-		}
-	}
-
-	// mix static properties into the class
-	if (props.statics) {
-		L.Util.extend(NewClass, props.statics);
-		delete props.statics;
-	}
-
-	// mix includes into the prototype
-	if (props.includes) {
-		L.Util.extend.apply(null, [proto].concat(props.includes));
-		delete props.includes;
-	}
-
-	// merge options
-	if (props.options && proto.options) {
-		props.options = L.Util.extend({}, proto.options, props.options);
-	}
-
-	// mix given properties into the prototype
-	L.Util.extend(proto, props);
-
-	// allow inheriting further
-	NewClass.extend = L.Class.extend;
-
-	// method for adding properties to prototype
-	NewClass.include = function (props) {
-		L.Util.extend(this.prototype, props);
-	};
-
-	return NewClass;
-};
-
-
-/*
- * L.Mixin.Events adds custom events functionality to Leaflet classes
- */
-
-L.Mixin = {};
-
-L.Mixin.Events = {
-	addEventListener: function (/*String*/ type, /*Function*/ fn, /*(optional) Object*/ context) {
-		var events = this._leaflet_events = this._leaflet_events || {};
-		events[type] = events[type] || [];
-		events[type].push({
-			action: fn,
-			context: context || this
-		});
-		return this;
-	},
-
-	hasEventListeners: function (/*String*/ type) /*-> Boolean*/ {
-		var k = '_leaflet_events';
-		return (k in this) && (type in this[k]) && (this[k][type].length > 0);
-	},
-
-	removeEventListener: function (/*String*/ type, /*Function*/ fn, /*(optional) Object*/ context) {
-		if (!this.hasEventListeners(type)) {
-			return this;
-		}
-
-		for (var i = 0, events = this._leaflet_events, len = events[type].length; i < len; i++) {
-			if (
-				(events[type][i].action === fn) &&
-				(!context || (events[type][i].context === context))
-			) {
-				events[type].splice(i, 1);
-				return this;
-			}
-		}
-		return this;
-	},
-
-	fireEvent: function (/*String*/ type, /*(optional) Object*/ data) {
-		if (!this.hasEventListeners(type)) {
-			return this;
-		}
-
-		var event = L.Util.extend({
-			type: type,
-			target: this
-		}, data);
-
-		var listeners = this._leaflet_events[type].slice();
-
-		for (var i = 0, len = listeners.length; i < len; i++) {
-			listeners[i].action.call(listeners[i].context || this, event);
-		}
-
-		return this;
-	}
-};
-
-L.Mixin.Events.on = L.Mixin.Events.addEventListener;
-L.Mixin.Events.off = L.Mixin.Events.removeEventListener;
-L.Mixin.Events.fire = L.Mixin.Events.fireEvent;
-
-
-(function () {
-	var ua = navigator.userAgent.toLowerCase(),
-		ie = !!window.ActiveXObject,
-		webkit = ua.indexOf("webkit") !== -1,
-		mobile = typeof orientation !== 'undefined' ? true : false,
-		android = ua.indexOf("android") !== -1,
-		opera = window.opera;
-
-	L.Browser = {
-		ie: ie,
-		ie6: ie && !window.XMLHttpRequest,
-
-		webkit: webkit,
-		webkit3d: webkit && ('WebKitCSSMatrix' in window) && ('m11' in new window.WebKitCSSMatrix()),
-
-		gecko: ua.indexOf("gecko") !== -1,
-
-		opera: opera,
-
-		android: android,
-		mobileWebkit: mobile && webkit,
-		mobileOpera: mobile && opera,
-
-		mobile: mobile,
-		touch: (function () {
-			var touchSupported = false,
-				startName = 'ontouchstart';
-
-			// WebKit, etc
-			if (startName in document.documentElement) {
-				return true;
-			}
-
-			// Firefox/Gecko
-			var e = document.createElement('div');
-
-			// If no support for basic event stuff, unlikely to have touch support
-			if (!e.setAttribute || !e.removeAttribute) {
-				return false;
-			}
-
-			e.setAttribute(startName, 'return;');
-			if (typeof e[startName] === 'function') {
-				touchSupported = true;
-			}
-
-			e.removeAttribute(startName);
-			e = null;
-
-			return touchSupported;
-		}())
-	};
-}());
-
-
-/*
- * L.Point represents a point with x and y coordinates.
- */
-
-L.Point = function (/*Number*/ x, /*Number*/ y, /*Boolean*/ round) {
-	this.x = (round ? Math.round(x) : x);
-	this.y = (round ? Math.round(y) : y);
-};
-
-L.Point.prototype = {
-	add: function (point) {
-		return this.clone()._add(point);
-	},
-
-	_add: function (point) {
-		this.x += point.x;
-		this.y += point.y;
-		return this;
-	},
-
-	subtract: function (point) {
-		return this.clone()._subtract(point);
-	},
-
-	// destructive subtract (faster)
-	_subtract: function (point) {
-		this.x -= point.x;
-		this.y -= point.y;
-		return this;
-	},
-
-	divideBy: function (num, round) {
-		return new L.Point(this.x / num, this.y / num, round);
-	},
-
-	multiplyBy: function (num) {
-		return new L.Point(this.x * num, this.y * num);
-	},
-
-	distanceTo: function (point) {
-		var x = point.x - this.x,
-			y = point.y - this.y;
-		return Math.sqrt(x * x + y * y);
-	},
-
-	round: function () {
-		return this.clone()._round();
-	},
-
-	// destructive round
-	_round: function () {
-		this.x = Math.round(this.x);
-		this.y = Math.round(this.y);
-		return this;
-	},
-
-	clone: function () {
-		return new L.Point(this.x, this.y);
-	},
-
-	toString: function () {
-		return 'Point(' +
-				L.Util.formatNum(this.x) + ', ' +
-				L.Util.formatNum(this.y) + ')';
-	}
-};
-
-
-/*
- * L.Bounds represents a rectangular area on the screen in pixel coordinates.
- */
-
-L.Bounds = L.Class.extend({
-	initialize: function (min, max) {	//(Point, Point) or Point[]
-		if (!min) {
-			return;
-		}
-		var points = (min instanceof Array ? min : [min, max]);
-		for (var i = 0, len = points.length; i < len; i++) {
-			this.extend(points[i]);
-		}
-	},
-
-	// extend the bounds to contain the given point
-	extend: function (/*Point*/ point) {
-		if (!this.min && !this.max) {
-			this.min = new L.Point(point.x, point.y);
-			this.max = new L.Point(point.x, point.y);
-		} else {
-			this.min.x = Math.min(point.x, this.min.x);
-			this.max.x = Math.max(point.x, this.max.x);
-			this.min.y = Math.min(point.y, this.min.y);
-			this.max.y = Math.max(point.y, this.max.y);
-		}
-	},
-
-	getCenter: function (round)/*->Point*/ {
-		return new L.Point(
-				(this.min.x + this.max.x) / 2,
-				(this.min.y + this.max.y) / 2, round);
-	},
-
-	contains: function (/*Bounds or Point*/ obj)/*->Boolean*/ {
-		var min, max;
-
-		if (obj instanceof L.Bounds) {
-			min = obj.min;
-			max = obj.max;
-		} else {
-			min = max = obj;
-		}
-
-		return (min.x >= this.min.x) &&
-				(max.x <= this.max.x) &&
-				(min.y >= this.min.y) &&
-				(max.y <= this.max.y);
-	},
-
-	intersects: function (/*Bounds*/ bounds) {
-		var min = this.min,
-			max = this.max,
-			min2 = bounds.min,
-			max2 = bounds.max;
-
-		var xIntersects = (max2.x >= min.x) && (min2.x <= max.x),
-			yIntersects = (max2.y >= min.y) && (min2.y <= max.y);
-
-		return xIntersects && yIntersects;
-	}
-
-});
-
-
-/*
- * L.Transformation is an utility class to perform simple point transformations through a 2d-matrix.
- */
-
-L.Transformation = L.Class.extend({
-	initialize: function (/*Number*/ a, /*Number*/ b, /*Number*/ c, /*Number*/ d) {
-		this._a = a;
-		this._b = b;
-		this._c = c;
-		this._d = d;
-	},
-
-	transform: function (point, scale) {
-		return this._transform(point.clone(), scale);
-	},
-
-	// destructive transform (faster)
-	_transform: function (/*Point*/ point, /*Number*/ scale) /*-> Point*/ {
-		scale = scale || 1;
-		point.x = scale * (this._a * point.x + this._b);
-		point.y = scale * (this._c * point.y + this._d);
-		return point;
-	},
-
-	untransform: function (/*Point*/ point, /*Number*/ scale) /*-> Point*/ {
-		scale = scale || 1;
-		return new L.Point(
-			(point.x / scale - this._b) / this._a,
-			(point.y / scale - this._d) / this._c);
-	}
-});
-
-
-/*
- * L.DomUtil contains various utility functions for working with DOM
- */
-
-L.DomUtil = {
-	get: function (id) {
-		return (typeof id === 'string' ? document.getElementById(id) : id);
-	},
-
-	getStyle: function (el, style) {
-		var value = el.style[style];
-		if (!value && el.currentStyle) {
-			value = el.currentStyle[style];
-		}
-		if (!value || value === 'auto') {
-			var css = document.defaultView.getComputedStyle(el, null);
-			value = css ? css[style] : null;
-		}
-		return (value === 'auto' ? null : value);
-	},
-
-	getViewportOffset: function (element) {
-		var top = 0,
-			left = 0,
-			el = element,
-			docBody = document.body;
-
-		do {
-			top += el.offsetTop || 0;
-			left += el.offsetLeft || 0;
-
-			if (el.offsetParent === docBody &&
-					L.DomUtil.getStyle(el, 'position') === 'absolute') {
-				break;
-			}
-			el = el.offsetParent;
-		} while (el);
-
-		el = element;
-
-		do {
-			if (el === docBody) {
-				break;
-			}
-
-			top -= el.scrollTop || 0;
-			left -= el.scrollLeft || 0;
-
-			el = el.parentNode;
-		} while (el);
-
-		return new L.Point(left, top);
-	},
-
-	create: function (tagName, className, container) {
-		var el = document.createElement(tagName);
-		el.className = className;
-		if (container) {
-			container.appendChild(el);
-		}
-		return el;
-	},
-
-	disableTextSelection: function () {
-		if (document.selection && document.selection.empty) {
-			document.selection.empty();
-		}
-		if (!this._onselectstart) {
-			this._onselectstart = document.onselectstart;
-			document.onselectstart = L.Util.falseFn;
-		}
-	},
-
-	enableTextSelection: function () {
-		document.onselectstart = this._onselectstart;
-		this._onselectstart = null;
-	},
-
-	hasClass: function (el, name) {
-		return (el.className.length > 0) &&
-				new RegExp("(^|\\s)" + name + "(\\s|$)").test(el.className);
-	},
-
-	addClass: function (el, name) {
-		if (!L.DomUtil.hasClass(el, name)) {
-			el.className += (el.className ? ' ' : '') + name;
-		}
-	},
-
-	removeClass: function (el, name) {
-		el.className = el.className.replace(/(\S+)\s*/g, function (w, match) {
-			if (match === name) {
-				return '';
-			}
-			return w;
-		}).replace(/^\s+/, '');
-	},
-
-	setOpacity: function (el, value) {
-		if (L.Browser.ie) {
-			el.style.filter = 'alpha(opacity=' + Math.round(value * 100) + ')';
-		} else {
-			el.style.opacity = value;
-		}
-	},
-
-	//TODO refactor away this ugly translate/position mess
-
-	testProp: function (props) {
-		var style = document.documentElement.style;
-
-		for (var i = 0; i < props.length; i++) {
-			if (props[i] in style) {
-				return props[i];
-			}
-		}
-		return false;
-	},
-
-	getTranslateString: function (point) {
-		return L.DomUtil.TRANSLATE_OPEN +
-				point.x + 'px,' + point.y + 'px' +
-				L.DomUtil.TRANSLATE_CLOSE;
-	},
-
-	getScaleString: function (scale, origin) {
-		var preTranslateStr = L.DomUtil.getTranslateString(origin),
-			scaleStr = ' scale(' + scale + ') ',
-			postTranslateStr = L.DomUtil.getTranslateString(origin.multiplyBy(-1));
-
-		return preTranslateStr + scaleStr + postTranslateStr;
-	},
-
-	setPosition: function (el, point) {
-		el._leaflet_pos = point;
-		if (L.Browser.webkit) {
-			el.style[L.DomUtil.TRANSFORM] =  L.DomUtil.getTranslateString(point);
-		} else {
-			el.style.left = point.x + 'px';
-			el.style.top = point.y + 'px';
-		}
-	},
-
-	getPosition: function (el) {
-		return el._leaflet_pos;
-	}
-};
-
-L.Util.extend(L.DomUtil, {
-	TRANSITION: L.DomUtil.testProp(['transition', 'webkitTransition', 'OTransition', 'MozTransition', 'msTransition']),
-	TRANSFORM: L.DomUtil.testProp(['transformProperty', 'WebkitTransform', 'OTransform', 'MozTransform', 'msTransform']),
-
-	TRANSLATE_OPEN: 'translate' + (L.Browser.webkit3d ? '3d(' : '('),
-	TRANSLATE_CLOSE: L.Browser.webkit3d ? ',0)' : ')'
-});
-
-
-/*
-	CM.LatLng represents a geographical point with latitude and longtitude coordinates.
-*/
-
-L.LatLng = function (/*Number*/ rawLat, /*Number*/ rawLng, /*Boolean*/ noWrap) {
-	var lat = parseFloat(rawLat),
-		lng = parseFloat(rawLng);
-
-	if (isNaN(lat) || isNaN(lng)) {
-		throw new Error('Invalid LatLng object: (' + rawLat + ', ' + rawLng + ')');
-	}
-
-	if (noWrap !== true) {
-		lat = Math.max(Math.min(lat, 90), -90);					// clamp latitude into -90..90
-		lng = (lng + 180) % 360 + ((lng < -180 || lng === 180) ? 180 : -180);	// wrap longtitude into -180..180
-	}
-
-	//TODO change to lat() & lng()
-	this.lat = lat;
-	this.lng = lng;
-};
-
-L.Util.extend(L.LatLng, {
-	DEG_TO_RAD: Math.PI / 180,
-	RAD_TO_DEG: 180 / Math.PI,
-	MAX_MARGIN: 1.0E-9 // max margin of error for the "equals" check
-});
-
-L.LatLng.prototype = {
-	equals: function (/*LatLng*/ obj) {
-		if (!(obj instanceof L.LatLng)) {
-			return false;
-		}
-
-		var margin = Math.max(Math.abs(this.lat - obj.lat), Math.abs(this.lng - obj.lng));
-		return margin <= L.LatLng.MAX_MARGIN;
-	},
-
-	toString: function () {
-		return 'LatLng(' +
-				L.Util.formatNum(this.lat) + ', ' +
-				L.Util.formatNum(this.lng) + ')';
-	},
-
-	// Haversine distance formula, see http://en.wikipedia.org/wiki/Haversine_formula
-	distanceTo: function (/*LatLng*/ other)/*->Double*/ {
-		var R = 6378137, // earth radius in meters
-			d2r = L.LatLng.DEG_TO_RAD,
-			dLat = (other.lat - this.lat) * d2r,
-			dLon = (other.lng - this.lng) * d2r,
-			lat1 = this.lat * d2r,
-			lat2 = other.lat * d2r,
-			sin1 = Math.sin(dLat / 2),
-			sin2 = Math.sin(dLon / 2);
-
-		var a = sin1 * sin1 + sin2 * sin2 * Math.cos(lat1) * Math.cos(lat2);
-
-		return R * 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
-	}
-};
-
-
-/*
- * L.LatLngBounds represents a rectangular area on the map in geographical coordinates.
- */
-
-L.LatLngBounds = L.Class.extend({
-	initialize: function (southWest, northEast) {	// (LatLng, LatLng) or (LatLng[])
-		if (!southWest) {
-			return;
-		}
-		var latlngs = (southWest instanceof Array ? southWest : [southWest, northEast]);
-		for (var i = 0, len = latlngs.length; i < len; i++) {
-			this.extend(latlngs[i]);
-		}
-	},
-
-	// extend the bounds to contain the given point
-	extend: function (/*LatLng*/ latlng) {
-		if (!this._southWest && !this._northEast) {
-			this._southWest = new L.LatLng(latlng.lat, latlng.lng, true);
-			this._northEast = new L.LatLng(latlng.lat, latlng.lng, true);
-		} else {
-			this._southWest.lat = Math.min(latlng.lat, this._southWest.lat);
-			this._southWest.lng = Math.min(latlng.lng, this._southWest.lng);
-			this._northEast.lat = Math.max(latlng.lat, this._northEast.lat);
-			this._northEast.lng = Math.max(latlng.lng, this._northEast.lng);
-		}
-	},
-
-	getCenter: function () /*-> LatLng*/ {
-		return new L.LatLng(
-				(this._southWest.lat + this._northEast.lat) / 2,
-				(this._southWest.lng + this._northEast.lng) / 2);
-	},
-
-	getSouthWest: function () {
-		return this._southWest;
-	},
-
-	getNorthEast: function () {
-		return this._northEast;
-	},
-
-	getNorthWest: function () {
-		return new L.LatLng(this._northEast.lat, this._southWest.lng, true);
-	},
-
-	getSouthEast: function () {
-		return new L.LatLng(this._southWest.lat, this._northEast.lng, true);
-	},
-
-	contains: function (/*LatLngBounds or LatLng*/ obj) /*-> Boolean*/ {
-		var sw = this._southWest,
-			ne = this._northEast,
-			sw2, ne2;
-
-		if (obj instanceof L.LatLngBounds) {
-			sw2 = obj.getSouthWest();
-			ne2 = obj.getNorthEast();
-		} else {
-			sw2 = ne2 = obj;
-		}
-
-		return (sw2.lat >= sw.lat) && (ne2.lat <= ne.lat) &&
-				(sw2.lng >= sw.lng) && (ne2.lng <= ne.lng);
-	},
-
-	intersects: function (/*LatLngBounds*/ bounds) {
-		var sw = this._southWest,
-			ne = this._northEast,
-			sw2 = bounds.getSouthWest(),
-			ne2 = bounds.getNorthEast();
-
-		var latIntersects = (ne2.lat >= sw.lat) && (sw2.lat <= ne.lat),
-			lngIntersects = (ne2.lng >= sw.lng) && (sw2.lng <= ne.lng);
-
-		return latIntersects && lngIntersects;
-	},
-
-	toBBoxString: function () {
-		var sw = this._southWest,
-			ne = this._northEast;
-		return [sw.lng, sw.lat, ne.lng, ne.lat].join(',');
-	}
-});
-
-//TODO International date line?
-
-
-/*
- * L.Projection contains various geographical projections used by CRS classes.
- */
-
-L.Projection = {};
-
-
-
-L.Projection.SphericalMercator = {
-	MAX_LATITUDE: 85.0511287798,
-
-	project: function (/*LatLng*/ latlng) /*-> Point*/ {
-		var d = L.LatLng.DEG_TO_RAD,
-			max = this.MAX_LATITUDE,
-			lat = Math.max(Math.min(max, latlng.lat), -max),
-			x = latlng.lng * d,
-			y = lat * d;
-		y = Math.log(Math.tan((Math.PI / 4) + (y / 2)));
-
-		return new L.Point(x, y);
-	},
-
-	unproject: function (/*Point*/ point, /*Boolean*/ unbounded) /*-> LatLng*/ {
-		var d = L.LatLng.RAD_TO_DEG,
-			lng = point.x * d,
-			lat = (2 * Math.atan(Math.exp(point.y)) - (Math.PI / 2)) * d;
-
-		return new L.LatLng(lat, lng, unbounded);
-	}
-};
-
-
-
-L.Projection.LonLat = {
-	project: function (latlng) {
-		return new L.Point(latlng.lng, latlng.lat);
-	},
-
-	unproject: function (point, unbounded) {
-		return new L.LatLng(point.y, point.x, unbounded);
-	}
-};
-
-
-
-L.CRS = {
-	latLngToPoint: function (/*LatLng*/ latlng, /*Number*/ scale)/*-> Point*/ {
-		var projectedPoint = this.projection.project(latlng);
-		return this.transformation._transform(projectedPoint, scale);
-	},
-
-	pointToLatLng: function (/*Point*/ point, /*Number*/ scale, /*(optional) Boolean*/ unbounded)/*-> LatLng*/ {
-		var untransformedPoint = this.transformation.untransform(point, scale);
-		return this.projection.unproject(untransformedPoint, unbounded);
-		//TODO get rid of 'unbounded' everywhere
-	},
-
-	project: function (latlng) {
-		return this.projection.project(latlng);
-	}
-};
-
-
-
-L.CRS.EPSG3857 = L.Util.extend({}, L.CRS, {
-	code: 'EPSG:3857',
-
-	projection: L.Projection.SphericalMercator,
-	transformation: new L.Transformation(0.5 / Math.PI, 0.5, -0.5 / Math.PI, 0.5),
-
-	project: function (/*LatLng*/ latlng)/*-> Point*/ {
-		var projectedPoint = this.projection.project(latlng),
-			earthRadius = 6378137;
-		return projectedPoint.multiplyBy(earthRadius);
-	}
-});
-
-L.CRS.EPSG900913 = L.Util.extend({}, L.CRS.EPSG3857, {
-	code: 'EPSG:900913'
-});
-
-
-
-L.CRS.EPSG4326 = L.Util.extend({}, L.CRS, {
-	code: 'EPSG:4326',
-
-	projection: L.Projection.LonLat,
-	transformation: new L.Transformation(1 / 360, 0.5, -1 / 360, 0.5)
-});
-
-
-/*
- * L.Map is the central class of the API - it is used to create a map.
- */
-
-L.Map = L.Class.extend({
-	includes: L.Mixin.Events,
-
-	options: {
-		// projection
-		crs: L.CRS.EPSG3857 || L.CRS.EPSG4326,
-		scale: function (zoom) {
-			return 256 * Math.pow(2, zoom);
-		},
-
-		// state
-		center: null,
-		zoom: null,
-		layers: [],
-
-		// interaction
-		dragging: true,
-		touchZoom: L.Browser.touch && !L.Browser.android,
-		scrollWheelZoom: !L.Browser.touch,
-		doubleClickZoom: true,
-		boxZoom: true,
-
-		// controls
-		zoomControl: true,
-		attributionControl: true,
-
-		// animation
-		fadeAnimation: L.DomUtil.TRANSITION && !L.Browser.android,
-		zoomAnimation: L.DomUtil.TRANSITION && !L.Browser.android && !L.Browser.mobileOpera,
-
-		// misc
-		trackResize: true,
-		closePopupOnClick: true,
-		worldCopyJump: true
-	},
-
-
-	// constructor
-
-	initialize: function (id, options) { // (HTMLElement or String, Object)
-		L.Util.setOptions(this, options);
-
-		this._container = L.DomUtil.get(id);
-
-		if (this._container._leaflet) {
-			throw new Error("Map container is already initialized.");
-		}
-		this._container._leaflet = true;
-
-		this._initLayout();
-
-		if (L.DomEvent) {
-			this._initEvents();
-			if (L.Handler) {
-				this._initInteraction();
-			}
-			if (L.Control) {
-				this._initControls();
-			}
-		}
-
-		if (this.options.maxBounds) {
-			this.setMaxBounds(this.options.maxBounds);
-		}
-
-		var center = this.options.center,
-			zoom = this.options.zoom;
-
-		if (center !== null && zoom !== null) {
-			this.setView(center, zoom, true);
-		}
-
-		var layers = this.options.layers;
-		layers = (layers instanceof Array ? layers : [layers]);
-		this._tileLayersNum = 0;
-		this._initLayers(layers);
-	},
-
-
-	// public methods that modify map state
-
-	// replaced by animation-powered implementation in Map.PanAnimation.js
-	setView: function (center, zoom) {
-		// reset the map view
-		this._resetView(center, this._limitZoom(zoom));
-		return this;
-	},
-
-	setZoom: function (zoom) { // (Number)
-		return this.setView(this.getCenter(), zoom);
-	},
-
-	zoomIn: function () {
-		return this.setZoom(this._zoom + 1);
-	},
-
-	zoomOut: function () {
-		return this.setZoom(this._zoom - 1);
-	},
-
-	fitBounds: function (bounds) { // (LatLngBounds)
-		var zoom = this.getBoundsZoom(bounds);
-		return this.setView(bounds.getCenter(), zoom);
-	},
-
-	fitWorld: function () {
-		var sw = new L.LatLng(-60, -170),
-			ne = new L.LatLng(85, 179);
-		return this.fitBounds(new L.LatLngBounds(sw, ne));
-	},
-
-	panTo: function (center) { // (LatLng)
-		return this.setView(center, this._zoom);
-	},
-
-	panBy: function (offset) { // (Point)
-		// replaced with animated panBy in Map.Animation.js
-		this.fire('movestart');
-
-		this._rawPanBy(offset);
-
-		this.fire('move');
-		this.fire('moveend');
-
-		return this;
-	},
-
-	setMaxBounds: function (bounds) {
-		this.options.maxBounds = bounds;
-
-		if (!bounds) {
-			this._boundsMinZoom = null;
-			return this;
-		}
-
-		var minZoom = this.getBoundsZoom(bounds, true);
-
-		this._boundsMinZoom = minZoom;
-
-		if (this._loaded) {
-			if (this._zoom < minZoom) {
-				this.setView(bounds.getCenter(), minZoom);
-			} else {
-				this.panInsideBounds(bounds);
-			}
-		}
-		return this;
-	},
-
-	panInsideBounds: function (bounds) {
-		var viewBounds = this.getBounds(),
-			viewSw = this.project(viewBounds.getSouthWest()),
-			viewNe = this.project(viewBounds.getNorthEast()),
-			sw = this.project(bounds.getSouthWest()),
-			ne = this.project(bounds.getNorthEast()),
-			dx = 0,
-			dy = 0;
-
-		if (viewNe.y < ne.y) { // north
-			dy = ne.y - viewNe.y;
-		}
-		if (viewNe.x > ne.x) { // east
-			dx = ne.x - viewNe.x;
-		}
-		if (viewSw.y > sw.y) { // south
-			dy = sw.y - viewSw.y;
-		}
-		if (viewSw.x < sw.x) { // west
-			dx = sw.x - viewSw.x;
-		}
-
-		return this.panBy(new L.Point(dx, dy, true));
-	},
-
-	addLayer: function (layer, insertAtTheTop) {
-		var id = L.Util.stamp(layer);
-
-		if (this._layers[id]) {
-			return this;
-		}
-
-		this._layers[id] = layer;
-
-		if (layer.options && !isNaN(layer.options.maxZoom)) {
-			this._layersMaxZoom = Math.max(this._layersMaxZoom || 0, layer.options.maxZoom);
-		}
-		if (layer.options && !isNaN(layer.options.minZoom)) {
-			this._layersMinZoom = Math.min(this._layersMinZoom || Infinity, layer.options.minZoom);
-		}
-		//TODO getMaxZoom, getMinZoom in ILayer (instead of options)
-
-		if (this.options.zoomAnimation && L.TileLayer && (layer instanceof L.TileLayer)) {
-			this._tileLayersNum++;
-			layer.on('load', this._onTileLayerLoad, this);
-		}
-		if (this.attributionControl && layer.getAttribution) {
-			this.attributionControl.addAttribution(layer.getAttribution());
-		}
-
-		var onMapLoad = function () {
-			layer.onAdd(this, insertAtTheTop);
-			this.fire('layeradd', {layer: layer});
-		};
-
-		if (this._loaded) {
-			onMapLoad.call(this);
-		} else {
-			this.on('load', onMapLoad, this);
-		}
-
-		return this;
-	},
-
-	removeLayer: function (layer) {
-		var id = L.Util.stamp(layer);
-
-		if (this._layers[id]) {
-			layer.onRemove(this);
-			delete this._layers[id];
-
-			if (this.options.zoomAnimation && L.TileLayer && (layer instanceof L.TileLayer)) {
-				this._tileLayersNum--;
-				layer.off('load', this._onTileLayerLoad, this);
-			}
-			if (this.attributionControl && layer.getAttribution) {
-				this.attributionControl.removeAttribution(layer.getAttribution());
-			}
-
-			this.fire('layerremove', {layer: layer});
-		}
-		return this;
-	},
-
-	hasLayer: function (layer) {
-		var id = L.Util.stamp(layer);
-		return this._layers.hasOwnProperty(id);
-	},
-
-	invalidateSize: function () {
-		var oldSize = this.getSize();
-
-		this._sizeChanged = true;
-
-		if (this.options.maxBounds) {
-			this.setMaxBounds(this.options.maxBounds);
-		}
-
-		if (!this._loaded) {
-			return this;
-		}
-
-		this._rawPanBy(oldSize.subtract(this.getSize()).divideBy(2, true));
-
-		this.fire('move');
-
-		clearTimeout(this._sizeTimer);
-		this._sizeTimer = setTimeout(L.Util.bind(function () {
-			this.fire('moveend');
-		}, this), 200);
-
-		return this;
-	},
-
-
-	// public methods for getting map state
-
-	getCenter: function (unbounded) { // (Boolean)
-		var viewHalf = this.getSize().divideBy(2),
-			centerPoint = this._getTopLeftPoint().add(viewHalf);
-		return this.unproject(centerPoint, this._zoom, unbounded);
-	},
-
-	getZoom: function () {
-		return this._zoom;
-	},
-
-	getBounds: function () {
-		var bounds = this.getPixelBounds(),
-			sw = this.unproject(new L.Point(bounds.min.x, bounds.max.y), this._zoom, true),
-			ne = this.unproject(new L.Point(bounds.max.x, bounds.min.y), this._zoom, true);
-		return new L.LatLngBounds(sw, ne);
-	},
-
-	getMinZoom: function () {
-		var z1 = this.options.minZoom || 0,
-			z2 = this._layersMinZoom || 0,
-			z3 = this._boundsMinZoom || 0;
-
-		return Math.max(z1, z2, z3);
-	},
-
-	getMaxZoom: function () {
-		var z1 = isNaN(this.options.maxZoom) ? Infinity : this.options.maxZoom,
-			z2 = this._layersMaxZoom || Infinity;
-
-		return Math.min(z1, z2);
-	},
-
-	getBoundsZoom: function (bounds, inside) { // (LatLngBounds)
-		var size = this.getSize(),
-			zoom = this.options.minZoom || 0,
-			maxZoom = this.getMaxZoom(),
-			ne = bounds.getNorthEast(),
-			sw = bounds.getSouthWest(),
-			boundsSize,
-			nePoint,
-			swPoint,
-			zoomNotFound = true;
-
-		if (inside) {
-			zoom--;
-		}
-
-		do {
-			zoom++;
-			nePoint = this.project(ne, zoom);
-			swPoint = this.project(sw, zoom);
-			boundsSize = new L.Point(nePoint.x - swPoint.x, swPoint.y - nePoint.y);
-
-			if (!inside) {
-				zoomNotFound = (boundsSize.x <= size.x) && (boundsSize.y <= size.y);
-			} else {
-				zoomNotFound = (boundsSize.x < size.x) || (boundsSize.y < size.y);
-			}
-		} while (zoomNotFound && (zoom <= maxZoom));
-
-		if (zoomNotFound && inside) {
-			return null;
-		}
-
-		return inside ? zoom : zoom - 1;
-	},
-
-	getSize: function () {
-		if (!this._size || this._sizeChanged) {
-			this._size = new L.Point(this._container.clientWidth, this._container.clientHeight);
-			this._sizeChanged = false;
-		}
-		return this._size;
-	},
-
-	getPixelBounds: function () {
-		var topLeftPoint = this._getTopLeftPoint(),
-			size = this.getSize();
-		return new L.Bounds(topLeftPoint, topLeftPoint.add(size));
-	},
-
-	getPixelOrigin: function () {
-		return this._initialTopLeftPoint;
-	},
-
-	getPanes: function () {
-		return this._panes;
-	},
-
-
-	// conversion methods
-
-	mouseEventToContainerPoint: function (e) { // (MouseEvent)
-		return L.DomEvent.getMousePosition(e, this._container);
-	},
-
-	mouseEventToLayerPoint: function (e) { // (MouseEvent)
-		return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(e));
-	},
-
-	mouseEventToLatLng: function (e) { // (MouseEvent)
-		return this.layerPointToLatLng(this.mouseEventToLayerPoint(e));
-	},
-
-	containerPointToLayerPoint: function (point) { // (Point)
-		return point.subtract(L.DomUtil.getPosition(this._mapPane));
-	},
-
-	layerPointToContainerPoint: function (point) { // (Point)
-		return point.add(L.DomUtil.getPosition(this._mapPane));
-	},
-
-	layerPointToLatLng: function (point) { // (Point)
-		return this.unproject(point.add(this._initialTopLeftPoint));
-	},
-
-	latLngToLayerPoint: function (latlng) { // (LatLng)
-		return this.project(latlng)._round()._subtract(this._initialTopLeftPoint);
-	},
-
-	project: function (latlng, zoom) { // (LatLng[, Number]) -> Point
-		zoom = (typeof zoom === 'undefined' ? this._zoom : zoom);
-		return this.options.crs.latLngToPoint(latlng, this.options.scale(zoom));
-	},
-
-	unproject: function (point, zoom, unbounded) { // (Point[, Number, Boolean]) -> LatLng
-		zoom = (typeof zoom === 'undefined' ? this._zoom : zoom);
-		return this.options.crs.pointToLatLng(point, this.options.scale(zoom), unbounded);
-	},
-
-
-	// private methods that modify map state
-
-	_initLayout: function () {
-		var container = this._container;
-
-		container.innerHTML = '';
-
-		container.className += ' leaflet-container';
-
-		if (this.options.fadeAnimation) {
-			container.className += ' leaflet-fade-anim';
-		}
-
-		var position = L.DomUtil.getStyle(container, 'position');
-		if (position !== 'absolute' && position !== 'relative') {
-			container.style.position = 'relative';
-		}
-
-		this._initPanes();
-
-		if (this._initControlPos) {
-			this._initControlPos();
-		}
-	},
-
-	_initPanes: function () {
-		var panes = this._panes = {};
-
-		this._mapPane = panes.mapPane = this._createPane('leaflet-map-pane', this._container);
-
-		this._tilePane = panes.tilePane = this._createPane('leaflet-tile-pane', this._mapPane);
-		this._objectsPane = panes.objectsPane = this._createPane('leaflet-objects-pane', this._mapPane);
-
-		panes.shadowPane = this._createPane('leaflet-shadow-pane');
-		panes.overlayPane = this._createPane('leaflet-overlay-pane');
-		panes.markerPane = this._createPane('leaflet-marker-pane');
-		panes.popupPane = this._createPane('leaflet-popup-pane');
-	},
-
-	_createPane: function (className, container) {
-		return L.DomUtil.create('div', className, container || this._objectsPane);
-	},
-
-	_resetView: function (center, zoom, preserveMapOffset, afterZoomAnim) {
-		var zoomChanged = (this._zoom !== zoom);
-
-		if (!afterZoomAnim) {
-			this.fire('movestart');
-
-			if (zoomChanged) {
-				this.fire('zoomstart');
-			}
-		}
-
-		this._zoom = zoom;
-
-		this._initialTopLeftPoint = this._getNewTopLeftPoint(center);
-
-		if (!preserveMapOffset) {
-			L.DomUtil.setPosition(this._mapPane, new L.Point(0, 0));
-		} else {
-			var offset = L.DomUtil.getPosition(this._mapPane);
-			this._initialTopLeftPoint._add(offset);
-		}
-
-		this._tileLayersToLoad = this._tileLayersNum;
-		this.fire('viewreset', {hard: !preserveMapOffset});
-
-		this.fire('move');
-		if (zoomChanged || afterZoomAnim) {
-			this.fire('zoomend');
-		}
-		this.fire('moveend');
-
-		if (!this._loaded) {
-			this._loaded = true;
-			this.fire('load');
-		}
-	},
-
-	_initLayers: function (layers) {
-		this._layers = {};
-
-		var i, len;
-
-		for (i = 0, len = layers.length; i < len; i++) {
-			this.addLayer(layers[i]);
-		}
-	},
-
-	_initControls: function () {
-		if (this.options.zoomControl) {
-			this.addControl(new L.Control.Zoom());
-		}
-		if (this.options.attributionControl) {
-			this.attributionControl = new L.Control.Attribution();
-			this.addControl(this.attributionControl);
-		}
-	},
-
-	_rawPanBy: function (offset) {
-		var mapPaneOffset = L.DomUtil.getPosition(this._mapPane);
-		L.DomUtil.setPosition(this._mapPane, mapPaneOffset.subtract(offset));
-	},
-
-
-	// map events
-
-	_initEvents: function () {
-		L.DomEvent.addListener(this._container, 'click', this._onMouseClick, this);
-
-		var events = ['dblclick', 'mousedown', 'mouseenter', 'mouseleave', 'mousemove', 'contextmenu'];
-
-		var i, len;
-
-		for (i = 0, len = events.length; i < len; i++) {
-			L.DomEvent.addListener(this._container, events[i], this._fireMouseEvent, this);
-		}
-
-		if (this.options.trackResize) {
-			L.DomEvent.addListener(window, 'resize', this._onResize, this);
-		}
-	},
-
-	_onResize: function () {
-		L.Util.requestAnimFrame(this.invalidateSize, this, false, this._container);
-	},
-
-	_onMouseClick: function (e) {
-		if (!this._loaded || (this.dragging && this.dragging.moved())) {
-			return;
-		}
-
-		this.fire('pre' + e.type);
-		this._fireMouseEvent(e);
-	},
-
-	_fireMouseEvent: function (e) {
-		if (!this._loaded) {
-			return;
-		}
-
-		var type = e.type;
-		type = (type === 'mouseenter' ? 'mouseover' : (type === 'mouseleave' ? 'mouseout' : type));
-
-		if (!this.hasEventListeners(type)) {
-			return;
-		}
-
-		if (type === 'contextmenu') {
-			L.DomEvent.preventDefault(e);
-		}
-		
-		this.fire(type, {
-			latlng: this.mouseEventToLatLng(e),
-			layerPoint: this.mouseEventToLayerPoint(e)
-		});
-	},
-
-	_initInteraction: function () {
-		var handlers = {
-			dragging: L.Map.Drag,
-			touchZoom: L.Map.TouchZoom,
-			doubleClickZoom: L.Map.DoubleClickZoom,
-			scrollWheelZoom: L.Map.ScrollWheelZoom,
-			boxZoom: L.Map.BoxZoom
-		};
-
-		var i;
-		for (i in handlers) {
-			if (handlers.hasOwnProperty(i) && handlers[i]) {
-				this[i] = new handlers[i](this);
-				if (this.options[i]) {
-					this[i].enable();
-				}
-				// TODO move enabling to handler contructor
-			}
-		}
-	},
-
-	_onTileLayerLoad: function () {
-		// clear scaled tiles after all new tiles are loaded (for performance)
-		this._tileLayersToLoad--;
-		if (this._tileLayersNum && !this._tileLayersToLoad && this._tileBg) {
-			clearTimeout(this._clearTileBgTimer);
-			this._clearTileBgTimer = setTimeout(L.Util.bind(this._clearTileBg, this), 500);
-		}
-	},
-
-
-	// private methods for getting map state
-
-	_getTopLeftPoint: function () {
-		if (!this._loaded) {
-			throw new Error('Set map center and zoom first.');
-		}
-
-		var offset = L.DomUtil.getPosition(this._mapPane);
-		return this._initialTopLeftPoint.subtract(offset);
-	},
-
-	_getNewTopLeftPoint: function (center) {
-		var viewHalf = this.getSize().divideBy(2);
-		return this.project(center).subtract(viewHalf).round();
-	},
-
-	_limitZoom: function (zoom) {
-		var min = this.getMinZoom();
-		var max = this.getMaxZoom();
-		return Math.max(min, Math.min(max, zoom));
-	}
-});
-
-
-
-L.Projection.Mercator = {
-	MAX_LATITUDE: 85.0840591556,
-
-	R_MINOR: 6356752.3142,
-	R_MAJOR: 6378137,
-
-	project: function (/*LatLng*/ latlng) /*-> Point*/ {
-		var d = L.LatLng.DEG_TO_RAD,
-			max = this.MAX_LATITUDE,
-			lat = Math.max(Math.min(max, latlng.lat), -max),
-			r = this.R_MAJOR,
-			r2 = this.R_MINOR,
-			x = latlng.lng * d * r,
-			y = lat * d,
-			tmp = r2 / r,
-			eccent = Math.sqrt(1.0 - tmp * tmp),
-			con = eccent * Math.sin(y);
-
-		con = Math.pow((1 - con) / (1 + con), eccent * 0.5);
-
-		var ts = Math.tan(0.5 * ((Math.PI * 0.5) - y)) / con;
-		y = -r2 * Math.log(ts);
-
-		return new L.Point(x, y);
-	},
-
-	unproject: function (/*Point*/ point, /*Boolean*/ unbounded) /*-> LatLng*/ {
-		var d = L.LatLng.RAD_TO_DEG,
-			r = this.R_MAJOR,
-			r2 = this.R_MINOR,
-			lng = point.x * d / r,
-			tmp = r2 / r,
-			eccent = Math.sqrt(1 - (tmp * tmp)),
-			ts = Math.exp(- point.y / r2),
-			phi = (Math.PI / 2) - 2 * Math.atan(ts),
-			numIter = 15,
-			tol = 1e-7,
-			i = numIter,
-			dphi = 0.1,
-			con;
-
-		while ((Math.abs(dphi) > tol) && (--i > 0)) {
-			con = eccent * Math.sin(phi);
-			dphi = (Math.PI / 2) - 2 * Math.atan(ts * Math.pow((1.0 - con) / (1.0 + con), 0.5 * eccent)) - phi;
-			phi += dphi;
-		}
-
-		return new L.LatLng(phi * d, lng, unbounded);
-	}
-};
-
-
-
-L.CRS.EPSG3395 = L.Util.extend({}, L.CRS, {
-	code: 'EPSG:3395',
-
-	projection: L.Projection.Mercator,
-	transformation: (function () {
-		var m = L.Projection.Mercator,
-			r = m.R_MAJOR,
-			r2 = m.R_MINOR;
-
-		return new L.Transformation(0.5 / (Math.PI * r), 0.5, -0.5 / (Math.PI * r2), 0.5);
-	}())
-});
-
-
-/*
- * L.TileLayer is used for standard xyz-numbered tile layers.
- */
-
-L.TileLayer = L.Class.extend({
-	includes: L.Mixin.Events,
-
-	options: {
-		minZoom: 0,
-		maxZoom: 18,
-		tileSize: 256,
-		subdomains: 'abc',
-		errorTileUrl: '',
-		attribution: '',
-		opacity: 1,
-		scheme: 'xyz',
-		continuousWorld: false,
-		noWrap: false,
-		zoomOffset: 0,
-		zoomReverse: false,
-
-		unloadInvisibleTiles: L.Browser.mobile,
-		updateWhenIdle: L.Browser.mobile
-	},
-
-	initialize: function (url, options, urlParams) {
-		L.Util.setOptions(this, options);
-
-		this._url = url;
-		this._urlParams = urlParams;
-
-		if (typeof this.options.subdomains === 'string') {
-			this.options.subdomains = this.options.subdomains.split('');
-		}
-	},
-
-	onAdd: function (map, insertAtTheBottom) {
-		this._map = map;
-		this._insertAtTheBottom = insertAtTheBottom;
-
-		// create a container div for tiles
-		this._initContainer();
-
-		// create an image to clone for tiles
-		this._createTileProto();
-
-		// set up events
-		map.on('viewreset', this._resetCallback, this);
-
-		if (this.options.updateWhenIdle) {
-			map.on('moveend', this._update, this);
-		} else {
-			this._limitedUpdate = L.Util.limitExecByInterval(this._update, 150, this);
-			map.on('move', this._limitedUpdate, this);
-		}
-
-		this._reset();
-		this._update();
-	},
-
-	onRemove: function (map) {
-		this._map.getPanes().tilePane.removeChild(this._container);
-		this._container = null;
-
-		this._map.off('viewreset', this._resetCallback, this);
-
-		if (this.options.updateWhenIdle) {
-			this._map.off('moveend', this._update, this);
-		} else {
-			this._map.off('move', this._limitedUpdate, this);
-		}
-	},
-
-	getAttribution: function () {
-		return this.options.attribution;
-	},
-
-	setOpacity: function (opacity) {
-		this.options.opacity = opacity;
-
-		this._setOpacity(opacity);
-
-		// stupid webkit hack to force redrawing of tiles
-		if (L.Browser.webkit) {
-			for (var i in this._tiles) {
-				if (this._tiles.hasOwnProperty(i)) {
-					this._tiles[i].style.webkitTransform += ' translate(0,0)';
-				}
-			}
-		}
-	},
-
-	_setOpacity: function (opacity) {
-		if (opacity < 1) {
-			L.DomUtil.setOpacity(this._container, opacity);
-		}
-	},
-
-	_initContainer: function () {
-		var tilePane = this._map.getPanes().tilePane,
-			first = tilePane.firstChild;
-
-		if (!this._container || tilePane.empty) {
-			this._container = L.DomUtil.create('div', 'leaflet-layer');
-
-			if (this._insertAtTheBottom && first) {
-				tilePane.insertBefore(this._container, first);
-			} else {
-				tilePane.appendChild(this._container);
-			}
-
-			this._setOpacity(this.options.opacity);
-		}
-	},
-
-	_resetCallback: function (e) {
-		this._reset(e.hard);
-	},
-
-	_reset: function (clearOldContainer) {
-		var key;
-		for (key in this._tiles) {
-			if (this._tiles.hasOwnProperty(key)) {
-				this.fire("tileunload", {tile: this._tiles[key]});
-			}
-		}
-		this._tiles = {};
-
-		if (this.options.reuseTiles) {
-			this._unusedTiles = [];
-		}
-
-		if (clearOldContainer && this._container) {
-			this._container.innerHTML = "";
-		}
-		this._initContainer();
-	},
-
-	_update: function () {
-		var bounds = this._map.getPixelBounds(),
-			tileSize = this.options.tileSize;
-
-		var nwTilePoint = new L.Point(
-				Math.floor(bounds.min.x / tileSize),
-				Math.floor(bounds.min.y / tileSize)),
-			seTilePoint = new L.Point(
-				Math.floor(bounds.max.x / tileSize),
-				Math.floor(bounds.max.y / tileSize)),
-			tileBounds = new L.Bounds(nwTilePoint, seTilePoint);
-
-		this._addTilesFromCenterOut(tileBounds);
-
-		if (this.options.unloadInvisibleTiles ||
-			this.options.reuseTiles) {
-			this._removeOtherTiles(tileBounds);
-		}
-	},
-
-	_addTilesFromCenterOut: function (bounds) {
-		var queue = [],
-			center = bounds.getCenter();
-
-		for (var j = bounds.min.y; j <= bounds.max.y; j++) {
-			for (var i = bounds.min.x; i <= bounds.max.x; i++) {
-				if ((i + ':' + j) in this._tiles) {
-					continue;
-				}
-				queue.push(new L.Point(i, j));
-			}
-		}
-
-		// load tiles in order of their distance to center
-		queue.sort(function (a, b) {
-			return a.distanceTo(center) - b.distanceTo(center);
-		});
-
-		var fragment = document.createDocumentFragment();
-
-		this._tilesToLoad = queue.length;
-		for (var k = 0, len = this._tilesToLoad; k < len; k++) {
-			this._addTile(queue[k], fragment);
-		}
-
-		this._container.appendChild(fragment);
-	},
-
-	_removeOtherTiles: function (bounds) {
-		var kArr, x, y, key, tile;
-
-		for (key in this._tiles) {
-			if (this._tiles.hasOwnProperty(key)) {
-				kArr = key.split(':');
-				x = parseInt(kArr[0], 10);
-				y = parseInt(kArr[1], 10);
-
-				// remove tile if it's out of bounds
-				if (x < bounds.min.x || x > bounds.max.x || y < bounds.min.y || y > bounds.max.y) {
-
-					tile = this._tiles[key];
-					this.fire("tileunload", {tile: tile, url: tile.src});
-
-					// evil, don't do this! crashes Android 3, produces load errors, doesn't solve memory leaks
-					// this._tiles[key].src = '';
-
-					if (tile.parentNode === this._container) {
-						this._container.removeChild(tile);
-					}
-					if (this.options.reuseTiles) {
-						this._unusedTiles.push(this._tiles[key]);
-					}
-					delete this._tiles[key];
-				}
-			}
-		}
-	},
-
-	_addTile: function (tilePoint, container) {
-		var tilePos = this._getTilePos(tilePoint),
-			zoom = this._map.getZoom(),
-			key = tilePoint.x + ':' + tilePoint.y,
-			tileLimit = Math.pow(2, this._getOffsetZoom(zoom));
-
-		// wrap tile coordinates
-		if (!this.options.continuousWorld) {
-			if (!this.options.noWrap) {
-				tilePoint.x = ((tilePoint.x % tileLimit) + tileLimit) % tileLimit;
-			} else if (tilePoint.x < 0 || tilePoint.x >= tileLimit) {
-				this._tilesToLoad--;
-				return;
-			}
-
-			if (tilePoint.y < 0 || tilePoint.y >= tileLimit) {
-				this._tilesToLoad--;
-				return;
-			}
-		}
-
-		// get unused tile - or create a new tile
-		var tile = this._getTile();
-		L.DomUtil.setPosition(tile, tilePos);
-
-		this._tiles[key] = tile;
-
-		if (this.options.scheme === 'tms') {
-			tilePoint.y = tileLimit - tilePoint.y - 1;
-		}
-
-		this._loadTile(tile, tilePoint, zoom);
-
-		container.appendChild(tile);
-	},
-
-	_getOffsetZoom: function (zoom) {
-		zoom = this.options.zoomReverse ? this.options.maxZoom - zoom : zoom;
-		return zoom + this.options.zoomOffset;
-	},
-
-	_getTilePos: function (tilePoint) {
-		var origin = this._map.getPixelOrigin(),
-			tileSize = this.options.tileSize;
-
-		return tilePoint.multiplyBy(tileSize).subtract(origin);
-	},
-
-	// image-specific code (override to implement e.g. Canvas or SVG tile layer)
-
-	getTileUrl: function (tilePoint, zoom) {
-		var subdomains = this.options.subdomains,
-			s = this.options.subdomains[(tilePoint.x + tilePoint.y) % subdomains.length];
-
-		return L.Util.template(this._url, L.Util.extend({
-			s: s,
-			z: this._getOffsetZoom(zoom),
-			x: tilePoint.x,
-			y: tilePoint.y
-		}, this._urlParams));
-	},
-
-	_createTileProto: function () {
-		this._tileImg = L.DomUtil.create('img', 'leaflet-tile');
-		this._tileImg.galleryimg = 'no';
-
-		var tileSize = this.options.tileSize;
-		this._tileImg.style.width = tileSize + 'px';
-		this._tileImg.style.height = tileSize + 'px';
-	},
-
-	_getTile: function () {
-		if (this.options.reuseTiles && this._unusedTiles.length > 0) {
-			var tile = this._unusedTiles.pop();
-			this._resetTile(tile);
-			return tile;
-		}
-		return this._createTile();
-	},
-
-	_resetTile: function (tile) {
-		// Override if data stored on a tile needs to be cleaned up before reuse
-	},
-
-	_createTile: function () {
-		var tile = this._tileImg.cloneNode(false);
-		tile.onselectstart = tile.onmousemove = L.Util.falseFn;
-		return tile;
-	},
-
-	_loadTile: function (tile, tilePoint, zoom) {
-		tile._layer = this;
-		tile.onload = this._tileOnLoad;
-		tile.onerror = this._tileOnError;
-		tile.src = this.getTileUrl(tilePoint, zoom);
-	},
-
-	_tileOnLoad: function (e) {
-		var layer = this._layer;
-
-		this.className += ' leaflet-tile-loaded';
-
-		layer.fire('tileload', {tile: this, url: this.src});
-
-		layer._tilesToLoad--;
-		if (!layer._tilesToLoad) {
-			layer.fire('load');
-		}
-	},
-
-	_tileOnError: function (e) {
-		var layer = this._layer;
-
-		layer.fire('tileerror', {tile: this, url: this.src});
-
-		var newUrl = layer.options.errorTileUrl;
-		if (newUrl) {
-			this.src = newUrl;
-		}
-	}
-});
-
-
-L.TileLayer.WMS = L.TileLayer.extend({
-	defaultWmsParams: {
-		service: 'WMS',
-		request: 'GetMap',
-		version: '1.1.1',
-		layers: '',
-		styles: '',
-		format: 'image/jpeg',
-		transparent: false
-	},
-
-	initialize: function (/*String*/ url, /*Object*/ options) {
-		this._url = url;
-
-		this.wmsParams = L.Util.extend({}, this.defaultWmsParams);
-		this.wmsParams.width = this.wmsParams.height = this.options.tileSize;
-
-		for (var i in options) {
-			// all keys that are not TileLayer options go to WMS params
-			if (!this.options.hasOwnProperty(i)) {
-				this.wmsParams[i] = options[i];
-			}
-		}
-
-		L.Util.setOptions(this, options);
-	},
-
-	onAdd: function (map) {
-		var projectionKey = (parseFloat(this.wmsParams.version) >= 1.3 ? 'crs' : 'srs');
-		this.wmsParams[projectionKey] = map.options.crs.code;
-
-		L.TileLayer.prototype.onAdd.call(this, map);
-	},
-
-	getTileUrl: function (/*Point*/ tilePoint, /*Number*/ zoom)/*-> String*/ {
-		var tileSize = this.options.tileSize,
-			nwPoint = tilePoint.multiplyBy(tileSize),
-			sePoint = nwPoint.add(new L.Point(tileSize, tileSize)),
-			nwMap = this._map.unproject(nwPoint, this._zoom, true),
-			seMap = this._map.unproject(sePoint, this._zoom, true),
-			nw = this._map.options.crs.project(nwMap),
-			se = this._map.options.crs.project(seMap),
-			bbox = [nw.x, se.y, se.x, nw.y].join(',');
-
-		return this._url + L.Util.getParamString(this.wmsParams) + "&bbox=" + bbox;
-	}
-});
-
-
-L.TileLayer.Canvas = L.TileLayer.extend({
-	options: {
-		async: false
-	},
-
-	initialize: function (options) {
-		L.Util.setOptions(this, options);
-	},
-
-	redraw: function () {
-		for (var i in this._tiles) {
-			var tile = this._tiles[i];
-			this._redrawTile(tile);
-		}
-	},
-
-	_redrawTile: function (tile) {
-		this.drawTile(tile, tile._tilePoint, tile._zoom);
-	},
-
-	_createTileProto: function () {
-		this._canvasProto = L.DomUtil.create('canvas', 'leaflet-tile');
-
-		var tileSize = this.options.tileSize;
-		this._canvasProto.width = tileSize;
-		this._canvasProto.height = tileSize;
-	},
-
-	_createTile: function () {
-		var tile = this._canvasProto.cloneNode(false);
-		tile.onselectstart = tile.onmousemove = L.Util.falseFn;
-		return tile;
-	},
-
-	_loadTile: function (tile, tilePoint, zoom) {
-		tile._layer = this;
-		tile._tilePoint = tilePoint;
-		tile._zoom = zoom;
-
-		this.drawTile(tile, tilePoint, zoom);
-
-		if (!this.options.async) {
-			this.tileDrawn(tile);
-		}
-	},
-
-	drawTile: function (tile, tilePoint, zoom) {
-		// override with rendering code
-	},
-
-	tileDrawn: function (tile) {
-		this._tileOnLoad.call(tile);
-	}
-});
-
-
-L.ImageOverlay = L.Class.extend({
-	includes: L.Mixin.Events,
-
-	initialize: function (/*String*/ url, /*LatLngBounds*/ bounds) {
-		this._url = url;
-		this._bounds = bounds;
-	},
-
-	onAdd: function (map) {
-		this._map = map;
-
-		if (!this._image) {
-			this._initImage();
-		}
-
-		map.getPanes().overlayPane.appendChild(this._image);
-
-		map.on('viewreset', this._reset, this);
-		this._reset();
-	},
-
-	onRemove: function (map) {
-		map.getPanes().overlayPane.removeChild(this._image);
-		map.off('viewreset', this._reset, this);
-	},
-
-	_initImage: function () {
-		this._image = L.DomUtil.create('img', 'leaflet-image-layer');
-
-		this._image.style.visibility = 'hidden';
-		//TODO opacity option
-
-		//TODO createImage util method to remove duplication
-		L.Util.extend(this._image, {
-			galleryimg: 'no',
-			onselectstart: L.Util.falseFn,
-			onmousemove: L.Util.falseFn,
-			onload: L.Util.bind(this._onImageLoad, this),
-			src: this._url
-		});
-	},
-
-	_reset: function () {
-		var topLeft = this._map.latLngToLayerPoint(this._bounds.getNorthWest()),
-			bottomRight = this._map.latLngToLayerPoint(this._bounds.getSouthEast()),
-			size = bottomRight.subtract(topLeft);
-
-		L.DomUtil.setPosition(this._image, topLeft);
-
-		this._image.style.width = size.x + 'px';
-		this._image.style.height = size.y + 'px';
-	},
-
-	_onImageLoad: function () {
-		this._image.style.visibility = '';
-		this.fire('load');
-	}
-});
-
-
-L.Icon = L.Class.extend({
-	iconUrl: L.ROOT_URL + 'images/marker.png',
-	shadowUrl: L.ROOT_URL + 'images/marker-shadow.png',
-
-	iconSize: new L.Point(25, 41),
-	shadowSize: new L.Point(41, 41),
-
-	iconAnchor: new L.Point(13, 41),
-	popupAnchor: new L.Point(0, -33),
-
-	initialize: function (iconUrl) {
-		if (iconUrl) {
-			this.iconUrl = iconUrl;
-		}
-	},
-
-	createIcon: function () {
-		return this._createIcon('icon');
-	},
-
-	createShadow: function () {
-		return this._createIcon('shadow');
-	},
-
-	_createIcon: function (name) {
-		var size = this[name + 'Size'],
-			src = this[name + 'Url'];
-		if (!src && name === 'shadow') {
-			return null;
-		}
-
-		var img;
-		if (!src) {
-			img = this._createDiv();
-		}
-		else {
-			img = this._createImg(src);
-		}
-
-		img.className = 'leaflet-marker-' + name;
-
-		img.style.marginLeft = (-this.iconAnchor.x) + 'px';
-		img.style.marginTop = (-this.iconAnchor.y) + 'px';
-
-		if (size) {
-			img.style.width = size.x + 'px';
-			img.style.height = size.y + 'px';
-		}
-
-		return img;
-	},
-
-	_createImg: function (src) {
-		var el;
-		if (!L.Browser.ie6) {
-			el = document.createElement('img');
-			el.src = src;
-		} else {
-			el = document.createElement('div');
-			el.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + src + '")';
-		}
-		return el;
-	},
-
-	_createDiv: function () {
-		return document.createElement('div');
-	}
-});
-
-
-/*
- * L.Marker is used to display clickable/draggable icons on the map.
- */
-
-L.Marker = L.Class.extend({
-
-	includes: L.Mixin.Events,
-
-	options: {
-		icon: new L.Icon(),
-		title: '',
-		clickable: true,
-		draggable: false,
-		zIndexOffset: 0
-	},
-
-	initialize: function (latlng, options) {
-		L.Util.setOptions(this, options);
-		this._latlng = latlng;
-	},
-
-	onAdd: function (map) {
-		this._map = map;
-
-		this._initIcon();
-
-		map.on('viewreset', this._reset, this);
-		this._reset();
-	},
-
-	onRemove: function (map) {
-		this._removeIcon();
-
-		// TODO move to Marker.Popup.js
-		if (this.closePopup) {
-			this.closePopup();
-		}
-
-		this._map = null;
-
-		map.off('viewreset', this._reset, this);
-	},
-
-	getLatLng: function () {
-		return this._latlng;
-	},
-
-	setLatLng: function (latlng) {
-		this._latlng = latlng;
-		if (this._icon) {
-			this._reset();
-
-			if (this._popup) {
-				this._popup.setLatLng(this._latlng);
-			}
-		}
-	},
-
-	setIcon: function (icon) {
-		if (this._map) {
-			this._removeIcon();
-		}
-
-		this.options.icon = icon;
-
-		if (this._map) {
-			this._initIcon();
-			this._reset();
-		}
-	},
-
-	_initIcon: function () {
-		if (!this._icon) {
-			this._icon = this.options.icon.createIcon();
-
-			if (this.options.title) {
-				this._icon.title = this.options.title;
-			}
-
-			this._initInteraction();
-		}
-		if (!this._shadow) {
-			this._shadow = this.options.icon.createShadow();
-		}
-
-		this._map._panes.markerPane.appendChild(this._icon);
-		if (this._shadow) {
-			this._map._panes.shadowPane.appendChild(this._shadow);
-		}
-	},
-
-	_removeIcon: function () {
-		this._map._panes.markerPane.removeChild(this._icon);
-		if (this._shadow) {
-			this._map._panes.shadowPane.removeChild(this._shadow);
-		}
-		this._icon = this._shadow = null;
-	},
-
-	_reset: function () {
-		var pos = this._map.latLngToLayerPoint(this._latlng).round();
-
-		L.DomUtil.setPosition(this._icon, pos);
-		if (this._shadow) {
-			L.DomUtil.setPosition(this._shadow, pos);
-		}
-
-		this._icon.style.zIndex = pos.y + this.options.zIndexOffset;
-	},
-
-	_initInteraction: function () {
-		if (this.options.clickable) {
-			this._icon.className += ' leaflet-clickable';
-
-			L.DomEvent.addListener(this._icon, 'click', this._onMouseClick, this);
-
-			var events = ['dblclick', 'mousedown', 'mouseover', 'mouseout'];
-			for (var i = 0; i < events.length; i++) {
-				L.DomEvent.addListener(this._icon, events[i], this._fireMouseEvent, this);
-			}
-		}
-
-		if (L.Handler.MarkerDrag) {
-			this.dragging = new L.Handler.MarkerDrag(this);
-
-			if (this.options.draggable) {
-				this.dragging.enable();
-			}
-		}
-	},
-
-	_onMouseClick: function (e) {
-		L.DomEvent.stopPropagation(e);
-		if (this.dragging && this.dragging.moved()) { return; }
-		this.fire(e.type);
-	},
-
-	_fireMouseEvent: function (e) {
-		this.fire(e.type);
-		L.DomEvent.stopPropagation(e);
-	}
-});
-
-
-
-L.Popup = L.Class.extend({
-	includes: L.Mixin.Events,
-
-	options: {
-		minWidth: 50,
-		maxWidth: 300,
-		autoPan: true,
-		closeButton: true,
-		offset: new L.Point(0, 2),
-		autoPanPadding: new L.Point(5, 5),
-		className: ''
-	},
-
-	initialize: function (options, source) {
-		L.Util.setOptions(this, options);
-
-		this._source = source;
-	},
-
-	onAdd: function (map) {
-		this._map = map;
-		if (!this._container) {
-			this._initLayout();
-		}
-		this._updateContent();
-
-		this._container.style.opacity = '0';
-
-		this._map._panes.popupPane.appendChild(this._container);
-		this._map.on('viewreset', this._updatePosition, this);
-
-		if (this._map.options.closePopupOnClick) {
-			this._map.on('preclick', this._close, this);
-		}
-
-		this._update();
-
-		this._container.style.opacity = '1'; //TODO fix ugly opacity hack
-
-		this._opened = true;
-	},
-
-	onRemove: function (map) {
-		map._panes.popupPane.removeChild(this._container);
-		L.Util.falseFn(this._container.offsetWidth);
-
-		map.off('viewreset', this._updatePosition, this);
-		map.off('click', this._close, this);
-
-		this._container.style.opacity = '0';
-
-		this._opened = false;
-	},
-
-	setLatLng: function (latlng) {
-		this._latlng = latlng;
-		if (this._opened) {
-			this._update();
-		}
-		return this;
-	},
-
-	setContent: function (content) {
-		this._content = content;
-		if (this._opened) {
-			this._update();
-		}
-		return this;
-	},
-
-	_close: function () {
-		if (this._opened) {
-			this._map.closePopup();
-		}
-	},
-
-	_initLayout: function () {
-		this._container = L.DomUtil.create('div', 'leaflet-popup ' + this.options.className);
-
-		if (this.options.closeButton) {
-			this._closeButton = L.DomUtil.create('a', 'leaflet-popup-close-button', this._container);
-			this._closeButton.href = '#close';
-			L.DomEvent.addListener(this._closeButton, 'click', this._onCloseButtonClick, this);
-		}
-
-		this._wrapper = L.DomUtil.create('div', 'leaflet-popup-content-wrapper', this._container);
-		L.DomEvent.disableClickPropagation(this._wrapper);
-		this._contentNode = L.DomUtil.create('div', 'leaflet-popup-content', this._wrapper);
-
-		this._tipContainer = L.DomUtil.create('div', 'leaflet-popup-tip-container', this._container);
-		this._tip = L.DomUtil.create('div', 'leaflet-popup-tip', this._tipContainer);
-	},
-
-	_update: function () {
-		this._container.style.visibility = 'hidden';
-
-		this._updateContent();
-		this._updateLayout();
-		this._updatePosition();
-
-		this._container.style.visibility = '';
-
-		this._adjustPan();
-	},
-
-	_updateContent: function () {
-		if (!this._content) {
-			return;
-		}
-
-		if (typeof this._content === 'string') {
-			this._contentNode.innerHTML = this._content;
-		} else {
-			this._contentNode.innerHTML = '';
-			this._contentNode.appendChild(this._content);
-		}
-	},
-
-	_updateLayout: function () {
-		this._container.style.width = '';
-		this._container.style.whiteSpace = 'nowrap';
-
-		var width = this._container.offsetWidth;
-
-		this._container.style.width = (width > this.options.maxWidth ?
-				this.options.maxWidth : (width < this.options.minWidth ? this.options.minWidth : width)) + 'px';
-		this._container.style.whiteSpace = '';
-
-		this._containerWidth = this._container.offsetWidth;
-	},
-
-	_updatePosition: function () {
-		var pos = this._map.latLngToLayerPoint(this._latlng);
-
-		this._containerBottom = -pos.y - this.options.offset.y;
-		this._containerLeft = pos.x - Math.round(this._containerWidth / 2) + this.options.offset.x;
-
-		this._container.style.bottom = this._containerBottom + 'px';
-		this._container.style.left = this._containerLeft + 'px';
-	},
-
-	_adjustPan: function () {
-		if (!this.options.autoPan) {
-			return;
-		}
-
-		var containerHeight = this._container.offsetHeight,
-			layerPos = new L.Point(
-				this._containerLeft,
-				-containerHeight - this._containerBottom),
-			containerPos = this._map.layerPointToContainerPoint(layerPos),
-			adjustOffset = new L.Point(0, 0),
-			padding = this.options.autoPanPadding,
-			size = this._map.getSize();
-
-		if (containerPos.x < 0) {
-			adjustOffset.x = containerPos.x - padding.x;
-		}
-		if (containerPos.x + this._containerWidth > size.x) {
-			adjustOffset.x = containerPos.x + this._containerWidth - size.x + padding.x;
-		}
-		if (containerPos.y < 0) {
-			adjustOffset.y = containerPos.y - padding.y;
-		}
-		if (containerPos.y + containerHeight > size.y) {
-			adjustOffset.y = containerPos.y + containerHeight - size.y + padding.y;
-		}
-
-		if (adjustOffset.x || adjustOffset.y) {
-			this._map.panBy(adjustOffset);
-		}
-	},
-
-	_onCloseButtonClick: function (e) {
-		this._close();
-		L.DomEvent.stop(e);
-	}
-});
-
-
-/*
- * Popup extension to L.Marker, adding openPopup & bindPopup methods.
- */
-
-L.Marker.include({
-	openPopup: function () {
-		this._popup.setLatLng(this._latlng);
-		if (this._map) {
-			this._map.openPopup(this._popup);
-		}
-
-		return this;
-	},
-
-	closePopup: function () {
-		if (this._popup) {
-			this._popup._close();
-		}
-		return this;
-	},
-
-	bindPopup: function (content, options) {
-		options = L.Util.extend({offset: this.options.icon.popupAnchor}, options);
-
-		if (!this._popup) {
-			this.on('click', this.openPopup, this);
-		}
-
-		this._popup = new L.Popup(options, this);
-		this._popup.setContent(content);
-
-		return this;
-	},
-
-	unbindPopup: function () {
-		if (this._popup) {
-			this._popup = null;
-			this.off('click', this.openPopup);
-		}
-		return this;
-	}
-});
-
-
-
-L.Map.include({
-	openPopup: function (popup) {
-		this.closePopup();
-		this._popup = popup;
-		this.addLayer(popup);
-		this.fire('popupopen', { popup: this._popup });
-	
-		return this;
-	},
-
-	closePopup: function () {
-		if (this._popup) {
-			this.removeLayer(this._popup);
-			this.fire('popupclose', { popup: this._popup });
-			this._popup = null;
-		}
-		return this;
-	}
-});
-
-
-/*
- * L.LayerGroup is a class to combine several layers so you can manipulate the group (e.g. add/remove it) as one layer.
- */
-
-L.LayerGroup = L.Class.extend({
-	initialize: function (layers) {
-		this._layers = {};
-
-		if (layers) {
-			for (var i = 0, len = layers.length; i < len; i++) {
-				this.addLayer(layers[i]);
-			}
-		}
-	},
-
-	addLayer: function (layer) {
-		var id = L.Util.stamp(layer);
-		this._layers[id] = layer;
-
-		if (this._map) {
-			this._map.addLayer(layer);
-		}
-		return this;
-	},
-
-	removeLayer: function (layer) {
-		var id = L.Util.stamp(layer);
-		delete this._layers[id];
-
-		if (this._map) {
-			this._map.removeLayer(layer);
-		}
-		return this;
-	},
-
-	clearLayers: function () {
-		this._iterateLayers(this.removeLayer, this);
-		return this;
-	},
-
-	invoke: function (methodName) {
-		var args = Array.prototype.slice.call(arguments, 1),
-			i, layer;
-
-		for (i in this._layers) {
-			if (this._layers.hasOwnProperty(i)) {
-				layer = this._layers[i];
-
-				if (layer[methodName]) {
-					layer[methodName].apply(layer, args);
-				}
-			}
-		}
-		return this;
-	},
-
-	onAdd: function (map) {
-		this._map = map;
-		this._iterateLayers(map.addLayer, map);
-	},
-
-	onRemove: function (map) {
-		this._iterateLayers(map.removeLayer, map);
-		delete this._map;
-	},
-
-	_iterateLayers: function (method, context) {
-		for (var i in this._layers) {
-			if (this._layers.hasOwnProperty(i)) {
-				method.call(context, this._layers[i]);
-			}
-		}
-	}
-});
-
-
-/*
- * L.FeatureGroup extends L.LayerGroup by introducing mouse events and bindPopup method shared between a group of layers.
- */
-
-L.FeatureGroup = L.LayerGroup.extend({
-	includes: L.Mixin.Events,
-
-	addLayer: function (layer) {
-		this._initEvents(layer);
-		L.LayerGroup.prototype.addLayer.call(this, layer);
-
-		if (this._popupContent && layer.bindPopup) {
-			layer.bindPopup(this._popupContent);
-		}
-	},
-
-	bindPopup: function (content) {
-		this._popupContent = content;
-
-		return this.invoke('bindPopup', content);
-	},
-
-	setStyle: function (style) {
-		return this.invoke('setStyle', style);
-	},
-
-	_events: ['click', 'dblclick', 'mouseover', 'mouseout'],
-
-	_initEvents: function (layer) {
-		for (var i = 0, len = this._events.length; i < len; i++) {
-			layer.on(this._events[i], this._propagateEvent, this);
-		}
-	},
-
-	_propagateEvent: function (e) {
-		e.layer = e.target;
-		e.target = this;
-		this.fire(e.type, e);
-	}
-});
-
-
-/*
- * L.Path is a base class for rendering vector paths on a map. It's inherited by Polyline, Circle, etc.
- */
-
-L.Path = L.Class.extend({
-	includes: [L.Mixin.Events],
-
-	statics: {
-		// how much to extend the clip area around the map view
-		// (relative to its size, e.g. 0.5 is half the screen in each direction)
-		CLIP_PADDING: 0.5
-	},
-
-	options: {
-		stroke: true,
-		color: '#0033ff',
-		weight: 5,
-		opacity: 0.5,
-
-		fill: false,
-		fillColor: null, //same as color by default
-		fillOpacity: 0.2,
-
-		clickable: true,
-
-		// TODO remove this, as all paths now update on moveend
-		updateOnMoveEnd: true
-	},
-
-	initialize: function (options) {
-		L.Util.setOptions(this, options);
-	},
-
-	onAdd: function (map) {
-		this._map = map;
-
-		this._initElements();
-		this._initEvents();
-		this.projectLatlngs();
-		this._updatePath();
-
-		map.on('viewreset', this.projectLatlngs, this);
-
-		this._updateTrigger = this.options.updateOnMoveEnd ? 'moveend' : 'viewreset';
-		map.on(this._updateTrigger, this._updatePath, this);
-	},
-
-	onRemove: function (map) {
-		this._map = null;
-
-		map._pathRoot.removeChild(this._container);
-
-		map.off('viewreset', this.projectLatlngs, this);
-		map.off(this._updateTrigger, this._updatePath, this);
-	},
-
-	projectLatlngs: function () {
-		// do all projection stuff here
-	},
-
-	setStyle: function (style) {
-		L.Util.setOptions(this, style);
-		if (this._container) {
-			this._updateStyle();
-		}
-		return this;
-	},
-
-	_redraw: function () {
-		if (this._map) {
-			this.projectLatlngs();
-			this._updatePath();
-		}
-	}
-});
-
-L.Map.include({
-	_updatePathViewport: function () {
-		var p = L.Path.CLIP_PADDING,
-			size = this.getSize(),
-			//TODO this._map._getMapPanePos()
-			panePos = L.DomUtil.getPosition(this._mapPane),
-			min = panePos.multiplyBy(-1).subtract(size.multiplyBy(p)),
-			max = min.add(size.multiplyBy(1 + p * 2));
-
-		this._pathViewport = new L.Bounds(min, max);
-	}
-});
-
-
-L.Path.SVG_NS = 'http://www.w3.org/2000/svg';
-
-L.Browser.svg = !!(document.createElementNS && document.createElementNS(L.Path.SVG_NS, 'svg').createSVGRect);
-
-L.Path = L.Path.extend({
-	statics: {
-		SVG: L.Browser.svg,
-		_createElement: function (name) {
-			return document.createElementNS(L.Path.SVG_NS, name);
-		}
-	},
-
-	getPathString: function () {
-		// form path string here
-	},
-
-	_initElements: function () {
-		this._map._initPathRoot();
-		this._initPath();
-		this._initStyle();
-	},
-
-	_initPath: function () {
-		this._container = L.Path._createElement('g');
-
-		this._path = L.Path._createElement('path');
-		this._container.appendChild(this._path);
-
-		this._map._pathRoot.appendChild(this._container);
-	},
-
-	_initStyle: function () {
-		if (this.options.stroke) {
-			this._path.setAttribute('stroke-linejoin', 'round');
-			this._path.setAttribute('stroke-linecap', 'round');
-		}
-		if (this.options.fill) {
-			this._path.setAttribute('fill-rule', 'evenodd');
-		} else {
-			this._path.setAttribute('fill', 'none');
-		}
-		this._updateStyle();
-	},
-
-	_updateStyle: function () {
-		if (this.options.stroke) {
-			this._path.setAttribute('stroke', this.options.color);
-			this._path.setAttribute('stroke-opacity', this.options.opacity);
-			this._path.setAttribute('stroke-width', this.options.weight);
-		}
-		if (this.options.fill) {
-			this._path.setAttribute('fill', this.options.fillColor || this.options.color);
-			this._path.setAttribute('fill-opacity', this.options.fillOpacity);
-		}
-	},
-
-	_updatePath: function () {
-		var str = this.getPathString();
-		if (!str) {
-			// fix webkit empty string parsing bug
-			str = 'M0 0';
-		}
-		this._path.setAttribute('d', str);
-	},
-
-	// TODO remove duplication with L.Map
-	_initEvents: function () {
-		if (this.options.clickable) {
-			if (!L.Browser.vml) {
-				this._path.setAttribute('class', 'leaflet-clickable');
-			}
-
-			L.DomEvent.addListener(this._container, 'click', this._onMouseClick, this);
-
-			var events = ['dblclick', 'mousedown', 'mouseover', 'mouseout', 'mousemove'];
-			for (var i = 0; i < events.length; i++) {
-				L.DomEvent.addListener(this._container, events[i], this._fireMouseEvent, this);
-			}
-		}
-	},
-
-	_onMouseClick: function (e) {
-		if (this._map.dragging && this._map.dragging.moved()) {
-			return;
-		}
-		this._fireMouseEvent(e);
-	},
-
-	_fireMouseEvent: function (e) {
-		if (!this.hasEventListeners(e.type)) {
-			return;
-		}
-		this.fire(e.type, {
-			latlng: this._map.mouseEventToLatLng(e),
-			layerPoint: this._map.mouseEventToLayerPoint(e)
-		});
-		L.DomEvent.stopPropagation(e);
-	}
-});
-
-L.Map.include({
-	_initPathRoot: function () {
-		if (!this._pathRoot) {
-			this._pathRoot = L.Path._createElement('svg');
-			this._panes.overlayPane.appendChild(this._pathRoot);
-
-			this.on('moveend', this._updateSvgViewport);
-			this._updateSvgViewport();
-		}
-	},
-
-	_updateSvgViewport: function () {
-		this._updatePathViewport();
-
-		var vp = this._pathViewport,
-			min = vp.min,
-			max = vp.max,
-			width = max.x - min.x,
-			height = max.y - min.y,
-			root = this._pathRoot,
-			pane = this._panes.overlayPane;
-
-		// Hack to make flicker on drag end on mobile webkit less irritating
-		// Unfortunately I haven't found a good workaround for this yet
-		if (L.Browser.webkit) {
-			pane.removeChild(root);
-		}
-
-		L.DomUtil.setPosition(root, min);
-		root.setAttribute('width', width);
-		root.setAttribute('height', height);
-		root.setAttribute('viewBox', [min.x, min.y, width, height].join(' '));
-
-		if (L.Browser.webkit) {
-			pane.appendChild(root);
-		}
-	}
-});
-
-
-/*
- * Popup extension to L.Path (polylines, polygons, circles), adding bindPopup method.
- */
-
-L.Path.include({
-	bindPopup: function (content, options) {
-		if (!this._popup || this._popup.options !== options) {
-			this._popup = new L.Popup(options, this);
-		}
-		this._popup.setContent(content);
-
-		if (!this._openPopupAdded) {
-			this.on('click', this._openPopup, this);
-			this._openPopupAdded = true;
-		}
-
-		return this;
-	},
-
-	_openPopup: function (e) {
-		this._popup.setLatLng(e.latlng);
-		this._map.openPopup(this._popup);
-	}
-});
-
-
-/*
- * Vector rendering for IE6-8 through VML.
- * Thanks to Dmitry Baranovsky and his Raphael library for inspiration!
- */
-
-L.Browser.vml = (function () {
-	var d = document.createElement('div'), s;
-	d.innerHTML = '<v:shape adj="1"/>';
-	s = d.firstChild;
-	s.style.behavior = 'url(#default#VML)';
-
-	return (s && (typeof s.adj === 'object'));
-}());
-
-L.Path = L.Browser.svg || !L.Browser.vml ? L.Path : L.Path.extend({
-	statics: {
-		VML: true,
-		CLIP_PADDING: 0.02,
-		_createElement: (function () {
-			try {
-				document.namespaces.add('lvml', 'urn:schemas-microsoft-com:vml');
-				return function (name) {
-					return document.createElement('<lvml:' + name + ' class="lvml">');
-				};
-			} catch (e) {
-				return function (name) {
-					return document.createElement('<' + name + ' xmlns="urn:schemas-microsoft.com:vml" class="lvml">');
-				};
-			}
-		}())
-	},
-
-	_initPath: function () {
-		this._container = L.Path._createElement('shape');
-		this._container.className += ' leaflet-vml-shape' +
-				(this.options.clickable ? ' leaflet-clickable' : '');
-		this._container.coordsize = '1 1';
-
-		this._path = L.Path._createElement('path');
-		this._container.appendChild(this._path);
-
-		this._map._pathRoot.appendChild(this._container);
-	},
-
-	_initStyle: function () {
-		if (this.options.stroke) {
-			this._stroke = L.Path._createElement('stroke');
-			this._stroke.endcap = 'round';
-			this._container.appendChild(this._stroke);
-		} else {
-			this._container.stroked = false;
-		}
-		if (this.options.fill) {
-			this._container.filled = true;
-			this._fill = L.Path._createElement('fill');
-			this._container.appendChild(this._fill);
-		} else {
-			this._container.filled = false;
-		}
-		this._updateStyle();
-	},
-
-	_updateStyle: function () {
-		if (this.options.stroke) {
-			this._stroke.weight = this.options.weight + 'px';
-			this._stroke.color = this.options.color;
-			this._stroke.opacity = this.options.opacity;
-		}
-		if (this.options.fill) {
-			this._fill.color = this.options.fillColor || this.options.color;
-			this._fill.opacity = this.options.fillOpacity;
-		}
-	},
-
-	_updatePath: function () {
-		this._container.style.display = 'none';
-		this._path.v = this.getPathString() + ' '; // the space fixes IE empty path string bug
-		this._container.style.display = '';
-	}
-});
-
-L.Map.include(L.Browser.svg || !L.Browser.vml ? {} : {
-	_initPathRoot: function () {
-		if (!this._pathRoot) {
-			this._pathRoot = document.createElement('div');
-			this._pathRoot.className = 'leaflet-vml-container';
-			this._panes.overlayPane.appendChild(this._pathRoot);
-
-			this.on('moveend', this._updatePathViewport);
-			this._updatePathViewport();
-		}
-	}
-});
-
-
-/*
- * L.LineUtil contains different utility functions for line segments
- * and polylines (clipping, simplification, distances, etc.)
- */
-
-L.LineUtil = {
-
-	// Simplify polyline with vertex reduction and Douglas-Peucker simplification.
-	// Improves rendering performance dramatically by lessening the number of points to draw.
-
-	simplify: function (/*Point[]*/ points, /*Number*/ tolerance) {
-		if (!tolerance || !points.length) {
-			return points.slice();
-		}
-
-		var sqTolerance = tolerance * tolerance;
-
-		// stage 1: vertex reduction
-		points = this._reducePoints(points, sqTolerance);
-
-		// stage 2: Douglas-Peucker simplification
-		points = this._simplifyDP(points, sqTolerance);
-
-		return points;
-	},
-
-	// distance from a point to a segment between two points
-	pointToSegmentDistance:  function (/*Point*/ p, /*Point*/ p1, /*Point*/ p2) {
-		return Math.sqrt(this._sqClosestPointOnSegment(p, p1, p2, true));
-	},
-
-	closestPointOnSegment: function (/*Point*/ p, /*Point*/ p1, /*Point*/ p2) {
-		return this._sqClosestPointOnSegment(p, p1, p2);
-	},
-
-	// Douglas-Peucker simplification, see http://en.wikipedia.org/wiki/Douglas-Peucker_algorithm
-	_simplifyDP: function (points, sqTolerance) {
-
-		var len = points.length,
-			ArrayConstructor = typeof Uint8Array !== 'undefined' ? Uint8Array : Array,
-			markers = new ArrayConstructor(len);
-
-		markers[0] = markers[len - 1] = 1;
-
-		this._simplifyDPStep(points, markers, sqTolerance, 0, len - 1);
-
-		var i,
-			newPoints = [];
-
-		for (i = 0; i < len; i++) {
-			if (markers[i]) {
-				newPoints.push(points[i]);
-			}
-		}
-
-		return newPoints;
-	},
-
-	_simplifyDPStep: function (points, markers, sqTolerance, first, last) {
-
-		var maxSqDist = 0,
-			index, i, sqDist;
-
-		for (i = first + 1; i <= last - 1; i++) {
-			sqDist = this._sqClosestPointOnSegment(points[i], points[first], points[last], true);
-
-			if (sqDist > maxSqDist) {
-				index = i;
-				maxSqDist = sqDist;
-			}
-		}
-
-		if (maxSqDist > sqTolerance) {
-			markers[index] = 1;
-
-			this._simplifyDPStep(points, markers, sqTolerance, first, index);
-			this._simplifyDPStep(points, markers, sqTolerance, index, last);
-		}
-	},
-
-	// reduce points that are too close to each other to a single point
-	_reducePoints: function (points, sqTolerance) {
-		var reducedPoints = [points[0]];
-
-		for (var i = 1, prev = 0, len = points.length; i < len; i++) {
-			if (this._sqDist(points[i], points[prev]) > sqTolerance) {
-				reducedPoints.push(points[i]);
-				prev = i;
-			}
-		}
-		if (prev < len - 1) {
-			reducedPoints.push(points[len - 1]);
-		}
-		return reducedPoints;
-	},
-
-	/*jshint bitwise:false */ // temporarily allow bitwise oprations
-
-	// Cohen-Sutherland line clipping algorithm.
-	// Used to avoid rendering parts of a polyline that are not currently visible.
-
-	clipSegment: function (a, b, bounds, useLastCode) {
-		var min = bounds.min,
-			max = bounds.max;
-
-		var codeA = useLastCode ? this._lastCode : this._getBitCode(a, bounds),
-			codeB = this._getBitCode(b, bounds);
-
-		// save 2nd code to avoid calculating it on the next segment
-		this._lastCode = codeB;
-
-		while (true) {
-			// if a,b is inside the clip window (trivial accept)
-			if (!(codeA | codeB)) {
-				return [a, b];
-			// if a,b is outside the clip window (trivial reject)
-			} else if (codeA & codeB) {
-				return false;
-			// other cases
-			} else {
-				var codeOut = codeA || codeB,
-					p = this._getEdgeIntersection(a, b, codeOut, bounds),
-					newCode = this._getBitCode(p, bounds);
-
-				if (codeOut === codeA) {
-					a = p;
-					codeA = newCode;
-				} else {
-					b = p;
-					codeB = newCode;
-				}
-			}
-		}
-	},
-
-	_getEdgeIntersection: function (a, b, code, bounds) {
-		var dx = b.x - a.x,
-			dy = b.y - a.y,
-			min = bounds.min,
-			max = bounds.max;
-
-		if (code & 8) { // top
-			return new L.Point(a.x + dx * (max.y - a.y) / dy, max.y);
-		} else if (code & 4) { // bottom
-			return new L.Point(a.x + dx * (min.y - a.y) / dy, min.y);
-		} else if (code & 2) { // right
-			return new L.Point(max.x, a.y + dy * (max.x - a.x) / dx);
-		} else if (code & 1) { // left
-			return new L.Point(min.x, a.y + dy * (min.x - a.x) / dx);
-		}
-	},
-
-	_getBitCode: function (/*Point*/ p, bounds) {
-		var code = 0;
-
-		if (p.x < bounds.min.x) { // left
-			code |= 1;
-		} else if (p.x > bounds.max.x) { // right
-			code |= 2;
-		}
-		if (p.y < bounds.min.y) { // bottom
-			code |= 4;
-		} else if (p.y > bounds.max.y) { // top
-			code |= 8;
-		}
-
-		return code;
-	},
-
-	/*jshint bitwise:true */
-
-	// square distance (to avoid unnecessary Math.sqrt calls)
-	_sqDist: function (p1, p2) {
-		var dx = p2.x - p1.x,
-			dy = p2.y - p1.y;
-		return dx * dx + dy * dy;
-	},
-
-	// return closest point on segment or distance to that point
-	_sqClosestPointOnSegment: function (p, p1, p2, sqDist) {
-		var x = p1.x,
-			y = p1.y,
-			dx = p2.x - x,
-			dy = p2.y - y,
-			dot = dx * dx + dy * dy,
-			t;
-
-		if (dot > 0) {
-			t = ((p.x - x) * dx + (p.y - y) * dy) / dot;
-
-			if (t > 1) {
-				x = p2.x;
-				y = p2.y;
-			} else if (t > 0) {
-				x += dx * t;
-				y += dy * t;
-			}
-		}
-
-		dx = p.x - x;
-		dy = p.y - y;
-
-		return sqDist ? dx * dx + dy * dy : new L.Point(x, y);
-	}
-};
-
-
-
-L.Polyline = L.Path.extend({
-	initialize: function (latlngs, options) {
-		L.Path.prototype.initialize.call(this, options);
-		this._latlngs = latlngs;
-	},
-
-	options: {
-		// how much to simplify the polyline on each zoom level
-		// more = better performance and smoother look, less = more accurate
-		smoothFactor: 1.0,
-		noClip: false,
-
-		updateOnMoveEnd: true
-	},
-
-	projectLatlngs: function () {
-		this._originalPoints = [];
-
-		for (var i = 0, len = this._latlngs.length; i < len; i++) {
-			this._originalPoints[i] = this._map.latLngToLayerPoint(this._latlngs[i]);
-		}
-	},
-
-	getPathString: function () {
-		for (var i = 0, len = this._parts.length, str = ''; i < len; i++) {
-			str += this._getPathPartStr(this._parts[i]);
-		}
-		return str;
-	},
-
-	getLatLngs: function () {
-		return this._latlngs;
-	},
-
-	setLatLngs: function (latlngs) {
-		this._latlngs = latlngs;
-		this._redraw();
-		return this;
-	},
-
-	addLatLng: function (latlng) {
-		this._latlngs.push(latlng);
-		this._redraw();
-		return this;
-	},
-
-	spliceLatLngs: function (index, howMany) {
-		var removed = [].splice.apply(this._latlngs, arguments);
-		this._redraw();
-		return removed;
-	},
-
-	closestLayerPoint: function (p) {
-		var minDistance = Infinity, parts = this._parts, p1, p2, minPoint = null;
-
-		for (var j = 0, jLen = parts.length; j < jLen; j++) {
-			var points = parts[j];
-			for (var i = 1, len = points.length; i < len; i++) {
-				p1 = points[i - 1];
-				p2 = points[i];
-				var point = L.LineUtil._sqClosestPointOnSegment(p, p1, p2);
-				if (point._sqDist < minDistance) {
-					minDistance = point._sqDist;
-					minPoint = point;
-				}
-			}
-		}
-		if (minPoint) {
-			minPoint.distance = Math.sqrt(minDistance);
-		}
-		return minPoint;
-	},
-
-	getBounds: function () {
-		var b = new L.LatLngBounds();
-		var latLngs = this.getLatLngs();
-		for (var i = 0, len = latLngs.length; i < len; i++) {
-			b.extend(latLngs[i]);
-		}
-		return b;
-	},
-
-	_getPathPartStr: function (points) {
-		var round = L.Path.VML;
-
-		for (var j = 0, len2 = points.length, str = '', p; j < len2; j++) {
-			p = points[j];
-			if (round) {
-				p._round();
-			}
-			str += (j ? 'L' : 'M') + p.x + ' ' + p.y;
-		}
-		return str;
-	},
-
-	_clipPoints: function () {
-		var points = this._originalPoints,
-			len = points.length,
-			i, k, segment;
-
-		if (this.options.noClip) {
-			this._parts = [points];
-			return;
-		}
-
-		this._parts = [];
-
-		var parts = this._parts,
-			vp = this._map._pathViewport,
-			lu = L.LineUtil;
-
-		for (i = 0, k = 0; i < len - 1; i++) {
-			segment = lu.clipSegment(points[i], points[i + 1], vp, i);
-			if (!segment) {
-				continue;
-			}
-
-			parts[k] = parts[k] || [];
-			parts[k].push(segment[0]);
-
-			// if segment goes out of screen, or it's the last one, it's the end of the line part
-			if ((segment[1] !== points[i + 1]) || (i === len - 2)) {
-				parts[k].push(segment[1]);
-				k++;
-			}
-		}
-	},
-
-	// simplify each clipped part of the polyline
-	_simplifyPoints: function () {
-		var parts = this._parts,
-			lu = L.LineUtil;
-
-		for (var i = 0, len = parts.length; i < len; i++) {
-			parts[i] = lu.simplify(parts[i], this.options.smoothFactor);
-		}
-	},
-
-	_updatePath: function () {
-		this._clipPoints();
-		this._simplifyPoints();
-
-		L.Path.prototype._updatePath.call(this);
-	}
-});
-
-
-/*
- * L.PolyUtil contains utilify functions for polygons (clipping, etc.).
- */
-
-/*jshint bitwise:false */ // allow bitwise oprations here
-
-L.PolyUtil = {};
-
-/*
- * Sutherland-Hodgeman polygon clipping algorithm.
- * Used to avoid rendering parts of a polygon that are not currently visible.
- */
-L.PolyUtil.clipPolygon = function (points, bounds) {
-	var min = bounds.min,
-		max = bounds.max,
-		clippedPoints,
-		edges = [1, 4, 2, 8],
-		i, j, k,
-		a, b,
-		len, edge, p,
-		lu = L.LineUtil;
-
-	for (i = 0, len = points.length; i < len; i++) {
-		points[i]._code = lu._getBitCode(points[i], bounds);
-	}
-
-	// for each edge (left, bottom, right, top)
-	for (k = 0; k < 4; k++) {
-		edge = edges[k];
-		clippedPoints = [];
-
-		for (i = 0, len = points.length, j = len - 1; i < len; j = i++) {
-			a = points[i];
-			b = points[j];
-
-			// if a is inside the clip window
-			if (!(a._code & edge)) {
-				// if b is outside the clip window (a->b goes out of screen)
-				if (b._code & edge) {
-					p = lu._getEdgeIntersection(b, a, edge, bounds);
-					p._code = lu._getBitCode(p, bounds);
-					clippedPoints.push(p);
-				}
-				clippedPoints.push(a);
-
-			// else if b is inside the clip window (a->b enters the screen)
-			} else if (!(b._code & edge)) {
-				p = lu._getEdgeIntersection(b, a, edge, bounds);
-				p._code = lu._getBitCode(p, bounds);
-				clippedPoints.push(p);
-			}
-		}
-		points = clippedPoints;
-	}
-
-	return points;
-};
-
-/*jshint bitwise:true */
-
-
-/*
- * L.Polygon is used to display polygons on a map.
- */
-
-L.Polygon = L.Polyline.extend({
-	options: {
-		fill: true
-	},
-
-	initialize: function (latlngs, options) {
-		L.Polyline.prototype.initialize.call(this, latlngs, options);
-
-		if (latlngs && (latlngs[0] instanceof Array)) {
-			this._latlngs = latlngs[0];
-			this._holes = latlngs.slice(1);
-		}
-	},
-
-	projectLatlngs: function () {
-		L.Polyline.prototype.projectLatlngs.call(this);
-
-		// project polygon holes points
-		// TODO move this logic to Polyline to get rid of duplication
-		this._holePoints = [];
-
-		if (!this._holes) {
-			return;
-		}
-
-		for (var i = 0, len = this._holes.length, hole; i < len; i++) {
-			this._holePoints[i] = [];
-
-			for (var j = 0, len2 = this._holes[i].length; j < len2; j++) {
-				this._holePoints[i][j] = this._map.latLngToLayerPoint(this._holes[i][j]);
-			}
-		}
-	},
-
-	_clipPoints: function () {
-		var points = this._originalPoints,
-			newParts = [];
-
-		this._parts = [points].concat(this._holePoints);
-
-		if (this.options.noClip) {
-			return;
-		}
-
-		for (var i = 0, len = this._parts.length; i < len; i++) {
-			var clipped = L.PolyUtil.clipPolygon(this._parts[i], this._map._pathViewport);
-			if (!clipped.length) {
-				continue;
-			}
-			newParts.push(clipped);
-		}
-
-		this._parts = newParts;
-	},
-
-	_getPathPartStr: function (points) {
-		var str = L.Polyline.prototype._getPathPartStr.call(this, points);
-		return str + (L.Browser.svg ? 'z' : 'x');
-	}
-});
-
-
-/*
- * Contains L.MultiPolyline and L.MultiPolygon layers.
- */
-
-(function () {
-	function createMulti(Klass) {
-		return L.FeatureGroup.extend({
-			initialize: function (latlngs, options) {
-				this._layers = {};
-				this._options = options;
-				this.setLatLngs(latlngs);
-			},
-
-			setLatLngs: function (latlngs) {
-				var i = 0, len = latlngs.length;
-
-				this._iterateLayers(function (layer) {
-					if (i < len) {
-						layer.setLatLngs(latlngs[i++]);
-					} else {
-						this.removeLayer(layer);
-					}
-				}, this);
-
-				while (i < len) {
-					this.addLayer(new Klass(latlngs[i++], this._options));
-				}
-			}
-		});
-	}
-
-	L.MultiPolyline = createMulti(L.Polyline);
-	L.MultiPolygon = createMulti(L.Polygon);
-}());
-
-
-/*
- * L.Circle is a circle overlay (with a certain radius in meters).
- */
-
-L.Circle = L.Path.extend({
-	initialize: function (latlng, radius, options) {
-		L.Path.prototype.initialize.call(this, options);
-
-		this._latlng = latlng;
-		this._mRadius = radius;
-	},
-
-	options: {
-		fill: true
-	},
-
-	setLatLng: function (latlng) {
-		this._latlng = latlng;
-		this._redraw();
-		return this;
-	},
-
-	setRadius: function (radius) {
-		this._mRadius = radius;
-		this._redraw();
-		return this;
-	},
-
-	projectLatlngs: function () {
-		var equatorLength = 40075017,
-			hLength = equatorLength * Math.cos(L.LatLng.DEG_TO_RAD * this._latlng.lat);
-
-		var lngSpan = (this._mRadius / hLength) * 360,
-			latlng2 = new L.LatLng(this._latlng.lat, this._latlng.lng - lngSpan, true),
-			point2 = this._map.latLngToLayerPoint(latlng2);
-
-		this._point = this._map.latLngToLayerPoint(this._latlng);
-		this._radius = Math.round(this._point.x - point2.x);
-	},
-
-	getPathString: function () {
-		var p = this._point,
-			r = this._radius;
-
-		if (this._checkIfEmpty()) {
-			return '';
-		}
-
-		if (L.Browser.svg) {
-			return "M" + p.x + "," + (p.y - r) +
-					"A" + r + "," + r + ",0,1,1," +
-					(p.x - 0.1) + "," + (p.y - r) + " z";
-		} else {
-			p._round();
-			r = Math.round(r);
-			return "AL " + p.x + "," + p.y + " " + r + "," + r + " 0," + (65535 * 360);
-		}
-	},
-
-	_checkIfEmpty: function () {
-		var vp = this._map._pathViewport,
-			r = this._radius,
-			p = this._point;
-
-		return p.x - r > vp.max.x || p.y - r > vp.max.y ||
-			p.x + r < vp.min.x || p.y + r < vp.min.y;
-	}
-});
-
-
-/*
- * L.CircleMarker is a circle overlay with a permanent pixel radius.
- */
-
-L.CircleMarker = L.Circle.extend({
-	options: {
-		radius: 10,
-		weight: 2
-	},
-
-	initialize: function (latlng, options) {
-		L.Circle.prototype.initialize.call(this, latlng, null, options);
-		this._radius = this.options.radius;
-	},
-
-	projectLatlngs: function () {
-		this._point = this._map.latLngToLayerPoint(this._latlng);
-	},
-
-	setRadius: function (radius) {
-		this._radius = radius;
-		this._redraw();
-		return this;
-	}
-});
-
-
-/*
- * Vector rendering for all browsers that support canvas.
- */
-
-L.Browser.canvas = (function () {
-	return !!document.createElement('canvas').getContext;
-}());
-
-L.Path = (L.Path.SVG && !window.L_PREFER_CANVAS) || !L.Browser.canvas ? L.Path : L.Path.extend({
-	statics: {
-		//CLIP_PADDING: 0.02, // not sure if there's a need to set it to a small value
-		CANVAS: true,
-		SVG: false
-	},
-
-	options: {
-		updateOnMoveEnd: true
-	},
-
-	_initElements: function () {
-		this._map._initPathRoot();
-		this._ctx = this._map._canvasCtx;
-	},
-
-	_updateStyle: function () {
-		if (this.options.stroke) {
-			this._ctx.lineWidth = this.options.weight;
-			this._ctx.strokeStyle = this.options.color;
-		}
-		if (this.options.fill) {
-			this._ctx.fillStyle = this.options.fillColor || this.options.color;
-		}
-	},
-
-	_drawPath: function () {
-		var i, j, len, len2, point, drawMethod;
-
-		this._ctx.beginPath();
-
-		for (i = 0, len = this._parts.length; i < len; i++) {
-			for (j = 0, len2 = this._parts[i].length; j < len2; j++) {
-				point = this._parts[i][j];
-				drawMethod = (j === 0 ? 'move' : 'line') + 'To';
-
-				this._ctx[drawMethod](point.x, point.y);
-			}
-			// TODO refactor ugly hack
-			if (this instanceof L.Polygon) {
-				this._ctx.closePath();
-			}
-		}
-	},
-
-	_checkIfEmpty: function () {
-		return !this._parts.length;
-	},
-
-	_updatePath: function () {
-		if (this._checkIfEmpty()) {
-			return;
-		}
-
-		this._drawPath();
-
-		this._ctx.save();
-
-		this._updateStyle();
-
-		var opacity = this.options.opacity,
-			fillOpacity = this.options.fillOpacity;
-
-		if (this.options.fill) {
-			if (fillOpacity < 1) {
-				this._ctx.globalAlpha = fillOpacity;
-			}
-			this._ctx.fill();
-		}
-
-		if (this.options.stroke) {
-			if (opacity < 1) {
-				this._ctx.globalAlpha = opacity;
-			}
-			this._ctx.stroke();
-		}
-
-		this._ctx.restore();
-
-		// TODO optimization: 1 fill/stroke for all features with equal style instead of 1 for each feature
-	},
-
-	_initEvents: function () {
-		if (this.options.clickable) {
-			// TODO hand cursor
-			// TODO mouseover, mouseout, dblclick
-			this._map.on('click', this._onClick, this);
-		}
-	},
-
-	_onClick: function (e) {
-		if (this._containsPoint(e.layerPoint)) {
-			this.fire('click', e);
-		}
-	},
-
-    onRemove: function (map) {
-        map.off('viewreset', this._projectLatlngs, this);
-        map.off(this._updateTrigger, this._updatePath, this);
-        map.fire(this._updateTrigger);
-    }
-});
-
-L.Map.include((L.Path.SVG && !window.L_PREFER_CANVAS) || !L.Browser.canvas ? {} : {
-	_initPathRoot: function () {
-		var root = this._pathRoot,
-			ctx;
-
-		if (!root) {
-			root = this._pathRoot = document.createElement("canvas");
-			root.style.position = 'absolute';
-			ctx = this._canvasCtx = root.getContext('2d');
-
-			ctx.lineCap = "round";
-			ctx.lineJoin = "round";
-
-			this._panes.overlayPane.appendChild(root);
-
-			this.on('moveend', this._updateCanvasViewport);
-			this._updateCanvasViewport();
-		}
-	},
-
-	_updateCanvasViewport: function () {
-		this._updatePathViewport();
-
-		var vp = this._pathViewport,
-			min = vp.min,
-			size = vp.max.subtract(min),
-			root = this._pathRoot;
-
-		//TODO check if it's works properly on mobile webkit
-		L.DomUtil.setPosition(root, min);
-		root.width = size.x;
-		root.height = size.y;
-		root.getContext('2d').translate(-min.x, -min.y);
-	}
-});
-
-
-
-L.Polyline.include(!L.Path.CANVAS ? {} : {
-	_containsPoint: function (p, closed) {
-		var i, j, k, len, len2, dist, part,
-			w = this.options.weight / 2;
-
-		if (L.Browser.touch) {
-			w += 10; // polyline click tolerance on touch devices
-		}
-
-		for (i = 0, len = this._parts.length; i < len; i++) {
-			part = this._parts[i];
-			for (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {
-				if (!closed && (j === 0)) {
-					continue;
-				}
-
-				dist = L.LineUtil.pointToSegmentDistance(p, part[k], part[j]);
-
-				if (dist <= w) {
-					return true;
-				}
-			}
-		}
-		return false;
-	}
-});
-
-
-
-L.Polygon.include(!L.Path.CANVAS ? {} : {
-	_containsPoint: function (p) {
-		var inside = false,
-			part, p1, p2,
-			i, j, k,
-			len, len2;
-
-		// TODO optimization: check if within bounds first
-
-		if (L.Polyline.prototype._containsPoint.call(this, p, true)) {
-			// click on polygon border
-			return true;
-		}
-
-		// ray casting algorithm for detecting if point is in polygon
-
-		for (i = 0, len = this._parts.length; i < len; i++) {
-			part = this._parts[i];
-
-			for (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {
-				p1 = part[j];
-				p2 = part[k];
-
-				if (((p1.y > p.y) !== (p2.y > p.y)) &&
-						(p.x < (p2.x - p1.x) * (p.y - p1.y) / (p2.y - p1.y) + p1.x)) {
-					inside = !inside;
-				}
-			}
-		}
-
-		return inside;
-	}
-});
-
-
-/*
- * Circle canvas specific drawing parts.
- */
-
-L.Circle.include(!L.Path.CANVAS ? {} : {
-	_drawPath: function () {
-		var p = this._point;
-		this._ctx.beginPath();
-		this._ctx.arc(p.x, p.y, this._radius, 0, Math.PI * 2);
-	},
-
-	_containsPoint: function (p) {
-		var center = this._point,
-			w2 = this.options.stroke ? this.options.weight / 2 : 0;
-
-		return (p.distanceTo(center) <= this._radius + w2);
-	}
-});
-
-
-
-L.GeoJSON = L.FeatureGroup.extend({
-	initialize: function (geojson, options) {
-		L.Util.setOptions(this, options);
-		this._geojson = geojson;
-		this._layers = {};
-
-		if (geojson) {
-			this.addGeoJSON(geojson);
-		}
-	},
-
-	addGeoJSON: function (geojson) {
-		if (geojson.features) {
-			for (var i = 0, len = geojson.features.length; i < len; i++) {
-				this.addGeoJSON(geojson.features[i]);
-			}
-			return;
-		}
-
-		var isFeature = (geojson.type === 'Feature'),
-			geometry = (isFeature ? geojson.geometry : geojson),
-			layer = L.GeoJSON.geometryToLayer(geometry, this.options.pointToLayer);
-
-		this.fire('featureparse', {
-			layer: layer,
-			properties: geojson.properties,
-			geometryType: geometry.type,
-			bbox: geojson.bbox,
-			id: geojson.id
-		});
-
-		this.addLayer(layer);
-	}
-});
-
-L.Util.extend(L.GeoJSON, {
-	geometryToLayer: function (geometry, pointToLayer) {
-		var coords = geometry.coordinates,
-			latlng, latlngs,
-			i, len,
-			layer,
-			layers = [];
-
-		switch (geometry.type) {
-		case 'Point':
-			latlng = this.coordsToLatLng(coords);
-			return pointToLayer ? pointToLayer(latlng) : new L.Marker(latlng);
-
-		case 'MultiPoint':
-			for (i = 0, len = coords.length; i < len; i++) {
-				latlng = this.coordsToLatLng(coords[i]);
-				layer = pointToLayer ? pointToLayer(latlng) : new L.Marker(latlng);
-				layers.push(layer);
-			}
-			return new L.FeatureGroup(layers);
-
-		case 'LineString':
-			latlngs = this.coordsToLatLngs(coords);
-			return new L.Polyline(latlngs);
-
-		case 'Polygon':
-			latlngs = this.coordsToLatLngs(coords, 1);
-			return new L.Polygon(latlngs);
-
-		case 'MultiLineString':
-			latlngs = this.coordsToLatLngs(coords, 1);
-			return new L.MultiPolyline(latlngs);
-
-		case "MultiPolygon":
-			latlngs = this.coordsToLatLngs(coords, 2);
-			return new L.MultiPolygon(latlngs);
-
-		case "GeometryCollection":
-			for (i = 0, len = geometry.geometries.length; i < len; i++) {
-				layer = this.geometryToLayer(geometry.geometries[i], pointToLayer);
-				layers.push(layer);
-			}
-			return new L.FeatureGroup(layers);
-
-		default:
-			throw new Error('Invalid GeoJSON object.');
-		}
-	},
-
-	coordsToLatLng: function (/*Array*/ coords, /*Boolean*/ reverse)/*: LatLng*/ {
-		var lat = parseFloat(coords[reverse ? 0 : 1]),
-			lng = parseFloat(coords[reverse ? 1 : 0]);
-		return new L.LatLng(lat, lng, true);
-	},
-
-	coordsToLatLngs: function (/*Array*/ coords, /*Number*/ levelsDeep, /*Boolean*/ reverse)/*: Array*/ {
-		var latlng, latlngs = [],
-			i, len = coords.length;
-
-		for (i = 0; i < len; i++) {
-			latlng = levelsDeep ?
-					this.coordsToLatLngs(coords[i], levelsDeep - 1, reverse) :
-					this.coordsToLatLng(coords[i], reverse);
-			latlngs.push(latlng);
-		}
-		return latlngs;
-	}
-});
-
-
-/*
- * L.DomEvent contains functions for working with DOM events.
- */
-
-L.DomEvent = {
-	/* inpired by John Resig, Dean Edwards and YUI addEvent implementations */
-	addListener: function (/*HTMLElement*/ obj, /*String*/ type, /*Function*/ fn, /*Object*/ context) {
-		var id = L.Util.stamp(fn),
-			key = '_leaflet_' + type + id;
-
-		if (obj[key]) {
-			return;
-		}
-
-		var handler = function (e) {
-			return fn.call(context || obj, e || L.DomEvent._getEvent());
-		};
-
-		if (L.Browser.touch && (type === 'dblclick') && this.addDoubleTapListener) {
-			this.addDoubleTapListener(obj, handler, id);
-		} else if ('addEventListener' in obj) {
-			if (type === 'mousewheel') {
-				obj.addEventListener('DOMMouseScroll', handler, false);
-				obj.addEventListener(type, handler, false);
-			} else if ((type === 'mouseenter') || (type === 'mouseleave')) {
-				var originalHandler = handler,
-					newType = (type === 'mouseenter' ? 'mouseover' : 'mouseout');
-				handler = function (e) {
-					if (!L.DomEvent._checkMouse(obj, e)) {
-						return;
-					}
-					return originalHandler(e);
-				};
-				obj.addEventListener(newType, handler, false);
-			} else {
-				obj.addEventListener(type, handler, false);
-			}
-		} else if ('attachEvent' in obj) {
-			obj.attachEvent("on" + type, handler);
-		}
-
-		obj[key] = handler;
-	},
-
-	removeListener: function (/*HTMLElement*/ obj, /*String*/ type, /*Function*/ fn) {
-		var id = L.Util.stamp(fn),
-			key = '_leaflet_' + type + id,
-			handler = obj[key];
-
-		if (!handler) {
-			return;
-		}
-
-		if (L.Browser.touch && (type === 'dblclick') && this.removeDoubleTapListener) {
-			this.removeDoubleTapListener(obj, id);
-		} else if ('removeEventListener' in obj) {
-			if (type === 'mousewheel') {
-				obj.removeEventListener('DOMMouseScroll', handler, false);
-				obj.removeEventListener(type, handler, false);
-			} else if ((type === 'mouseenter') || (type === 'mouseleave')) {
-				obj.removeEventListener((type === 'mouseenter' ? 'mouseover' : 'mouseout'), handler, false);
-			} else {
-				obj.removeEventListener(type, handler, false);
-			}
-		} else if ('detachEvent' in obj) {
-			obj.detachEvent("on" + type, handler);
-		}
-		obj[key] = null;
-	},
-
-	_checkMouse: function (el, e) {
-		var related = e.relatedTarget;
-
-		if (!related) {
-			return true;
-		}
-
-		try {
-			while (related && (related !== el)) {
-				related = related.parentNode;
-			}
-		} catch (err) {
-			return false;
-		}
-
-		return (related !== el);
-	},
-
-	/*jshint noarg:false */ // evil magic for IE
-	_getEvent: function () {
-		var e = window.event;
-		if (!e) {
-			var caller = arguments.callee.caller;
-			while (caller) {
-				e = caller['arguments'][0];
-				if (e && window.Event === e.constructor) {
-					break;
-				}
-				caller = caller.caller;
-			}
-		}
-		return e;
-	},
-	/*jshint noarg:false */
-
-	stopPropagation: function (/*Event*/ e) {
-		if (e.stopPropagation) {
-			e.stopPropagation();
-		} else {
-			e.cancelBubble = true;
-		}
-	},
-
-	disableClickPropagation: function (/*HTMLElement*/ el) {
-		L.DomEvent.addListener(el, L.Draggable.START, L.DomEvent.stopPropagation);
-		L.DomEvent.addListener(el, 'click', L.DomEvent.stopPropagation);
-		L.DomEvent.addListener(el, 'dblclick', L.DomEvent.stopPropagation);
-	},
-
-	preventDefault: function (/*Event*/ e) {
-		if (e.preventDefault) {
-			e.preventDefault();
-		} else {
-			e.returnValue = false;
-		}
-	},
-
-	stop: function (e) {
-		L.DomEvent.preventDefault(e);
-		L.DomEvent.stopPropagation(e);
-	},
-
-	getMousePosition: function (e, container) {
-		var x = e.pageX ? e.pageX : e.clientX +
-				document.body.scrollLeft + document.documentElement.scrollLeft,
-			y = e.pageY ? e.pageY : e.clientY +
-					document.body.scrollTop + document.documentElement.scrollTop,
-			pos = new L.Point(x, y);
-		return (container ?
-					pos.subtract(L.DomUtil.getViewportOffset(container)) : pos);
-	},
-
-	getWheelDelta: function (e) {
-		var delta = 0;
-		if (e.wheelDelta) {
-			delta = e.wheelDelta / 120;
-		}
-		if (e.detail) {
-			delta = -e.detail / 3;
-		}
-		return delta;
-	}
-};
-
-
-
-/*
- * L.Draggable allows you to add dragging capabilities to any element. Supports mobile devices too.
- */
-
-L.Draggable = L.Class.extend({
-	includes: L.Mixin.Events,
-
-	statics: {
-		START: L.Browser.touch ? 'touchstart' : 'mousedown',
-		END: L.Browser.touch ? 'touchend' : 'mouseup',
-		MOVE: L.Browser.touch ? 'touchmove' : 'mousemove',
-		TAP_TOLERANCE: 15
-	},
-
-	initialize: function (element, dragStartTarget) {
-		this._element = element;
-		this._dragStartTarget = dragStartTarget || element;
-	},
-
-	enable: function () {
-		if (this._enabled) {
-			return;
-		}
-		L.DomEvent.addListener(this._dragStartTarget, L.Draggable.START, this._onDown, this);
-		this._enabled = true;
-	},
-
-	disable: function () {
-		if (!this._enabled) {
-			return;
-		}
-		L.DomEvent.removeListener(this._dragStartTarget, L.Draggable.START, this._onDown);
-		this._enabled = false;
-	},
-
-	_onDown: function (e) {
-		if ((!L.Browser.touch && e.shiftKey) || ((e.which !== 1) && (e.button !== 1) && !e.touches)) {
-			return;
-		}
-
-		if (e.touches && e.touches.length > 1) {
-			return;
-		}
-
-		var first = (e.touches && e.touches.length === 1 ? e.touches[0] : e),
-			el = first.target;
-
-		L.DomEvent.preventDefault(e);
-
-		if (L.Browser.touch && el.tagName.toLowerCase() === 'a') {
-			el.className += ' leaflet-active';
-		}
-
-		this._moved = false;
-		if (this._moving) {
-			return;
-		}
-
-		if (!L.Browser.touch) {
-			L.DomUtil.disableTextSelection();
-			this._setMovingCursor();
-		}
-
-		this._startPos = this._newPos = L.DomUtil.getPosition(this._element);
-		this._startPoint = new L.Point(first.clientX, first.clientY);
-
-		L.DomEvent.addListener(document, L.Draggable.MOVE, this._onMove, this);
-		L.DomEvent.addListener(document, L.Draggable.END, this._onUp, this);
-	},
-
-	_onMove: function (e) {
-		if (e.touches && e.touches.length > 1) {
-			return;
-		}
-
-		L.DomEvent.preventDefault(e);
-
-		var first = (e.touches && e.touches.length === 1 ? e.touches[0] : e);
-
-		if (!this._moved) {
-			this.fire('dragstart');
-			this._moved = true;
-		}
-		this._moving = true;
-
-		var newPoint = new L.Point(first.clientX, first.clientY);
-		this._newPos = this._startPos.add(newPoint).subtract(this._startPoint);
-
-		L.Util.requestAnimFrame(this._updatePosition, this, true, this._dragStartTarget);
-	},
-
-	_updatePosition: function () {
-		this.fire('predrag');
-		L.DomUtil.setPosition(this._element, this._newPos);
-		this.fire('drag');
-	},
-
-	_onUp: function (e) {
-		if (e.changedTouches) {
-			var first = e.changedTouches[0],
-				el = first.target,
-				dist = (this._newPos && this._newPos.distanceTo(this._startPos)) || 0;
-
-			if (el.tagName.toLowerCase() === 'a') {
-				el.className = el.className.replace(' leaflet-active', '');
-			}
-
-			if (dist < L.Draggable.TAP_TOLERANCE) {
-				this._simulateEvent('click', first);
-			}
-		}
-
-		if (!L.Browser.touch) {
-			L.DomUtil.enableTextSelection();
-			this._restoreCursor();
-		}
-
-		L.DomEvent.removeListener(document, L.Draggable.MOVE, this._onMove);
-		L.DomEvent.removeListener(document, L.Draggable.END, this._onUp);
-
-		if (this._moved) {
-			this.fire('dragend');
-		}
-		this._moving = false;
-	},
-
-	_setMovingCursor: function () {
-		this._bodyCursor = document.body.style.cursor;
-		document.body.style.cursor = 'move';
-	},
-
-	_restoreCursor: function () {
-		document.body.style.cursor = this._bodyCursor;
-	},
-
-	_simulateEvent: function (type, e) {
-		var simulatedEvent = document.createEvent('MouseEvents');
-
-		simulatedEvent.initMouseEvent(
-				type, true, true, window, 1,
-				e.screenX, e.screenY,
-				e.clientX, e.clientY,
-				false, false, false, false, 0, null);
-
-		e.target.dispatchEvent(simulatedEvent);
-	}
-});
-
-
-/*
- * L.Handler classes are used internally to inject interaction features to classes like Map and Marker.
- */
-
-L.Handler = L.Class.extend({
-	initialize: function (map) {
-		this._map = map;
-	},
-
-	enable: function () {
-		if (this._enabled) {
-			return;
-		}
-		this._enabled = true;
-		this.addHooks();
-	},
-
-	disable: function () {
-		if (!this._enabled) {
-			return;
-		}
-		this._enabled = false;
-		this.removeHooks();
-	},
-
-	enabled: function () {
-		return !!this._enabled;
-	}
-});
-
-
-/*
- * L.Handler.MapDrag is used internally by L.Map to make the map draggable.
- */
-
-L.Map.Drag = L.Handler.extend({
-	addHooks: function () {
-		if (!this._draggable) {
-			this._draggable = new L.Draggable(this._map._mapPane, this._map._container);
-
-			this._draggable
-				.on('dragstart', this._onDragStart, this)
-				.on('drag', this._onDrag, this)
-				.on('dragend', this._onDragEnd, this);
-
-			var options = this._map.options;
-
-			if (options.worldCopyJump && !options.continuousWorld) {
-				this._draggable.on('predrag', this._onPreDrag, this);
-				this._map.on('viewreset', this._onViewReset, this);
-			}
-		}
-		this._draggable.enable();
-	},
-
-	removeHooks: function () {
-		this._draggable.disable();
-	},
-
-	moved: function () {
-		return this._draggable && this._draggable._moved;
-	},
-
-	_onDragStart: function () {
-		this._map
-			.fire('movestart')
-			.fire('dragstart');
-	},
-
-	_onDrag: function () {
-		this._map
-			.fire('move')
-			.fire('drag');
-	},
-
-	_onViewReset: function () {
-		var pxCenter = this._map.getSize().divideBy(2),
-			pxWorldCenter = this._map.latLngToLayerPoint(new L.LatLng(0, 0));
-
-		this._initialWorldOffset = pxWorldCenter.subtract(pxCenter);
-	},
-
-	_onPreDrag: function () {
-		var map = this._map,
-			worldWidth = map.options.scale(map.getZoom()),
-			halfWidth = Math.round(worldWidth / 2),
-			dx = this._initialWorldOffset.x,
-			x = this._draggable._newPos.x,
-			newX1 = (x - halfWidth + dx) % worldWidth + halfWidth - dx,
-			newX2 = (x + halfWidth + dx) % worldWidth - halfWidth - dx,
-			newX = Math.abs(newX1 + dx) < Math.abs(newX2 + dx) ? newX1 : newX2;
-
-		this._draggable._newPos.x = newX;
-	},
-
-	_onDragEnd: function () {
-		var map = this._map;
-
-		map
-			.fire('moveend')
-			.fire('dragend');
-
-		if (map.options.maxBounds) {
-			// TODO predrag validation instead of animation
-			L.Util.requestAnimFrame(this._panInsideMaxBounds, map, true, map._container);
-		}
-	},
-
-	_panInsideMaxBounds: function () {
-		this.panInsideBounds(this.options.maxBounds);
-	}
-});
-
-
-/*
- * L.Handler.DoubleClickZoom is used internally by L.Map to add double-click zooming.
- */
-
-L.Map.DoubleClickZoom = L.Handler.extend({
-	addHooks: function () {
-		this._map.on('dblclick', this._onDoubleClick);
-		// TODO remove 3d argument?
-	},
-
-	removeHooks: function () {
-		this._map.off('dblclick', this._onDoubleClick);
-	},
-
-	_onDoubleClick: function (e) {
-		this.setView(e.latlng, this._zoom + 1);
-	}
-});
-
-
-/*
- * L.Handler.ScrollWheelZoom is used internally by L.Map to enable mouse scroll wheel zooming on the map.
- */
-
-L.Map.ScrollWheelZoom = L.Handler.extend({
-	addHooks: function () {
-		L.DomEvent.addListener(this._map._container, 'mousewheel', this._onWheelScroll, this);
-		this._delta = 0;
-	},
-
-	removeHooks: function () {
-		L.DomEvent.removeListener(this._map._container, 'mousewheel', this._onWheelScroll);
-	},
-
-	_onWheelScroll: function (e) {
-		var delta = L.DomEvent.getWheelDelta(e);
-		this._delta += delta;
-		this._lastMousePos = this._map.mouseEventToContainerPoint(e);
-
-		clearTimeout(this._timer);
-		this._timer = setTimeout(L.Util.bind(this._performZoom, this), 50);
-
-		L.DomEvent.preventDefault(e);
-	},
-
-	_performZoom: function () {
-		var map = this._map,
-			delta = Math.round(this._delta),
-			zoom = map.getZoom();
-
-		delta = Math.max(Math.min(delta, 4), -4);
-		delta = map._limitZoom(zoom + delta) - zoom;
-
-		this._delta = 0;
-
-		if (!delta) {
-			return;
-		}
-
-		var newCenter = this._getCenterForScrollWheelZoom(this._lastMousePos, delta),
-			newZoom = zoom + delta;
-
-		map.setView(newCenter, newZoom);
-	},
-
-	_getCenterForScrollWheelZoom: function (mousePos, delta) {
-		var map = this._map,
-			centerPoint = map.getPixelBounds().getCenter(),
-			viewHalf = map.getSize().divideBy(2),
-			centerOffset = mousePos.subtract(viewHalf).multiplyBy(1 - Math.pow(2, -delta)),
-			newCenterPoint = centerPoint.add(centerOffset);
-
-		return map.unproject(newCenterPoint, map._zoom, true);
-	}
-});
-
-
-L.Util.extend(L.DomEvent, {
-	// inspired by Zepto touch code by Thomas Fuchs
-	addDoubleTapListener: function (obj, handler, id) {
-		var last,
-			doubleTap = false,
-			delay = 250,
-			touch,
-			pre = '_leaflet_',
-			touchstart = 'touchstart',
-			touchend = 'touchend';
-
-		function onTouchStart(e) {
-			if (e.touches.length !== 1) {
-				return;
-			}
-
-			var now = Date.now(),
-				delta = now - (last || now);
-
-			touch = e.touches[0];
-			doubleTap = (delta > 0 && delta <= delay);
-			last = now;
-		}
-		function onTouchEnd(e) {
-			if (doubleTap) {
-				touch.type = 'dblclick';
-				handler(touch);
-				last = null;
-			}
-		}
-		obj[pre + touchstart + id] = onTouchStart;
-		obj[pre + touchend + id] = onTouchEnd;
-
-		obj.addEventListener(touchstart, onTouchStart, false);
-		obj.addEventListener(touchend, onTouchEnd, false);
-	},
-
-	removeDoubleTapListener: function (obj, id) {
-		var pre = '_leaflet_';
-		obj.removeEventListener(obj, obj[pre + 'touchstart' + id], false);
-		obj.removeEventListener(obj, obj[pre + 'touchend' + id], false);
-	}
-});
-
-
-/*
- * L.Handler.TouchZoom is used internally by L.Map to add touch-zooming on Webkit-powered mobile browsers.
- */
-
-L.Map.TouchZoom = L.Handler.extend({
-	addHooks: function () {
-		L.DomEvent.addListener(this._map._container, 'touchstart', this._onTouchStart, this);
-	},
-
-	removeHooks: function () {
-		L.DomEvent.removeListener(this._map._container, 'touchstart', this._onTouchStart, this);
-	},
-
-	_onTouchStart: function (e) {
-		if (!e.touches || e.touches.length !== 2 || this._map._animatingZoom) {
-			return;
-		}
-
-		var p1 = this._map.mouseEventToLayerPoint(e.touches[0]),
-			p2 = this._map.mouseEventToLayerPoint(e.touches[1]),
-			viewCenter = this._map.containerPointToLayerPoint(this._map.getSize().divideBy(2));
-
-		this._startCenter = p1.add(p2).divideBy(2, true);
-		this._startDist = p1.distanceTo(p2);
-		//this._startTransform = this._map._mapPane.style.webkitTransform;
-
-		this._moved = false;
-		this._zooming = true;
-
-		this._centerOffset = viewCenter.subtract(this._startCenter);
-
-		L.DomEvent.addListener(document, 'touchmove', this._onTouchMove, this);
-		L.DomEvent.addListener(document, 'touchend', this._onTouchEnd, this);
-
-		L.DomEvent.preventDefault(e);
-	},
-
-	_onTouchMove: function (e) {
-		if (!e.touches || e.touches.length !== 2) {
-			return;
-		}
-
-		if (!this._moved) {
-			this._map._mapPane.className += ' leaflet-zoom-anim';
-
-			this._map
-				.fire('zoomstart')
-				.fire('movestart')
-				._prepareTileBg();
-
-			this._moved = true;
-		}
-
-		var p1 = this._map.mouseEventToLayerPoint(e.touches[0]),
-			p2 = this._map.mouseEventToLayerPoint(e.touches[1]);
-
-		this._scale = p1.distanceTo(p2) / this._startDist;
-		this._delta = p1.add(p2).divideBy(2, true).subtract(this._startCenter);
-
-		// Used 2 translates instead of transform-origin because of a very strange bug -
-		// it didn't count the origin on the first touch-zoom but worked correctly afterwards
-
-		this._map._tileBg.style.webkitTransform = [
-            L.DomUtil.getTranslateString(this._delta),
-            L.DomUtil.getScaleString(this._scale, this._startCenter)
-        ].join(" ");
-
-		L.DomEvent.preventDefault(e);
-	},
-
-	_onTouchEnd: function (e) {
-		if (!this._moved || !this._zooming) {
-			return;
-		}
-		this._zooming = false;
-
-		var oldZoom = this._map.getZoom(),
-			floatZoomDelta = Math.log(this._scale) / Math.LN2,
-			roundZoomDelta = (floatZoomDelta > 0 ? Math.ceil(floatZoomDelta) : Math.floor(floatZoomDelta)),
-			zoom = this._map._limitZoom(oldZoom + roundZoomDelta),
-			zoomDelta = zoom - oldZoom,
-			centerOffset = this._centerOffset.subtract(this._delta).divideBy(this._scale),
-			centerPoint = this._map.getPixelOrigin().add(this._startCenter).add(centerOffset),
-			center = this._map.unproject(centerPoint);
-
-		L.DomEvent.removeListener(document, 'touchmove', this._onTouchMove);
-		L.DomEvent.removeListener(document, 'touchend', this._onTouchEnd);
-
-		var finalScale = Math.pow(2, zoomDelta);
-
-		this._map._runAnimation(center, zoom, finalScale / this._scale, this._startCenter.add(centerOffset));
-	}
-});
-
-
-/*
- * L.Handler.ShiftDragZoom is used internally by L.Map to add shift-drag zoom (zoom to a selected bounding box).
- */
-
-L.Map.BoxZoom = L.Handler.extend({
-	initialize: function (map) {
-		this._map = map;
-		this._container = map._container;
-		this._pane = map._panes.overlayPane;
-	},
-
-	addHooks: function () {
-		L.DomEvent.addListener(this._container, 'mousedown', this._onMouseDown, this);
-	},
-
-	removeHooks: function () {
-		L.DomEvent.removeListener(this._container, 'mousedown', this._onMouseDown);
-	},
-
-	_onMouseDown: function (e) {
-		if (!e.shiftKey || ((e.which !== 1) && (e.button !== 1))) {
-			return false;
-		}
-
-		L.DomUtil.disableTextSelection();
-
-		this._startLayerPoint = this._map.mouseEventToLayerPoint(e);
-
-		this._box = L.DomUtil.create('div', 'leaflet-zoom-box', this._pane);
-		L.DomUtil.setPosition(this._box, this._startLayerPoint);
-
-		//TODO move cursor to styles
-		this._container.style.cursor = 'crosshair';
-
-		L.DomEvent.addListener(document, 'mousemove', this._onMouseMove, this);
-		L.DomEvent.addListener(document, 'mouseup', this._onMouseUp, this);
-
-		L.DomEvent.preventDefault(e);
-	},
-
-	_onMouseMove: function (e) {
-		var layerPoint = this._map.mouseEventToLayerPoint(e),
-			dx = layerPoint.x - this._startLayerPoint.x,
-			dy = layerPoint.y - this._startLayerPoint.y;
-
-		var newX = Math.min(layerPoint.x, this._startLayerPoint.x),
-			newY = Math.min(layerPoint.y, this._startLayerPoint.y),
-			newPos = new L.Point(newX, newY);
-
-		L.DomUtil.setPosition(this._box, newPos);
-
-		this._box.style.width = (Math.abs(dx) - 4) + 'px';
-		this._box.style.height = (Math.abs(dy) - 4) + 'px';
-	},
-
-	_onMouseUp: function (e) {
-		this._pane.removeChild(this._box);
-		this._container.style.cursor = '';
-
-		L.DomUtil.enableTextSelection();
-
-		L.DomEvent.removeListener(document, 'mousemove', this._onMouseMove);
-		L.DomEvent.removeListener(document, 'mouseup', this._onMouseUp);
-
-		var layerPoint = this._map.mouseEventToLayerPoint(e);
-
-		var bounds = new L.LatLngBounds(
-				this._map.layerPointToLatLng(this._startLayerPoint),
-				this._map.layerPointToLatLng(layerPoint));
-
-		this._map.fitBounds(bounds);
-	}
-});
-
-
-/*
- * L.Handler.MarkerDrag is used internally by L.Marker to make the markers draggable.
- */
-
-L.Handler.MarkerDrag = L.Handler.extend({
-	initialize: function (marker) {
-		this._marker = marker;
-	},
-
-	addHooks: function () {
-		var icon = this._marker._icon;
-		if (!this._draggable) {
-			this._draggable = new L.Draggable(icon, icon);
-
-			this._draggable
-				.on('dragstart', this._onDragStart, this)
-				.on('drag', this._onDrag, this)
-				.on('dragend', this._onDragEnd, this);
-		}
-		this._draggable.enable();
-	},
-
-	removeHooks: function () {
-		this._draggable.disable();
-	},
-
-	moved: function () {
-		return this._draggable && this._draggable._moved;
-	},
-
-	_onDragStart: function (e) {
-		this._marker
-			.closePopup()
-			.fire('movestart')
-			.fire('dragstart');
-	},
-
-	_onDrag: function (e) {
-		// update shadow position
-		var iconPos = L.DomUtil.getPosition(this._marker._icon);
-		if (this._marker._shadow) {
-			L.DomUtil.setPosition(this._marker._shadow, iconPos);
-		}
-
-		this._marker._latlng = this._marker._map.layerPointToLatLng(iconPos);
-
-		this._marker
-			.fire('move')
-			.fire('drag');
-	},
-
-	_onDragEnd: function () {
-		this._marker
-			.fire('moveend')
-			.fire('dragend');
-	}
-});
-
-
-
-L.Control = {};
-
-L.Control.Position = {
-	TOP_LEFT: 'topLeft',
-	TOP_RIGHT: 'topRight',
-	BOTTOM_LEFT: 'bottomLeft',
-	BOTTOM_RIGHT: 'bottomRight'
-};
-
-
-L.Map.include({
-	addControl: function (control) {
-		control.onAdd(this);
-
-		var pos = control.getPosition(),
-			corner = this._controlCorners[pos],
-			container = control.getContainer();
-
-		L.DomUtil.addClass(container, 'leaflet-control');
-
-		if (pos.indexOf('bottom') !== -1) {
-			corner.insertBefore(container, corner.firstChild);
-		} else {
-			corner.appendChild(container);
-		}
-		return this;
-	},
-
-	removeControl: function (control) {
-		var pos = control.getPosition(),
-			corner = this._controlCorners[pos],
-			container = control.getContainer();
-
-		corner.removeChild(container);
-
-		if (control.onRemove) {
-			control.onRemove(this);
-		}
-		return this;
-	},
-
-	_initControlPos: function () {
-		var corners = this._controlCorners = {},
-			classPart = 'leaflet-',
-			top = classPart + 'top',
-			bottom = classPart + 'bottom',
-			left = classPart + 'left',
-			right = classPart + 'right',
-			controlContainer = L.DomUtil.create('div', classPart + 'control-container', this._container);
-
-		if (L.Browser.touch) {
-			controlContainer.className += ' ' + classPart + 'big-buttons';
-		}
-
-		corners.topLeft = L.DomUtil.create('div', top + ' ' + left, controlContainer);
-		corners.topRight = L.DomUtil.create('div', top + ' ' + right, controlContainer);
-		corners.bottomLeft = L.DomUtil.create('div', bottom + ' ' + left, controlContainer);
-		corners.bottomRight = L.DomUtil.create('div', bottom + ' ' + right, controlContainer);
-	}
-});
-
-
-
-L.Control.Zoom = L.Class.extend({
-	onAdd: function (map) {
-		this._map = map;
-		this._container = L.DomUtil.create('div', 'leaflet-control-zoom');
-
-		this._zoomInButton = this._createButton(
-				'Zoom in', 'leaflet-control-zoom-in', this._map.zoomIn, this._map);
-		this._zoomOutButton = this._createButton(
-				'Zoom out', 'leaflet-control-zoom-out', this._map.zoomOut, this._map);
-
-		this._container.appendChild(this._zoomInButton);
-		this._container.appendChild(this._zoomOutButton);
-	},
-
-	getContainer: function () {
-		return this._container;
-	},
-
-	getPosition: function () {
-		return L.Control.Position.TOP_LEFT;
-	},
-
-	_createButton: function (title, className, fn, context) {
-		var link = document.createElement('a');
-		link.href = '#';
-		link.title = title;
-		link.className = className;
-
-		L.DomEvent.disableClickPropagation(link);
-		L.DomEvent.addListener(link, 'click', L.DomEvent.preventDefault);
-		L.DomEvent.addListener(link, 'click', fn, context);
-
-		return link;
-	}
-});
-
-
-L.Control.Attribution = L.Class.extend({
-	initialize: function (prefix) {
-		this._prefix = prefix || 'Powered by <a href="http://leaflet.cloudmade.com">Leaflet</a>';
-		this._attributions = {};
-	},
-	
-	onAdd: function (map) {
-		this._container = L.DomUtil.create('div', 'leaflet-control-attribution');
-		L.DomEvent.disableClickPropagation(this._container);
-		this._map = map;
-		this._update();
-	},
-
-	getPosition: function () {
-		return L.Control.Position.BOTTOM_RIGHT;
-	},
-
-	getContainer: function () {
-		return this._container;
-	},
-
-	setPrefix: function (prefix) {
-		this._prefix = prefix;
-		this._update();
-	},
-
-	addAttribution: function (text) {
-		if (!text) {
-			return;
-		}
-		this._attributions[text] = true;
-		this._update();
-	},
-
-	removeAttribution: function (text) {
-		if (!text) {
-			return;
-		}
-		delete this._attributions[text];
-		this._update();
-	},
-
-	_update: function () {
-		if (!this._map) {
-			return;
-		}
-
-		var attribs = [];
-
-		for (var i in this._attributions) {
-			if (this._attributions.hasOwnProperty(i)) {
-				attribs.push(i);
-			}
-		}
-
-		var prefixAndAttribs = [];
-		if (this._prefix) {
-			prefixAndAttribs.push(this._prefix);
-		}
-		if (attribs.length) {
-			prefixAndAttribs.push(attribs.join(', '));
-		}
-
-		this._container.innerHTML = prefixAndAttribs.join(' &mdash; ');
-	}
-});
-
-
-
-L.Control.Layers = L.Class.extend({
-	options: {
-		collapsed: !L.Browser.touch
-	},
-
-	initialize: function (baseLayers, overlays, options) {
-		L.Util.setOptions(this, options);
-
-		this._layers = {};
-
-		for (var i in baseLayers) {
-			if (baseLayers.hasOwnProperty(i)) {
-				this._addLayer(baseLayers[i], i);
-			}
-		}
-
-		for (i in overlays) {
-			if (overlays.hasOwnProperty(i)) {
-				this._addLayer(overlays[i], i, true);
-			}
-		}
-	},
-
-	onAdd: function (map) {
-		this._map = map;
-
-		this._initLayout();
-		this._update();
-	},
-
-	getContainer: function () {
-		return this._container;
-	},
-
-	getPosition: function () {
-		return L.Control.Position.TOP_RIGHT;
-	},
-
-	addBaseLayer: function (layer, name) {
-		this._addLayer(layer, name);
-		this._update();
-		return this;
-	},
-
-	addOverlay: function (layer, name) {
-		this._addLayer(layer, name, true);
-		this._update();
-		return this;
-	},
-
-	removeLayer: function (layer) {
-		var id = L.Util.stamp(layer);
-		delete this._layers[id];
-		this._update();
-		return this;
-	},
-
-	_initLayout: function () {
-		this._container = L.DomUtil.create('div', 'leaflet-control-layers');
-		L.DomEvent.disableClickPropagation(this._container);
-
-		this._form = L.DomUtil.create('form', 'leaflet-control-layers-list');
-
-		if (this.options.collapsed) {
-			L.DomEvent.addListener(this._container, 'mouseover', this._expand, this);
-			L.DomEvent.addListener(this._container, 'mouseout', this._collapse, this);
-
-			var link = this._layersLink = L.DomUtil.create('a', 'leaflet-control-layers-toggle');
-			link.href = '#';
-			link.title = 'Layers';
-
-			L.DomEvent.addListener(link, 'focus', this._expand, this);
-			L.DomEvent.addListener(this._map, L.Draggable.START, this._collapse, this);
-			// TODO keyboard accessibility
-
-			this._container.appendChild(link);
-		} else {
-			this._expand();
-		}
-
-		this._baseLayersList = L.DomUtil.create('div', 'leaflet-control-layers-base', this._form);
-		this._separator = L.DomUtil.create('div', 'leaflet-control-layers-separator', this._form);
-		this._overlaysList = L.DomUtil.create('div', 'leaflet-control-layers-overlays', this._form);
-
-		this._container.appendChild(this._form);
-	},
-
-	_addLayer: function (layer, name, overlay) {
-		var id = L.Util.stamp(layer);
-		this._layers[id] = {
-			layer: layer,
-			name: name,
-			overlay: overlay
-		};
-	},
-
-	_update: function () {
-		if (!this._container) {
-			return;
-		}
-
-		this._baseLayersList.innerHTML = '';
-		this._overlaysList.innerHTML = '';
-
-		var baseLayersPresent = false,
-			overlaysPresent = false;
-
-		for (var i in this._layers) {
-			if (this._layers.hasOwnProperty(i)) {
-				var obj = this._layers[i];
-				this._addItem(obj);
-				overlaysPresent = overlaysPresent || obj.overlay;
-				baseLayersPresent = baseLayersPresent || !obj.overlay;
-			}
-		}
-
-		this._separator.style.display = (overlaysPresent && baseLayersPresent ? '' : 'none');
-	},
-
-	_addItem: function (obj, onclick) {
-		var label = document.createElement('label');
-
-		var input = document.createElement('input');
-		if (!obj.overlay) {
-			input.name = 'leaflet-base-layers';
-		}
-		input.type = obj.overlay ? 'checkbox' : 'radio';
-		input.checked = this._map.hasLayer(obj.layer);
-		input.layerId = L.Util.stamp(obj.layer);
-
-		L.DomEvent.addListener(input, 'click', this._onInputClick, this);
-
-		var name = document.createTextNode(' ' + obj.name);
-
-		label.appendChild(input);
-		label.appendChild(name);
-
-		var container = obj.overlay ? this._overlaysList : this._baseLayersList;
-		container.appendChild(label);
-	},
-
-	_onInputClick: function () {
-		var i, input, obj,
-			inputs = this._form.getElementsByTagName('input'),
-			inputsLen = inputs.length;
-
-		for (i = 0; i < inputsLen; i++) {
-			input = inputs[i];
-			obj = this._layers[input.layerId];
-
-			if (input.checked) {
-				this._map.addLayer(obj.layer, !obj.overlay);
-			} else {
-				this._map.removeLayer(obj.layer);
-			}
-		}
-	},
-
-	_expand: function () {
-		L.DomUtil.addClass(this._container, 'leaflet-control-layers-expanded');
-	},
-
-	_collapse: function () {
-		this._container.className = this._container.className.replace(' leaflet-control-layers-expanded', '');
-	}
-});
-
-
-L.Transition = L.Class.extend({
-	includes: L.Mixin.Events,
-
-	statics: {
-		CUSTOM_PROPS_SETTERS: {
-			position: L.DomUtil.setPosition
-			//TODO transform custom attr
-		},
-
-		implemented: function () {
-			return L.Transition.NATIVE || L.Transition.TIMER;
-		}
-	},
-
-	options: {
-		easing: 'ease',
-		duration: 0.5
-	},
-
-	_setProperty: function (prop, value) {
-		var setters = L.Transition.CUSTOM_PROPS_SETTERS;
-		if (prop in setters) {
-			setters[prop](this._el, value);
-		} else {
-			this._el.style[prop] = value;
-		}
-	}
-});
-
-
-/*
- * L.Transition native implementation that powers Leaflet animation
- * in browsers that support CSS3 Transitions
- */
-
-L.Transition = L.Transition.extend({
-	statics: (function () {
-		var transition = L.DomUtil.TRANSITION,
-			transitionEnd = (transition === 'webkitTransition' || transition === 'OTransition' ?
-				transition + 'End' : 'transitionend');
-
-		return {
-			NATIVE: !!transition,
-
-			TRANSITION: transition,
-			PROPERTY: transition + 'Property',
-			DURATION: transition + 'Duration',
-			EASING: transition + 'TimingFunction',
-			END: transitionEnd,
-
-			// transition-property value to use with each particular custom property
-			CUSTOM_PROPS_PROPERTIES: {
-				position: L.Browser.webkit ? L.DomUtil.TRANSFORM : 'top, left'
-			}
-		};
-	}()),
-
-	options: {
-		fakeStepInterval: 100
-	},
-
-	initialize: function (/*HTMLElement*/ el, /*Object*/ options) {
-		this._el = el;
-		L.Util.setOptions(this, options);
-
-		L.DomEvent.addListener(el, L.Transition.END, this._onTransitionEnd, this);
-		this._onFakeStep = L.Util.bind(this._onFakeStep, this);
-	},
-
-	run: function (/*Object*/ props) {
-		var prop,
-			propsList = [],
-			customProp = L.Transition.CUSTOM_PROPS_PROPERTIES;
-
-		for (prop in props) {
-			if (props.hasOwnProperty(prop)) {
-				prop = customProp[prop] ? customProp[prop] : prop;
-				prop = this._dasherize(prop);
-				propsList.push(prop);
-			}
-		}
-
-		this._el.style[L.Transition.DURATION] = this.options.duration + 's';
-		this._el.style[L.Transition.EASING] = this.options.easing;
-		this._el.style[L.Transition.PROPERTY] = propsList.join(', ');
-
-		for (prop in props) {
-			if (props.hasOwnProperty(prop)) {
-				this._setProperty(prop, props[prop]);
-			}
-		}
-
-		this._inProgress = true;
-
-		this.fire('start');
-
-		if (L.Transition.NATIVE) {
-			clearInterval(this._timer);
-			this._timer = setInterval(this._onFakeStep, this.options.fakeStepInterval);
-		} else {
-			this._onTransitionEnd();
-		}
-	},
-
-	_dasherize: (function () {
-		var re = /([A-Z])/g;
-
-		function replaceFn(w) {
-			return '-' + w.toLowerCase();
-		}
-
-		return function (str) {
-			return str.replace(re, replaceFn);
-		};
-	}()),
-
-	_onFakeStep: function () {
-		this.fire('step');
-	},
-
-	_onTransitionEnd: function () {
-		if (this._inProgress) {
-			this._inProgress = false;
-			clearInterval(this._timer);
-
-			this._el.style[L.Transition.PROPERTY] = 'none';
-
-			this.fire('step');
-			this.fire('end');
-		}
-	}
-});
-
-
-/*
- * L.Transition fallback implementation that powers Leaflet animation
- * in browsers that don't support CSS3 Transitions
- */
-
-L.Transition = L.Transition.NATIVE ? L.Transition : L.Transition.extend({
-	statics: {
-		getTime: Date.now || function () {
-			return +new Date();
-		},
-
-		TIMER: true,
-
-		EASINGS: {
-			'ease': [0.25, 0.1, 0.25, 1.0],
-			'linear': [0.0, 0.0, 1.0, 1.0],
-			'ease-in': [0.42, 0, 1.0, 1.0],
-			'ease-out': [0, 0, 0.58, 1.0],
-			'ease-in-out': [0.42, 0, 0.58, 1.0]
-		},
-
-		CUSTOM_PROPS_GETTERS: {
-			position: L.DomUtil.getPosition
-		},
-
-		//used to get units from strings like "10.5px" (->px)
-		UNIT_RE: /^[\d\.]+(\D*)$/
-	},
-
-	options: {
-		fps: 50
-	},
-
-	initialize: function (el, options) {
-		this._el = el;
-		L.Util.extend(this.options, options);
-
-		var easings = L.Transition.EASINGS[this.options.easing] || L.Transition.EASINGS.ease;
-
-		this._p1 = new L.Point(0, 0);
-		this._p2 = new L.Point(easings[0], easings[1]);
-		this._p3 = new L.Point(easings[2], easings[3]);
-		this._p4 = new L.Point(1, 1);
-
-		this._step = L.Util.bind(this._step, this);
-		this._interval = Math.round(1000 / this.options.fps);
-	},
-
-	run: function (props) {
-		this._props = {};
-
-		var getters = L.Transition.CUSTOM_PROPS_GETTERS,
-			re = L.Transition.UNIT_RE;
-
-		this.fire('start');
-
-		for (var prop in props) {
-			if (props.hasOwnProperty(prop)) {
-				var p = {};
-				if (prop in getters) {
-					p.from = getters[prop](this._el);
-				} else {
-					var matches = this._el.style[prop].match(re);
-					p.from = parseFloat(matches[0]);
-					p.unit = matches[1];
-				}
-				p.to = props[prop];
-				this._props[prop] = p;
-			}
-		}
-
-		clearInterval(this._timer);
-		this._timer = setInterval(this._step, this._interval);
-		this._startTime = L.Transition.getTime();
-	},
-
-	_step: function () {
-		var time = L.Transition.getTime(),
-			elapsed = time - this._startTime,
-			duration = this.options.duration * 1000;
-
-		if (elapsed < duration) {
-			this._runFrame(this._cubicBezier(elapsed / duration));
-		} else {
-			this._runFrame(1);
-			this._complete();
-		}
-	},
-
-	_runFrame: function (percentComplete) {
-		var setters = L.Transition.CUSTOM_PROPS_SETTERS,
-			prop, p, value;
-
-		for (prop in this._props) {
-			if (this._props.hasOwnProperty(prop)) {
-				p = this._props[prop];
-				if (prop in setters) {
-					value = p.to.subtract(p.from).multiplyBy(percentComplete).add(p.from);
-					setters[prop](this._el, value);
-				} else {
-					this._el.style[prop] =
-							((p.to - p.from) * percentComplete + p.from) + p.unit;
-				}
-			}
-		}
-		this.fire('step');
-	},
-
-	_complete: function () {
-		clearInterval(this._timer);
-		this.fire('end');
-	},
-
-	_cubicBezier: function (t) {
-		var a = Math.pow(1 - t, 3),
-			b = 3 * Math.pow(1 - t, 2) * t,
-			c = 3 * (1 - t) * Math.pow(t, 2),
-			d = Math.pow(t, 3),
-			p1 = this._p1.multiplyBy(a),
-			p2 = this._p2.multiplyBy(b),
-			p3 = this._p3.multiplyBy(c),
-			p4 = this._p4.multiplyBy(d);
-
-		return p1.add(p2).add(p3).add(p4).y;
-	}
-});
-
-
-L.Map.include(!(L.Transition && L.Transition.implemented()) ? {} : {
-	setView: function (center, zoom, forceReset) {
-		zoom = this._limitZoom(zoom);
-		var zoomChanged = (this._zoom !== zoom);
-
-		if (this._loaded && !forceReset && this._layers) {
-			// difference between the new and current centers in pixels
-			var offset = this._getNewTopLeftPoint(center).subtract(this._getTopLeftPoint());
-
-			center = new L.LatLng(center.lat, center.lng);
-
-			var done = (zoomChanged ?
-						!!this._zoomToIfCenterInView && this._zoomToIfCenterInView(center, zoom, offset) :
-						this._panByIfClose(offset));
-
-			// exit if animated pan or zoom started
-			if (done) {
-				return this;
-			}
-		}
-
-		// reset the map view
-		this._resetView(center, zoom);
-
-		return this;
-	},
-
-	panBy: function (offset) {
-		if (!(offset.x || offset.y)) {
-			return this;
-		}
-
-		if (!this._panTransition) {
-			this._panTransition = new L.Transition(this._mapPane, {duration: 0.3});
-
-			this._panTransition.on('step', this._onPanTransitionStep, this);
-			this._panTransition.on('end', this._onPanTransitionEnd, this);
-		}
-		this.fire('movestart');
-
-		this._panTransition.run({
-			position: L.DomUtil.getPosition(this._mapPane).subtract(offset)
-		});
-
-		return this;
-	},
-
-	_onPanTransitionStep: function () {
-		this.fire('move');
-	},
-
-	_onPanTransitionEnd: function () {
-		this.fire('moveend');
-	},
-
-	_panByIfClose: function (offset) {
-		if (this._offsetIsWithinView(offset)) {
-			this.panBy(offset);
-			return true;
-		}
-		return false;
-	},
-
-	_offsetIsWithinView: function (offset, multiplyFactor) {
-		var m = multiplyFactor || 1,
-			size = this.getSize();
-		return (Math.abs(offset.x) <= size.x * m) &&
-				(Math.abs(offset.y) <= size.y * m);
-	}
-});
-
-
-L.Map.include(!L.DomUtil.TRANSITION ? {} : {
-	_zoomToIfCenterInView: function (center, zoom, centerOffset) {
-
-		if (this._animatingZoom) {
-			return true;
-		}
-		if (!this.options.zoomAnimation) {
-			return false;
-		}
-
-		var zoomDelta = zoom - this._zoom,
-			scale = Math.pow(2, zoomDelta),
-			offset = centerOffset.divideBy(1 - 1 / scale);
-
-		//if offset does not exceed half of the view
-		if (!this._offsetIsWithinView(offset, 1)) {
-			return false;
-		}
-
-		this._mapPane.className += ' leaflet-zoom-anim';
-
-        this
-			.fire('movestart')
-			.fire('zoomstart');
-
-		var centerPoint = this.containerPointToLayerPoint(this.getSize().divideBy(2)),
-			origin = centerPoint.add(offset);
-
-		this._prepareTileBg();
-
-		this._runAnimation(center, zoom, scale, origin);
-
-		return true;
-	},
-
-
-	_runAnimation: function (center, zoom, scale, origin) {
-		this._animatingZoom = true;
-
-		this._animateToCenter = center;
-		this._animateToZoom = zoom;
-
-		var transform = L.DomUtil.TRANSFORM;
-
-		//dumb FireFox hack, I have no idea why this magic zero translate fixes the scale transition problem
-		if (L.Browser.gecko || window.opera) {
-			this._tileBg.style[transform] += ' translate(0,0)';
-		}
-
-		var scaleStr;
-
-		// Android doesn't like translate/scale chains, transformOrigin + scale works better but
-		// it breaks touch zoom which Anroid doesn't support anyway, so that's a really ugly hack
-		// TODO work around this prettier
-		if (L.Browser.android) {
-			this._tileBg.style[transform + 'Origin'] = origin.x + 'px ' + origin.y + 'px';
-			scaleStr = 'scale(' + scale + ')';
-		} else {
-			scaleStr = L.DomUtil.getScaleString(scale, origin);
-		}
-
-		L.Util.falseFn(this._tileBg.offsetWidth); //hack to make sure transform is updated before running animation
-
-		var options = {};
-		options[transform] = this._tileBg.style[transform] + ' ' + scaleStr;
-		this._tileBg.transition.run(options);
-	},
-
-	_prepareTileBg: function () {
-		if (!this._tileBg) {
-			this._tileBg = this._createPane('leaflet-tile-pane', this._mapPane);
-			this._tileBg.style.zIndex = 1;
-		}
-
-		var tilePane = this._tilePane,
-			tileBg = this._tileBg;
-
-		// prepare the background pane to become the main tile pane
-		//tileBg.innerHTML = '';
-		tileBg.style[L.DomUtil.TRANSFORM] = '';
-		tileBg.style.visibility = 'hidden';
-
-		// tells tile layers to reinitialize their containers
-		tileBg.empty = true;
-		tilePane.empty = false;
-
-		this._tilePane = this._panes.tilePane = tileBg;
-		this._tileBg = tilePane;
-
-		if (!this._tileBg.transition) {
-			this._tileBg.transition = new L.Transition(this._tileBg, {duration: 0.3, easing: 'cubic-bezier(0.25,0.1,0.25,0.75)'});
-			this._tileBg.transition.on('end', this._onZoomTransitionEnd, this);
-		}
-
-		this._stopLoadingBgTiles();
-	},
-
-	// stops loading all tiles in the background layer
-	_stopLoadingBgTiles: function () {
-		var tiles = [].slice.call(this._tileBg.getElementsByTagName('img'));
-
-		for (var i = 0, len = tiles.length; i < len; i++) {
-			if (!tiles[i].complete) {
-				// tiles[i].src = '' - evil, doesn't cancel the request!
-				tiles[i].parentNode.removeChild(tiles[i]);
-				tiles[i] = null;
-			}
-		}
-	},
-
-	_onZoomTransitionEnd: function () {
-		this._restoreTileFront();
-
-		L.Util.falseFn(this._tileBg.offsetWidth);
-		this._resetView(this._animateToCenter, this._animateToZoom, true, true);
-
-		this._mapPane.className = this._mapPane.className.replace(' leaflet-zoom-anim', ''); //TODO toggleClass util
-		this._animatingZoom = false;
-	},
-
-	_restoreTileFront: function () {
-		this._tilePane.innerHTML = '';
-		this._tilePane.style.visibility = '';
-		this._tilePane.style.zIndex = 2;
-		this._tileBg.style.zIndex = 1;
-	},
-
-	_clearTileBg: function () {
-		if (!this._animatingZoom && !this.touchZoom._zooming) {
-			this._tileBg.innerHTML = '';
-		}
-	}
-});
-
-
-/*
- * Provides L.Map with convenient shortcuts for W3C geolocation.
- */
-
-L.Map.include({
-	locate: function (/*Object*/ options) {
-
-		this._locationOptions = options = L.Util.extend({
-			watch: false,
-			setView: false,
-			maxZoom: Infinity,
-			timeout: 10000,
-			maximumAge: 0,
-			enableHighAccuracy: false
-		}, options);
-
-		if (!navigator.geolocation) {
-			return this.fire('locationerror', {
-				code: 0,
-				message: "Geolocation not supported."
-			});
-		}
-
-		var onResponse = L.Util.bind(this._handleGeolocationResponse, this),
-			onError = L.Util.bind(this._handleGeolocationError, this);
-
-		if (options.watch) {
-			this._locationWatchId = navigator.geolocation.watchPosition(onResponse, onError, options);
-		} else {
-			navigator.geolocation.getCurrentPosition(onResponse, onError, options);
-		}
-		return this;
-	},
-
-	stopLocate: function () {
-		if (navigator.geolocation) {
-			navigator.geolocation.clearWatch(this._locationWatchId);
-		}
-	},
-
-	locateAndSetView: function (maxZoom, options) {
-		options = L.Util.extend({
-			maxZoom: maxZoom || Infinity,
-			setView: true
-		}, options);
-		return this.locate(options);
-	},
-
-	_handleGeolocationError: function (error) {
-		var c = error.code,
-			message = (c === 1 ? "permission denied" :
-				(c === 2 ? "position unavailable" : "timeout"));
-
-		if (this._locationOptions.setView && !this._loaded) {
-			this.fitWorld();
-		}
-
-		this.fire('locationerror', {
-			code: c,
-			message: "Geolocation error: " + message + "."
-		});
-	},
-
-	_handleGeolocationResponse: function (pos) {
-		var latAccuracy = 180 * pos.coords.accuracy / 4e7,
-			lngAccuracy = latAccuracy * 2,
-			lat = pos.coords.latitude,
-			lng = pos.coords.longitude,
-			latlng = new L.LatLng(lat, lng);
-
-		var sw = new L.LatLng(lat - latAccuracy, lng - lngAccuracy),
-			ne = new L.LatLng(lat + latAccuracy, lng + lngAccuracy),
-			bounds = new L.LatLngBounds(sw, ne);
-
-		if (this._locationOptions.setView) {
-			var zoom = Math.min(this.getBoundsZoom(bounds), this._locationOptions.maxZoom);
-			this.setView(latlng, zoom);
-		}
-
-		this.fire('locationfound', {
-			latlng: latlng,
-			bounds: bounds,
-			accuracy: pos.coords.accuracy
-		});
-	}
-});
-
-
--- a/web/hdalab/static/hdalab/lib/leaflet/leaflet.css	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,323 +0,0 @@
-/* required styles */
-
-.leaflet-map-pane,
-.leaflet-tile,
-.leaflet-marker-icon,
-.leaflet-marker-shadow,
-.leaflet-tile-pane,
-.leaflet-overlay-pane,
-.leaflet-shadow-pane,
-.leaflet-marker-pane,
-.leaflet-popup-pane,
-.leaflet-overlay-pane svg,
-.leaflet-zoom-box,
-.leaflet-image-layer { /* TODO optimize classes */
-	position: absolute;
-	}
-.leaflet-container {
-	overflow: hidden;
-	}
-.leaflet-tile-pane {
-	-webkit-transform: translate3d(0,0,0);
-	}
-.leaflet-tile,
-.leaflet-marker-icon,
-.leaflet-marker-shadow {
-	-moz-user-select: none;
-	-webkit-user-select: none;
-	user-select: none;
-	}
-.leaflet-marker-icon,
-.leaflet-marker-shadow {
-	display: block;
-	}
-.leaflet-clickable {
-	cursor: pointer;
-	}
-.leaflet-container img {
-	max-width: none !important;
-	}
-
-.leaflet-tile-pane { z-index: 2; }
-
-.leaflet-objects-pane { z-index: 3; }
-.leaflet-overlay-pane { z-index: 4; }
-.leaflet-shadow-pane { z-index: 5; }
-.leaflet-marker-pane { z-index: 6; }
-.leaflet-popup-pane { z-index: 7; }
-
-.leaflet-zoom-box {
-	width: 0;
-	height: 0;
-	}
-
-.leaflet-tile {
-	visibility: hidden;
-	}
-.leaflet-tile-loaded {
-	visibility: inherit;
-	}
-
-a.leaflet-active {
-	outline: 2px solid orange;
-	}
-
-
-/* Leaflet controls */
-
-.leaflet-control {
-	position: relative;
-	z-index: 7;
-	}
-.leaflet-top,
-.leaflet-bottom {
-	position: absolute;
-	}
-.leaflet-top {
-	top: 0;
-	}
-.leaflet-right {
-	right: 0;
-	}
-.leaflet-bottom {
-	bottom: 0;
-	}
-.leaflet-left {
-	left: 0;
-	}
-.leaflet-control {
-	float: left;
-	clear: both;
-	}
-.leaflet-right .leaflet-control {
-	float: right;
-	}
-.leaflet-top .leaflet-control {
-	margin-top: 10px;
-	}
-.leaflet-bottom .leaflet-control {
-	margin-bottom: 10px;
-	}
-.leaflet-left .leaflet-control {
-	margin-left: 10px;
-	}
-.leaflet-right .leaflet-control {
-	margin-right: 10px;
-	}
-
-.leaflet-control-zoom, .leaflet-control-layers {
-	-moz-border-radius: 7px;
-	-webkit-border-radius: 7px;
-	border-radius: 7px;
-	}
-.leaflet-control-zoom {
-	padding: 5px;
-	background: rgba(0, 0, 0, 0.25);
-	}
-.leaflet-control-zoom a {
-	background-color: rgba(255, 255, 255, 0.75);
-	}
-.leaflet-control-zoom a, .leaflet-control-layers a {
-	background-position: 50% 50%;
-	background-repeat: no-repeat;
-	display: block;
-	}
-.leaflet-control-zoom a {
-	-moz-border-radius: 4px;
-	-webkit-border-radius: 4px;
-	border-radius: 4px;
-	width: 19px;
-	height: 19px;
-	}
-.leaflet-control-zoom a:hover {
-	background-color: #fff;
-	}
-.leaflet-big-buttons .leaflet-control-zoom a {
-	width: 27px;
-	height: 27px;
-	}
-.leaflet-control-zoom-in {
-	background-image: url(images/zoom-in.png);
-	margin-bottom: 5px;
-	}
-.leaflet-control-zoom-out {
-	background-image: url(images/zoom-out.png);
-	}
-
-.leaflet-control-layers {
-	-moz-box-shadow: 0 0 7px #999;
-	-webkit-box-shadow: 0 0 7px #999;
-	box-shadow: 0 0 7px #999;
-
-	background: #f8f8f9;
-	}
-.leaflet-control-layers a {
-	background-image: url(images/layers.png);
-	width: 36px;
-	height: 36px;
-	}
-.leaflet-big-buttons .leaflet-control-layers a {
-	width: 44px;
-	height: 44px;
-	}
-.leaflet-control-layers .leaflet-control-layers-list,
-.leaflet-control-layers-expanded .leaflet-control-layers-toggle {
-	display: none;
-	}
-.leaflet-control-layers-expanded .leaflet-control-layers-list {
-	display: block;
-	position: relative;
-	}
-.leaflet-control-layers-expanded {
-	padding: 6px 10px 6px 6px;
-	font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;
-	color: #333;
-	background: #fff;
-	}
-.leaflet-control-layers input {
-	margin-top: 2px;
-	position: relative;
-	top: 1px;
-	}
-.leaflet-control-layers label {
-	display: block;
-	}
-.leaflet-control-layers-separator {
-	height: 0;
-	border-top: 1px solid #ddd;
-	margin: 5px -10px 5px -6px;
-	}
-
-.leaflet-container .leaflet-control-attribution {
-	margin: 0;
-	padding: 0 5px;
-
-	font: 11px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;
-	color: #333;
-
-	background-color: rgba(255, 255, 255, 0.7);
-
-	-moz-box-shadow: 0 0 7px #ccc;
-	-webkit-box-shadow: 0 0 7px #ccc;
-	box-shadow: 0 0 7px #ccc;
-	}
-
-
-/* Fade animations */
-
-.leaflet-fade-anim .leaflet-tile {
-	opacity: 0;
-
-	-webkit-transition: opacity 0.2s linear;
-	-moz-transition: opacity 0.2s linear;
-	-o-transition: opacity 0.2s linear;
-	transition: opacity 0.2s linear;
-	}
-.leaflet-fade-anim .leaflet-tile-loaded {
-	opacity: 1;
-	}
-
-.leaflet-fade-anim .leaflet-popup {
-	opacity: 0;
-
-	-webkit-transition: opacity 0.2s linear;
-	-moz-transition: opacity 0.2s linear;
-	-o-transition: opacity 0.2s linear;
-	transition: opacity 0.2s linear;
-	}
-.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
-	opacity: 1;
-	}
-
-.leaflet-zoom-anim .leaflet-tile {
-	-webkit-transition: none;
-	-moz-transition: none;
-	-o-transition: none;
-	transition: none;
-	}
-
-.leaflet-zoom-anim .leaflet-objects-pane {
-	visibility: hidden;
-	}
-
-
-/* Popup layout */
-
-.leaflet-popup {
-	position: absolute;
-	text-align: center;
-	-webkit-transform: translate3d(0,0,0);
-	}
-.leaflet-popup-content-wrapper {
-	padding: 1px;
-	text-align: left;
-	}
-.leaflet-popup-content {
-	margin: 19px;
-	}
-.leaflet-popup-tip-container {
-	margin: 0 auto;
-	width: 40px;
-	height: 16px;
-	position: relative;
-	overflow: hidden;
-	}
-.leaflet-popup-tip {
-	width: 15px;
-	height: 15px;
-	padding: 1px;
-
-	margin: -8px auto 0;
-
-	-moz-transform: rotate(45deg);
-	-webkit-transform: rotate(45deg);
-	-ms-transform: rotate(45deg);
-	-o-transform: rotate(45deg);
-	transform: rotate(45deg);
-	}
-.leaflet-popup-close-button {
-	position: absolute;
-	top: 9px;
-	right: 9px;
-
-	width: 10px;
-	height: 10px;
-
-	overflow: hidden;
-	}
-.leaflet-popup-content p {
-	margin: 18px 0;
-	}
-
-
-/* Visual appearance */
-
-.leaflet-container {
-	background: #ddd;
-	}
-.leaflet-container a {
-	color: #0078A8;
-	}
-.leaflet-zoom-box {
-	border: 2px dotted #05f;
-	background: white;
-	opacity: 0.5;
-	}
-.leaflet-popup-content-wrapper, .leaflet-popup-tip {
-	background: white;
-
-	box-shadow: 0 1px 10px #888;
-	-moz-box-shadow: 0 1px 10px #888;
-	 -webkit-box-shadow: 0 1px 14px #999;
-	}
-.leaflet-popup-content-wrapper {
-	-moz-border-radius: 20px;
-	-webkit-border-radius: 20px;
-	border-radius: 20px;
-	}
-.leaflet-popup-content {
-	font: 12px/1.4 "Helvetica Neue", Arial, Helvetica, sans-serif;
-	}
-.leaflet-popup-close-button {
-	background: white url(images/popup-close.png);
-	}
\ No newline at end of file
--- a/web/hdalab/static/hdalab/lib/leaflet/leaflet.ie.css	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-.leaflet-tile {
-	filter: inherit;
-	}
-
-.leaflet-vml-shape {
-	width: 1px;
-	height: 1px;
-	}
-.lvml {
-	behavior: url(#default#VML); 
-	display: inline-block; 
-	position: absolute;
-	}
-	
-.leaflet-control {
-	display: inline;
-	}
-
-.leaflet-popup-tip {
-	width: 21px;
-	_width: 27px;
-	margin: 0 auto;
-	_margin-top: -3px;
-	
-	filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);
-	-ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";
-	}
-.leaflet-popup-tip-container {
-	margin-top: -1px;
-	}
-.leaflet-popup-content-wrapper, .leaflet-popup-tip {
-	border: 1px solid #bbb;
-	}
-
-.leaflet-control-zoom {
-	filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#3F000000',EndColorStr='#3F000000');
-	}
-.leaflet-control-zoom a {
-	background-color: #eee;
-	}
-.leaflet-control-zoom a:hover {
-	background-color: #fff;
-	}
-.leaflet-control-layers-toggle {
-	}
-.leaflet-control-attribution, .leaflet-control-layers {
-	background: white;
-	}
\ No newline at end of file
--- a/web/hdalab/static/hdalab/lib/leaflet/leaflet.js	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-/*
- Copyright (c) 2010-2011, CloudMade, Vladimir Agafonkin
- Leaflet is a modern open-source JavaScript library for interactive maps.
- http://leaflet.cloudmade.com
-*/
-(function(a){a.L={VERSION:"0.3",ROOT_URL:a.L_ROOT_URL||function(){var a=document.getElementsByTagName("script"),b=/\/?leaflet[\-\._]?([\w\-\._]*)\.js\??/,c,d,e,f;for(c=0,d=a.length;c<d;c++){e=a[c].src,f=e.match(b);if(f)return f[1]==="include"?"../../dist/":e.replace(b,"")+"/"}return""}(),noConflict:function(){return a.L=this._originalL,this},_originalL:a.L}})(this),L.Util={extend:function(a){var b=Array.prototype.slice.call(arguments,1);for(var c=0,d=b.length,e;c<d;c++){e=b[c]||{};for(var f in e)e.hasOwnProperty(f)&&(a[f]=e[f])}return a},bind:function(a,b){return function(){return a.apply(b,arguments)}},stamp:function(){var a=0,b="_leaflet_id";return function(c){return c[b]=c[b]||++a,c[b]}}(),requestAnimFrame:function(){function a(a){window.setTimeout(a,1e3/60)}var b=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||a;return function(c,d,e,f){c=d?L.Util.bind(c,d):c,e&&b===a?c():b(c,f)}}(),limitExecByInterval:function(a,b,c){function g(){d=!1,e&&(f.callee.apply(c,f),e=!1)}var d,e,f;return function(){f=arguments,d?e=!0:(d=!0,setTimeout(g,b),a.apply(c,f))}},falseFn:function(){return!1},formatNum:function(a,b){var c=Math.pow(10,b||5);return Math.round(a*c)/c},setOptions:function(a,b){a.options=L.Util.extend({},a.options,b)},getParamString:function(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(c+"="+a[c]);return"?"+b.join("&")},template:function(a,b){return a.replace(/\{ *([\w_]+) *\}/g,function(a,c){var d=b[c];if(!b.hasOwnProperty(c))throw Error("No value provided for variable "+a);return d})}},L.Class=function(){},L.Class.extend=function(a){var b=function(){this.initialize&&this.initialize.apply(this,arguments)},c=function(){};c.prototype=this.prototype;var d=new c;d.constructor=b,b.prototype=d,b.superclass=this.prototype;for(var e in this)this.hasOwnProperty(e)&&e!=="prototype"&&e!=="superclass"&&(b[e]=this[e]);return a.statics&&(L.Util.extend(b,a.statics),delete a.statics),a.includes&&(L.Util.extend.apply(null,[d].concat(a.includes)),delete a.includes),a.options&&d.options&&(a.options=L.Util.extend({},d.options,a.options)),L.Util.extend(d,a),b.extend=L.Class.extend,b.include=function(a){L.Util.extend(this.prototype,a)},b},L.Mixin={},L.Mixin.Events={addEventListener:function(a,b,c){var d=this._leaflet_events=this._leaflet_events||{};return d[a]=d[a]||[],d[a].push({action:b,context:c||this}),this},hasEventListeners:function(a){var b="_leaflet_events";return b in this&&a in this[b]&&this[b][a].length>0},removeEventListener:function(a,b,c){if(!this.hasEventListeners(a))return this;for(var d=0,e=this._leaflet_events,f=e[a].length;d<f;d++)if(e[a][d].action===b&&(!c||e[a][d].context===c))return e[a].splice(d,1),this;return this},fireEvent:function(a,b){if(!this.hasEventListeners(a))return this;var c=L.Util.extend({type:a,target:this},b),d=this._leaflet_events[a].slice();for(var e=0,f=d.length;e<f;e++)d[e].action.call(d[e].context||this,c);return this}},L.Mixin.Events.on=L.Mixin.Events.addEventListener,L.Mixin.Events.off=L.Mixin.Events.removeEventListener,L.Mixin.Events.fire=L.Mixin.Events.fireEvent,function(){var a=navigator.userAgent.toLowerCase(),b=!!window.ActiveXObject,c=a.indexOf("webkit")!==-1,d=typeof orientation!="undefined"?!0:!1,e=a.indexOf("android")!==-1,f=window.opera;L.Browser={ie:b,ie6:b&&!window.XMLHttpRequest,webkit:c,webkit3d:c&&"WebKitCSSMatrix"in window&&"m11"in new window.WebKitCSSMatrix,gecko:a.indexOf("gecko")!==-1,opera:f,android:e,mobileWebkit:d&&c,mobileOpera:d&&f,mobile:d,touch:function(){var a=!1,b="ontouchstart";if(b in document.documentElement)return!0;var c=document.createElement("div");return!c.setAttribute||!c.removeAttribute?!1:(c.setAttribute(b,"return;"),typeof c[b]=="function"&&(a=!0),c.removeAttribute(b),c=null,a)}()}}(),L.Point=function(a,b,c){this.x=c?Math.round(a):a,this.y=c?Math.round(b):b},L.Point.prototype={add:function(a){return this.clone()._add(a)},_add:function(a){return this.x+=a.x,this.y+=a.y,this},subtract:function(a){return this.clone()._subtract(a)},_subtract:function(a){return this.x-=a.x,this.y-=a.y,this},divideBy:function(a,b){return new L.Point(this.x/a,this.y/a,b)},multiplyBy:function(a){return new L.Point(this.x*a,this.y*a)},distanceTo:function(a){var b=a.x-this.x,c=a.y-this.y;return Math.sqrt(b*b+c*c)},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},clone:function(){return new L.Point(this.x,this.y)},toString:function(){return"Point("+L.Util.formatNum(this.x)+", "+L.Util.formatNum(this.y)+")"}},L.Bounds=L.Class.extend({initialize:function(a,b){if(!a)return;var c=a instanceof Array?a:[a,b];for(var d=0,e=c.length;d<e;d++)this.extend(c[d])},extend:function(a){!this.min&&!this.max?(this.min=new L.Point(a.x,a.y),this.max=new L.Point(a.x,a.y)):(this.min.x=Math.min(a.x,this.min.x),this.max.x=Math.max(a.x,this.max.x),this.min.y=Math.min(a.y,this.min.y),this.max.y=Math.max(a.y,this.max.y))},getCenter:function(a){return new L.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,a)},contains:function(a){var b,c;return a instanceof L.Bounds?(b=a.min,c=a.max):b=c=a,b.x>=this.min.x&&c.x<=this.max.x&&b.y>=this.min.y&&c.y<=this.max.y},intersects:function(a){var b=this.min,c=this.max,d=a.min,e=a.max,f=e.x>=b.x&&d.x<=c.x,g=e.y>=b.y&&d.y<=c.y;return f&&g}}),L.Transformation=L.Class.extend({initialize:function(a,b,c,d){this._a=a,this._b=b,this._c=c,this._d=d},transform:function(a,b){return this._transform(a.clone(),b)},_transform:function(a,b){return b=b||1,a.x=b*(this._a*a.x+this._b),a.y=b*(this._c*a.y+this._d),a},untransform:function(a,b){return b=b||1,new L.Point((a.x/b-this._b)/this._a,(a.y/b-this._d)/this._c)}}),L.DomUtil={get:function(a){return typeof a=="string"?document.getElementById(a):a},getStyle:function(a,b){var c=a.style[b];!c&&a.currentStyle&&(c=a.currentStyle[b]);if(!c||c==="auto"){var d=document.defaultView.getComputedStyle(a,null);c=d?d[b]:null}return c==="auto"?null:c},getViewportOffset:function(a){var b=0,c=0,d=a,e=document.body;do{b+=d.offsetTop||0,c+=d.offsetLeft||0;if(d.offsetParent===e&&L.DomUtil.getStyle(d,"position")==="absolute")break;d=d.offsetParent}while(d);d=a;do{if(d===e)break;b-=d.scrollTop||0,c-=d.scrollLeft||0,d=d.parentNode}while(d);return new L.Point(c,b)},create:function(a,b,c){var d=document.createElement(a);return d.className=b,c&&c.appendChild(d),d},disableTextSelection:function(){document.selection&&document.selection.empty&&document.selection.empty(),this._onselectstart||(this._onselectstart=document.onselectstart,document.onselectstart=L.Util.falseFn)},enableTextSelection:function(){document.onselectstart=this._onselectstart,this._onselectstart=null},hasClass:function(a,b){return a.className.length>0&&RegExp("(^|\\s)"+b+"(\\s|$)").test(a.className)},addClass:function(a,b){L.DomUtil.hasClass(a,b)||(a.className+=(a.className?" ":"")+b)},removeClass:function(a,b){a.className=a.className.replace(/(\S+)\s*/g,function(a,c){return c===b?"":a}).replace(/^\s+/,"")},setOpacity:function(a,b){L.Browser.ie?a.style.filter="alpha(opacity="+Math.round(b*100)+")":a.style.opacity=b},testProp:function(a){var b=document.documentElement.style;for(var c=0;c<a.length;c++)if(a[c]in b)return a[c];return!1},getTranslateString:function(a){return L.DomUtil.TRANSLATE_OPEN+a.x+"px,"+a.y+"px"+L.DomUtil.TRANSLATE_CLOSE},getScaleString:function(a,b){var c=L.DomUtil.getTranslateString(b),d=" scale("+a+") ",e=L.DomUtil.getTranslateString(b.multiplyBy(-1));return c+d+e},setPosition:function(a,b){a._leaflet_pos=b,L.Browser.webkit?a.style[L.DomUtil.TRANSFORM]=L.DomUtil.getTranslateString(b):(a.style.left=b.x+"px",a.style.top=b.y+"px")},getPosition:function(a){return a._leaflet_pos}},L.Util.extend(L.DomUtil,{TRANSITION:L.DomUtil.testProp(["transition","webkitTransition","OTransition","MozTransition","msTransition"]),TRANSFORM:L.DomUtil.testProp(["transformProperty","WebkitTransform","OTransform","MozTransform","msTransform"]),TRANSLATE_OPEN:"translate"+(L.Browser.webkit3d?"3d(":"("),TRANSLATE_CLOSE:L.Browser.webkit3d?",0)":")"}),L.LatLng=function(a,b,c){var d=parseFloat(a),e=parseFloat(b);if(isNaN(d)||isNaN(e))throw Error("Invalid LatLng object: ("+a+", "+b+")");c!==!0&&(d=Math.max(Math.min(d,90),-90),e=(e+180)%360+(e<-180||e===180?180:-180)),this.lat=d,this.lng=e},L.Util.extend(L.LatLng,{DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,MAX_MARGIN:1e-9}),L.LatLng.prototype={equals:function(a){if(a instanceof L.LatLng){var b=Math.max(Math.abs(this.lat-a.lat),Math.abs(this.lng-a.lng));return b<=L.LatLng.MAX_MARGIN}return!1},toString:function(){return"LatLng("+L.Util.formatNum(this.lat)+", "+L.Util.formatNum(this.lng)+")"},distanceTo:function(a){var b=6378137,c=L.LatLng.DEG_TO_RAD,d=(a.lat-this.lat)*c,e=(a.lng-this.lng)*c,f=this.lat*c,g=a.lat*c,h=Math.sin(d/2),i=Math.sin(e/2),j=h*h+i*i*Math.cos(f)*Math.cos(g);return b*2*Math.atan2(Math.sqrt(j),Math.sqrt(1-j))}},L.LatLngBounds=L.Class.extend({initialize:function(a,b){if(!a)return;var c=a instanceof Array?a:[a,b];for(var d=0,e=c.length;d<e;d++)this.extend(c[d])},extend:function(a){!this._southWest&&!this._northEast?(this._southWest=new L.LatLng(a.lat,a.lng,!0),this._northEast=new L.LatLng(a.lat,a.lng,!0)):(this._southWest.lat=Math.min(a.lat,this._southWest.lat),this._southWest.lng=Math.min(a.lng,this._southWest.lng),this._northEast.lat=Math.max(a.lat,this._northEast.lat),this._northEast.lng=Math.max(a.lng,this._northEast.lng))},getCenter:function(){return new L.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new L.LatLng(this._northEast.lat,this._southWest.lng,!0)},getSouthEast:function(){return new L.LatLng(this._southWest.lat,this._northEast.lng,!0)},contains:function(a){var b=this._southWest,c=this._northEast,d,e;return a instanceof L.LatLngBounds?(d=a.getSouthWest(),e=a.getNorthEast()):d=e=a,d.lat>=b.lat&&e.lat<=c.lat&&d.lng>=b.lng&&e.lng<=c.lng},intersects:function(a){var b=this._southWest,c=this._northEast,d=a.getSouthWest(),e=a.getNorthEast(),f=e.lat>=b.lat&&d.lat<=c.lat,g=e.lng>=b.lng&&d.lng<=c.lng;return f&&g},toBBoxString:function(){var a=this._southWest,b=this._northEast;return[a.lng,a.lat,b.lng,b.lat].join(",")}}),L.Projection={},L.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(a){var b=L.LatLng.DEG_TO_RAD,c=this.MAX_LATITUDE,d=Math.max(Math.min(c,a.lat),-c),e=a.lng*b,f=d*b;return f=Math.log(Math.tan(Math.PI/4+f/2)),new L.Point(e,f)},unproject:function(a,b){var c=L.LatLng.RAD_TO_DEG,d=a.x*c,e=(2*Math.atan(Math.exp(a.y))-Math.PI/2)*c;return new L.LatLng(e,d,b)}},L.Projection.LonLat={project:function(a){return new L.Point(a.lng,a.lat)},unproject:function(a,b){return new L.LatLng(a.y,a.x,b)}},L.CRS={latLngToPoint:function(a,b){var c=this.projection.project(a);return this.transformation._transform(c,b)},pointToLatLng:function(a,b,c){var d=this.transformation.untransform(a,b);return this.projection.unproject(d,c)},project:function(a){return this.projection.project(a)}},L.CRS.EPSG3857=L.Util.extend({},L.CRS,{code:"EPSG:3857",projection:L.Projection.SphericalMercator,transformation:new L.Transformation(.5/Math.PI,.5,-0.5/Math.PI,.5),project:function(a){var b=this.projection.project(a),c=6378137;return b.multiplyBy(c)}}),L.CRS.EPSG900913=L.Util.extend({},L.CRS.EPSG3857,{code:"EPSG:900913"}),L.CRS.EPSG4326=L.Util.extend({},L.CRS,{code:"EPSG:4326",projection:L.Projection.LonLat,transformation:new L.Transformation(1/360,.5,-1/360,.5)}),L.Map=L.Class.extend({includes:L.Mixin.Events,options:{crs:L.CRS.EPSG3857||L.CRS.EPSG4326,scale:function(a){return 256*Math.pow(2,a)},center:null,zoom:null,layers:[],dragging:!0,touchZoom:L.Browser.touch&&!L.Browser.android,scrollWheelZoom:!L.Browser.touch,doubleClickZoom:!0,boxZoom:!0,zoomControl:!0,attributionControl:!0,fadeAnimation:L.DomUtil.TRANSITION&&!L.Browser.android,zoomAnimation:L.DomUtil.TRANSITION&&!L.Browser.android&&!L.Browser.mobileOpera,trackResize:!0,closePopupOnClick:!0,worldCopyJump:!0},initialize:function(a,b){L.Util.setOptions(this,b),this._container=L.DomUtil.get(a);if(this._container._leaflet)throw Error("Map container is already initialized.");this._container._leaflet=!0,this._initLayout(),L.DomEvent&&(this._initEvents(),L.Handler&&this._initInteraction(),L.Control&&this._initControls()),this.options.maxBounds&&this.setMaxBounds(this.options.maxBounds);var c=this.options.center,d=this.options.zoom;c!==null&&d!==null&&this.setView(c,d,!0);var e=this.options.layers;e=e instanceof Array?e:[e],this._tileLayersNum=0,this._initLayers(e)},setView:function(a,b){return this._resetView(a,this._limitZoom(b)),this},setZoom:function(a){return this.setView(this.getCenter(),a)},zoomIn:function(){return this.setZoom(this._zoom+1)},zoomOut:function(){return this.setZoom(this._zoom-1)},fitBounds:function(a){var b=this.getBoundsZoom(a);return this.setView(a.getCenter(),b)},fitWorld:function(){var a=new L.LatLng(-60,-170),b=new L.LatLng(85,179);return this.fitBounds(new L.LatLngBounds(a,b))},panTo:function(a){return this.setView(a,this._zoom)},panBy:function(a){return this.fire("movestart"),this._rawPanBy(a),this.fire("move"),this.fire("moveend"),this},setMaxBounds:function(a){this.options.maxBounds=a;if(!a)return this._boundsMinZoom=null,this;var b=this.getBoundsZoom(a,!0);return this._boundsMinZoom=b,this._loaded&&(this._zoom<b?this.setView(a.getCenter(),b):this.panInsideBounds(a)),this},panInsideBounds:function(a){var b=this.getBounds(),c=this.project(b.getSouthWest()),d=this.project(b.getNorthEast()),e=this.project(a.getSouthWest()),f=this.project(a.getNorthEast()),g=0,h=0;return d.y<f.y&&(h=f.y-d.y),d.x>f.x&&(g=f.x-d.x),c.y>e.y&&(h=e.y-c.y),c.x<e.x&&(g=e.x-c.x),this.panBy(new L.Point(g,h,!0))},addLayer:function(a,b){var c=L.Util.stamp(a);if(this._layers[c])return this;this._layers[c]=a,a.options&&!isNaN(a.options.maxZoom)&&(this._layersMaxZoom=Math.max(this._layersMaxZoom||0,a.options.maxZoom)),a.options&&!isNaN(a.options.minZoom)&&(this._layersMinZoom=Math.min(this._layersMinZoom||Infinity,a.options.minZoom)),this.options.zoomAnimation&&L.TileLayer&&a instanceof L.TileLayer&&(this._tileLayersNum++,a.on("load",this._onTileLayerLoad,this)),this.attributionControl&&a.getAttribution&&this.attributionControl.addAttribution(a.getAttribution());var d=function(){a.onAdd(this,b),this.fire("layeradd",{layer:a})};return this._loaded?d.call(this):this.on("load",d,this),this},removeLayer:function(a){var b=L.Util.stamp(a);return this._layers[b]&&(a.onRemove(this),delete this._layers[b],this.options.zoomAnimation&&L.TileLayer&&a instanceof L.TileLayer&&(this._tileLayersNum--,a.off("load",this._onTileLayerLoad,this)),this.attributionControl&&a.getAttribution&&this.attributionControl.removeAttribution(a.getAttribution()),this.fire("layerremove",{layer:a})),this},hasLayer:function(a){var b=L.Util.stamp(a);return this._layers.hasOwnProperty(b)},invalidateSize:function(){var a=this.getSize();return this._sizeChanged=!0,this.options.maxBounds&&this.setMaxBounds(this.options.maxBounds),this._loaded?(this._rawPanBy(a.subtract(this.getSize()).divideBy(2,!0)),this.fire("move"),clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(L.Util.bind(function(){this.fire("moveend")},this),200),this):this},getCenter:function(a){var b=this.getSize().divideBy(2),c=this._getTopLeftPoint().add(b);return this.unproject(c,this._zoom,a)},getZoom:function(){return this._zoom},getBounds:function(){var a=this.getPixelBounds(),b=this.unproject(new L.Point(a.min.x,a.max.y),this._zoom,!0),c=this.unproject(new L.Point(a.max.x,a.min.y),this._zoom,!0);return new L.LatLngBounds(b,c)},getMinZoom:function(){var a=this.options.minZoom||0,b=this._layersMinZoom||0,c=this._boundsMinZoom||0;return Math.max(a,b,c)},getMaxZoom:function(){var a=isNaN(this.options.maxZoom)?Infinity:this.options.maxZoom,b=this._layersMaxZoom||Infinity;return Math.min(a,b)},getBoundsZoom:function(a,b){var c=this.getSize(),d=this.options.minZoom||0,e=this.getMaxZoom(),f=a.getNorthEast(),g=a.getSouthWest(),h,i,j,k=!0;b&&d--;do d++,i=this.project(f,d),j=this.project(g,d),h=new L.Point(i.x-j.x,j.y-i.y),b?k=h.x<c.x||h.y<c.y:k=h.x<=c.x&&h.y<=c.y;while(k&&d<=e);return k&&b?null:b?d:d-1},getSize:function(){if(!this._size||this._sizeChanged)this._size=new L.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1;return this._size},getPixelBounds:function(){var a=this._getTopLeftPoint(),b=this.getSize();return new L.Bounds(a,a.add(b))},getPixelOrigin:function(){return this._initialTopLeftPoint},getPanes:function(){return this._panes},mouseEventToContainerPoint:function(a){return L.DomEvent.getMousePosition(a,this._container)},mouseEventToLayerPoint:function(a){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(a))},mouseEventToLatLng:function(a){return this.layerPointToLatLng(this.mouseEventToLayerPoint(a))},containerPointToLayerPoint:function(a){return a.subtract(L.DomUtil.getPosition(this._mapPane))},layerPointToContainerPoint:function(a){return a.add(L.DomUtil.getPosition(this._mapPane))},layerPointToLatLng:function(a){return this.unproject(a.add(this._initialTopLeftPoint))},latLngToLayerPoint:function(a){return this.project(a)._round()._subtract(this._initialTopLeftPoint)},project:function(a,b){return b=typeof b=="undefined"?this._zoom:b,this.options.crs.latLngToPoint(a,this.options.scale(b))},unproject:function(a,b,c){return b=typeof b=="undefined"?this._zoom:b,this.options.crs.pointToLatLng(a,this.options.scale(b),c)},_initLayout:function(){var a=this._container;a.innerHTML="",a.className+=" leaflet-container",this.options.fadeAnimation&&(a.className+=" leaflet-fade-anim");var b=L.DomUtil.getStyle(a,"position");b!=="absolute"&&b!=="relative"&&(a.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var a=this._panes={};this._mapPane=a.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=a.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),this._objectsPane=a.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),a.shadowPane=this._createPane("leaflet-shadow-pane"),a.overlayPane=this._createPane("leaflet-overlay-pane"),a.markerPane=this._createPane("leaflet-marker-pane"),a.popupPane=this._createPane("leaflet-popup-pane")},_createPane:function(a,b){return L.DomUtil.create("div",a,b||this._objectsPane)},_resetView:function(a,b,c,d){var e=this._zoom!==b;d||(this.fire("movestart"),e&&this.fire("zoomstart")),this._zoom=b,this._initialTopLeftPoint=this._getNewTopLeftPoint(a);if(!c)L.DomUtil.setPosition(this._mapPane,new L.Point(0,0));else{var f=L.DomUtil.getPosition(this._mapPane);this._initialTopLeftPoint._add(f)}this._tileLayersToLoad=this._tileLayersNum,this.fire("viewreset",{hard:!c}),this.fire("move"),(e||d)&&this.fire("zoomend"),this.fire("moveend"),this._loaded||(this._loaded=!0,this.fire("load"))},_initLayers:function(a){this._layers={};var b,c;for(b=0,c=a.length;b<c;b++)this.addLayer(a[b])},_initControls:function(){this.options.zoomControl&&this.addControl(new L.Control.Zoom),this.options.attributionControl&&(this.attributionControl=new L.Control.Attribution,this.addControl(this.attributionControl))},_rawPanBy:function(a){var b=L.DomUtil.getPosition(this._mapPane);L.DomUtil.setPosition(this._mapPane,b.subtract(a))},_initEvents:function(){L.DomEvent.addListener(this._container,"click",this._onMouseClick,this);var a=["dblclick","mousedown","mouseenter","mouseleave","mousemove","contextmenu"],b,c;for(b=0,c=a.length;b<c;b++)L.DomEvent.addListener(this._container,a[b],this._fireMouseEvent,this);this.options.trackResize&&L.DomEvent.addListener(window,"resize",this._onResize,this)},_onResize:function(){L.Util.requestAnimFrame(this.invalidateSize,this,!1,this._container)},_onMouseClick:function(a){if(!this._loaded||this.dragging&&this.dragging.moved())return;this.fire("pre"+a.type),this._fireMouseEvent(a)},_fireMouseEvent:function(a){if(!this._loaded)return;var b=a.type;b=b==="mouseenter"?"mouseover":b==="mouseleave"?"mouseout":b;if(!this.hasEventListeners(b))return;b==="contextmenu"&&L.DomEvent.preventDefault(a),this.fire(b,{latlng:this.mouseEventToLatLng(a),layerPoint:this.mouseEventToLayerPoint(a)})},_initInteraction:function(){var a={dragging:L.Map.Drag,touchZoom:L.Map.TouchZoom,doubleClickZoom:L.Map.DoubleClickZoom,scrollWheelZoom:L.Map.ScrollWheelZoom,boxZoom:L.Map.BoxZoom},b;for(b in a)a.hasOwnProperty(b)&&a[b]&&(this[b]=new a[b](this),this.options[b]&&this[b].enable())},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this._tileBg&&(clearTimeout(this._clearTileBgTimer),this._clearTileBgTimer=setTimeout(L.Util.bind(this._clearTileBg,this),500))},_getTopLeftPoint:function(){if(!this._loaded)throw Error("Set map center and zoom first.");var a=L.DomUtil.getPosition(this._mapPane);return this._initialTopLeftPoint.subtract(a)},_getNewTopLeftPoint:function(a){var b=this.getSize().divideBy(2);return this.project(a).subtract(b).round()},_limitZoom:function(a){var b=this.getMinZoom(),c=this.getMaxZoom();return Math.max(b,Math.min(c,a))}}),L.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.3142,R_MAJOR:6378137,project:function(a){var b=L.LatLng.DEG_TO_RAD,c=this.MAX_LATITUDE,d=Math.max(Math.min(c,a.lat),-c),e=this.R_MAJOR,f=this.R_MINOR,g=a.lng*b*e,h=d*b,i=f/e,j=Math.sqrt(1-i*i),k=j*Math.sin(h);k=Math.pow((1-k)/(1+k),j*.5);var l=Math.tan(.5*(Math.PI*.5-h))/k;return h=-f*Math.log(l),new L.Point(g,h)},unproject:function(a,b){var c=L.LatLng.RAD_TO_DEG,d=this.R_MAJOR,e=this.R_MINOR,f=a.x*c/d,g=e/d,h=Math.sqrt(1-g*g),i=Math.exp(-a.y/e),j=Math.PI/2-2*Math.atan(i),k=15,l=1e-7,m=k,n=.1,o;while(Math.abs(n)>l&&--m>0)o=h*Math.sin(j),n=Math.PI/2-2*Math.atan(i*Math.pow((1-o)/(1+o),.5*h))-j,j+=n;return new L.LatLng(j*c,f,b)}},L.CRS.EPSG3395=L.Util.extend({},L.CRS,{code:"EPSG:3395",projection:L.Projection.Mercator,transformation:function(){var a=L.Projection.Mercator,b=a.R_MAJOR,c=a.R_MINOR;return new L.Transformation(.5/(Math.PI*b),.5,-0.5/(Math.PI*c),.5)}()}),L.TileLayer=L.Class.extend({includes:L.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",opacity:1,scheme:"xyz",continuousWorld:!1,noWrap:!1,zoomOffset:0,zoomReverse:!1,unloadInvisibleTiles:L.Browser.mobile,updateWhenIdle:L.Browser.mobile},initialize:function(a,b,c){L.Util.setOptions(this,b),this._url=a,this._urlParams=c,typeof this.options.subdomains=="string"&&(this.options.subdomains=this.options.subdomains.split(""))},onAdd:function(a,b){this._map=a,this._insertAtTheBottom=b,this._initContainer(),this._createTileProto(),a.on("viewreset",this._resetCallback,this),this.options.updateWhenIdle?a.on("moveend",this._update,this):(this._limitedUpdate=L.Util.limitExecByInterval(this._update,150,this),a.on("move",this._limitedUpdate,this)),this._reset(),this._update()},onRemove:function(a){this._map.getPanes().tilePane.removeChild(this._container),this._container=null,this._map.off("viewreset",this._resetCallback,this),this.options.updateWhenIdle?this._map.off("moveend",this._update,this):this._map.off("move",this._limitedUpdate,this)},getAttribution:function(){return this.options.attribution},setOpacity:function(a){this.options.opacity=a,this._setOpacity(a);if(L.Browser.webkit)for(var b in this._tiles)this._tiles.hasOwnProperty(b)&&(this._tiles[b].style.webkitTransform+=" translate(0,0)")},_setOpacity:function(a){a<1&&L.DomUtil.setOpacity(this._container,a)},_initContainer:function(){var a=this._map.getPanes().tilePane,b=a.firstChild;if(!this._container||a.empty)this._container=L.DomUtil.create("div","leaflet-layer"),this._insertAtTheBottom&&b?a.insertBefore(this._container,b):a.appendChild(this._container),this._setOpacity(this.options.opacity)},_resetCallback:function(a){this._reset(a.hard)},_reset:function(a){var b;for(b in this._tiles)this._tiles.hasOwnProperty(b)&&this.fire("tileunload",{tile:this._tiles[b]});this._tiles={},this.options.reuseTiles&&(this._unusedTiles=[]),a&&this._container&&(this._container.innerHTML=""),this._initContainer()},_update:function(){var a=this._map.getPixelBounds(),b=this.options.tileSize,c=new L.Point(Math.floor(a.min.x/b),Math.floor(a.min.y/b)),d=new L.Point(Math.floor(a.max.x/b),Math.floor(a.max.y/b)),e=new L.Bounds(c,d);this._addTilesFromCenterOut(e),(this.options.unloadInvisibleTiles||this.options.reuseTiles)&&this._removeOtherTiles(e)},_addTilesFromCenterOut:function(a){var b=[],c=a.getCenter();for(var d=a.min.y;d<=a.max.y;d++)for(var e=a.min.x;e<=a.max.x;e++){if(e+":"+d in this._tiles)continue;b.push(new L.Point(e,d))}b.sort(function(a,b){return a.distanceTo(c)-b.distanceTo(c)});var f=document.createDocumentFragment();this._tilesToLoad=b.length;for(var g=0,h=this._tilesToLoad;g<h;g++)this._addTile(b[g],f);this._container.appendChild(f)},_removeOtherTiles:function(a){var b,c,d,e,f;for(e in this._tiles)if(this._tiles.hasOwnProperty(e)){b=e.split(":"),c=parseInt(b[0],10),d=parseInt(b[1],10);if(c<a.min.x||c>a.max.x||d<a.min.y||d>a.max.y)f=this._tiles[e],this.fire("tileunload",{tile:f,url:f.src}),f.parentNode===this._container&&this._container.removeChild(f),this.options.reuseTiles&&this._unusedTiles.push(this._tiles[e]),delete this._tiles[e]}},_addTile:function(a,b){var c=this._getTilePos(a),d=this._map.getZoom(),e=a.x+":"+a.y,f=Math.pow(2,this._getOffsetZoom(d));if(!this.options.continuousWorld){if(!this.options.noWrap)a.x=(a.x%f+f)%f;else if(a.x<0||a.x>=f){this._tilesToLoad--;return}if(a.y<0||a.y>=f){this._tilesToLoad--;return}}var g=this._getTile();L.DomUtil.setPosition(g,c),this._tiles[e]=g,this.options.scheme==="tms"&&(a.y=f-a.y-1),this._loadTile(g,a,d),b.appendChild(g)},_getOffsetZoom:function(a){return a=this.options.zoomReverse?this.options.maxZoom-a:a,a+this.options.zoomOffset},_getTilePos:function(a){var b=this._map.getPixelOrigin(),c=this.options.tileSize;return a.multiplyBy(c).subtract(b)},getTileUrl:function(a,b){var c=this.options.subdomains,d=this.options.subdomains[(a.x+a.y)%c.length];return L.Util.template(this._url,L.Util.extend({s:d,z:this._getOffsetZoom(b),x:a.x,y:a.y},this._urlParams))},_createTileProto:function(){this._tileImg=L.DomUtil.create("img","leaflet-tile"),this._tileImg.galleryimg="no";var a=this.options.tileSize;this._tileImg.style.width=a+"px",this._tileImg.style.height=a+"px"},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var a=this._unusedTiles.pop();return this._resetTile(a),a}return this._createTile()},_resetTile:function(a){},_createTile:function(){var a=this._tileImg.cloneNode(!1);return a.onselectstart=a.onmousemove=L.Util.falseFn,a},_loadTile:function(a,b,c){a._layer=this,a.onload=this._tileOnLoad,a.onerror=this._tileOnError,a.src=this.getTileUrl(b,c)},_tileOnLoad:function(a){var b=this._layer;this.className+=" leaflet-tile-loaded",b.fire("tileload",{tile:this,url:this.src}),b._tilesToLoad--,b._tilesToLoad||b.fire("load")},_tileOnError:function(a){var b=this._layer;b.fire("tileerror",{tile:this,url:this.src});var c=b.options.errorTileUrl;c&&(this.src=c)}}),L.TileLayer.WMS=L.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(a,b){this._url=a,this.wmsParams=L.Util.extend({},this.defaultWmsParams),this.wmsParams.width=this.wmsParams.height=this.options.tileSize;for(var c in b)this.options.hasOwnProperty(c)||(this.wmsParams[c]=b[c]);L.Util.setOptions(this,b)},onAdd:function(a){var b=parseFloat(this.wmsParams.version)<1.3?"srs":"crs";this.wmsParams[b]=a.options.crs.code,L.TileLayer.prototype.onAdd.call(this,a)},getTileUrl:function(a,b){var c=this.options.tileSize,d=a.multiplyBy(c),e=d.add(new L.Point(c,c)),f=this._map.unproject(d,this._zoom,!0),g=this._map.unproject(e,this._zoom,!0),h=this._map.options.crs.project(f),i=this._map.options.crs.project(g),j=[h.x,i.y,i.x,h.y].join(",");return this._url+L.Util.getParamString(this.wmsParams)+"&bbox="+j}}),L.TileLayer.Canvas=L.TileLayer.extend({options:{async:!1},initialize:function(a){L.Util.setOptions(this,a)},redraw:function(){for(var a in this._tiles){var b=this._tiles[a];this._redrawTile(b)}},_redrawTile:function(a){this.drawTile(a,a._tilePoint,a._zoom)},_createTileProto:function(){this._canvasProto=L.DomUtil.create("canvas","leaflet-tile");var a=this.options.tileSize;this._canvasProto.width=a,this._canvasProto.height=a},_createTile:function(){var a=this._canvasProto.cloneNode(!1);return a.onselectstart=a.onmousemove=L.Util.falseFn,a},_loadTile:function(a,b,c){a._layer=this,a._tilePoint=b,a._zoom=c,this.drawTile(a,b,c),this.options.async||this.tileDrawn(a)},drawTile:function(a,b,c){},tileDrawn:function(a){this._tileOnLoad.call(a)}}),L.ImageOverlay=L.Class.extend({includes:L.Mixin.Events,initialize:function(a,b){this._url=a,this._bounds=b},onAdd:function(a){this._map=a,this._image||this._initImage(),a.getPanes().overlayPane.appendChild(this._image),a.on("viewreset",this._reset,this),this._reset()},onRemove:function(a){a.getPanes().overlayPane.removeChild(this._image),a.off("viewreset",this._reset,this)},_initImage:function(){this._image=L.DomUtil.create("img","leaflet-image-layer"),this._image.style.visibility="hidden",L.Util.extend(this._image,{galleryimg:"no",onselectstart:L.Util.falseFn,onmousemove:L.Util.falseFn,onload:L.Util.bind(this._onImageLoad,this),src:this._url})},_reset:function(){var a=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),b=this._map.latLngToLayerPoint(this._bounds.getSouthEast()),c=b.subtract(a);L.DomUtil.setPosition(this._image,a),this._image.style.width=c.x+"px",this._image.style.height=c.y+"px"},_onImageLoad:function(){this._image.style.visibility="",this.fire("load")}}),L.Icon=L.Class.extend({iconUrl:L.ROOT_URL+"images/marker.png",shadowUrl:L.ROOT_URL+"images/marker-shadow.png",iconSize:new L.Point(25,41),shadowSize:new L.Point(41,41),iconAnchor:new L.Point(13,41),popupAnchor:new L.Point(0,-33),initialize:function(a){a&&(this.iconUrl=a)},createIcon:function(){return this._createIcon("icon")},createShadow:function(){return this._createIcon("shadow")},_createIcon:function(a){var b=this[a+"Size"],c=this[a+"Url"];if(!c&&a==="shadow")return null;var d;return c?d=this._createImg(c):d=this._createDiv(),d.className="leaflet-marker-"+a,d.style.marginLeft=-this.iconAnchor.x+"px",d.style.marginTop=-this.iconAnchor.y+"px",b&&(d.style.width=b.x+"px",d.style.height=b.y+"px"),d},_createImg:function(a){var b;return L.Browser.ie6?(b=document.createElement("div"),b.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+a+'")'):(b=document.createElement("img"),b.src=a),b},_createDiv:function(){return document.createElement("div")}}),L.Marker=L.Class.extend({includes:L.Mixin.Events,options:{icon:new L.Icon,title:"",clickable:!0,draggable:!1,zIndexOffset:0},initialize:function(a,b){L.Util.setOptions(this,b),this._latlng=a},onAdd:function(a){this._map=a,this._initIcon(),a.on("viewreset",this._reset,this),this._reset()},onRemove:function(a){this._removeIcon(),this.closePopup&&this.closePopup(),this._map=null,a.off("viewreset",this._reset,this)},getLatLng:function(){return this._latlng},setLatLng:function(a){this._latlng=a,this._icon&&(this._reset(),this._popup&&this._popup.setLatLng(this._latlng))},setIcon:function(a){this._map&&this._removeIcon(),this.options.icon=a,this._map&&(this._initIcon(),this._reset())},_initIcon:function(){this._icon||(this._icon=this.options.icon.createIcon(),this.options.title&&(this._icon.title=this.options.title),this._initInteraction()),this._shadow||(this._shadow=this.options.icon.createShadow()),this._map._panes.markerPane.appendChild(this._icon),this._shadow&&this._map._panes.shadowPane.appendChild(this._shadow)},_removeIcon:function(){this._map._panes.markerPane.removeChild(this._icon),this._shadow&&this._map._panes.shadowPane.removeChild(this._shadow),this._icon=this._shadow=null},_reset:function(){var a=this._map.latLngToLayerPoint(this._latlng).round();L.DomUtil.setPosition(this._icon,a),this._shadow&&L.DomUtil.setPosition(this._shadow,a),this._icon.style.zIndex=a.y+this.options.zIndexOffset},_initInteraction:function(){if(this.options.clickable){this._icon.className+=" leaflet-clickable",L.DomEvent.addListener(this._icon,"click",this._onMouseClick,this);var a=["dblclick","mousedown","mouseover","mouseout"];for(var b=0;b<a.length;b++)L.DomEvent.addListener(this._icon,a[b],this._fireMouseEvent,this)}L.Handler.MarkerDrag&&(this.dragging=new L.Handler.MarkerDrag(this),this.options.draggable&&this.dragging.enable())},_onMouseClick:function(a){L.DomEvent.stopPropagation(a);if(this.dragging&&this.dragging.moved())return;this.fire(a.type)},_fireMouseEvent:function(a){this.fire(a.type),L.DomEvent.stopPropagation(a)}}),L.Popup=L.Class.extend({includes:L.Mixin.Events,options:{minWidth:50,maxWidth:300,autoPan:!0,closeButton:!0,offset:new L.Point(0,2),autoPanPadding:new L.Point(5,5),className:""},initialize:function(a,b){L.Util.setOptions(this,a),this._source=b},onAdd:function(a){this._map=a,this._container||this._initLayout(),this._updateContent(),this._container.style.opacity="0",this._map._panes.popupPane.appendChild(this._container),this._map.on("viewreset",this._updatePosition,this),this._map.options.closePopupOnClick&&this._map.on("preclick",this._close,this),this._update(),this._container.style.opacity="1",this._opened=!0},onRemove:function(a){a._panes.popupPane.removeChild(this._container),L.Util.falseFn(this._container.offsetWidth),a.off("viewreset",this._updatePosition,this),a.off("click",this._close,this),this._container.style.opacity="0",this._opened=!1},setLatLng:function(a){return this._latlng=a,this._opened&&this._update(),this},setContent:function(a){return this._content=a,this._opened&&this._update(),this},_close:function(){this._opened&&this._map.closePopup()},_initLayout:function(){this._container=L.DomUtil.create("div","leaflet-popup "+this.options.className),this.options.closeButton&&(this._closeButton=L.DomUtil.create("a","leaflet-popup-close-button",this._container),this._closeButton.href="#close",L.DomEvent.addListener(this._closeButton,"click",this._onCloseButtonClick,this)),this._wrapper=L.DomUtil.create("div","leaflet-popup-content-wrapper",this._container),L.DomEvent.disableClickPropagation(this._wrapper),this._contentNode=L.DomUtil.create("div","leaflet-popup-content",this._wrapper),this._tipContainer=L.DomUtil.create("div","leaflet-popup-tip-container",this._container),this._tip=L.DomUtil.create("div","leaflet-popup-tip",this._tipContainer)},_update:function(){this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan()},_updateContent:function(){if(!this._content)return;typeof this._content=="string"?this._contentNode.innerHTML=this._content:(this._contentNode.innerHTML="",this._contentNode.appendChild(this._content))},_updateLayout:function(){this._container.style.width="",this._container.style.whiteSpace="nowrap";var a=this._container.offsetWidth;this._container.style.width=(a>this.options.maxWidth?this.options.maxWidth:a<this.options.minWidth?this.options.minWidth:a)+"px",this._container.style.whiteSpace="",this._containerWidth=this._container.offsetWidth},_updatePosition:function(){var a=this._map.latLngToLayerPoint(this._latlng);this._containerBottom=-a.y-this.options.offset.y,this._containerLeft=a.x-Math.round(this._containerWidth/2)+this.options.offset.x,this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"},_adjustPan:function(){if(!this.options.autoPan)return;var a=this._container.offsetHeight,b=new L.Point(this._containerLeft,-a-this._containerBottom),c=this._map.layerPointToContainerPoint(b),d=new L.Point(0,0),e=this.options.autoPanPadding,f=this._map.getSize();c.x<0&&(d.x=c.x-e.x),c.x+this._containerWidth>f.x&&(d.x=c.x+this._containerWidth-f.x+e.x),c.y<0&&(d.y=c.y-e.y),c.y+a>f.y&&(d.y=c.y+a-f.y+e.y),(d.x||d.y)&&this._map.panBy(d)},_onCloseButtonClick:function(a){this._close(),L.DomEvent.stop(a)}}),L.Marker.include({openPopup:function(){return this._popup.setLatLng(this._latlng),this._map&&this._map.openPopup(this._popup),this},closePopup:function(){return this._popup&&this._popup._close(),this},bindPopup:function(a,b){return b=L.Util.extend({offset:this.options.icon.popupAnchor},b),this._popup||this.on("click",this.openPopup,this),this._popup=new L.Popup(b,this),this._popup.setContent(a),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.openPopup)),this}}),L.Map.include({openPopup:function(a){return this.closePopup(),this._popup=a,this.addLayer(a),this.fire("popupopen",{popup:this._popup}),this},closePopup:function(){return this._popup&&(this.removeLayer(this._popup),this.fire("popupclose",{popup:this._popup}),this._popup=null),this}}),L.LayerGroup=L.Class.extend({initialize:function(a){this._layers={};if(a)for(var b=0,c=a.length;b<c;b++)this.addLayer(a[b])},addLayer:function(a){var b=L.Util.stamp(a);return this._layers[b]=a,this._map&&this._map.addLayer(a),this},removeLayer:function(a){var b=L.Util.stamp(a);return delete this._layers[b],this._map&&this._map.removeLayer(a),this},clearLayers:function(){return this._iterateLayers(this.removeLayer,this),this},invoke:function(a){var b=Array.prototype.slice.call(arguments,1),c,d;for(c in this._layers)this._layers.hasOwnProperty(c)&&(d=this._layers[c],d[a]&&d[a].apply(d,b));return this},onAdd:function(a){this._map=a,this._iterateLayers(a.addLayer,a)},onRemove:function(a){this._iterateLayers(a.removeLayer,a),delete this._map},_iterateLayers:function(a,b){for(var c in this._layers)this._layers.hasOwnProperty(c)&&a.call(b,this._layers[c])}}),L.FeatureGroup=L.LayerGroup.extend({includes:L.Mixin.Events,addLayer:function(a){this._initEvents(a),L.LayerGroup.prototype.addLayer.call(this,a),this._popupContent&&a.bindPopup&&a.bindPopup(this._popupContent)},bindPopup:function(a){return this._popupContent=a,this.invoke("bindPopup",a)},setStyle:function(a){return this.invoke("setStyle",a)},_events:["click","dblclick","mouseover","mouseout"],_initEvents:function(a){for(var b=0,c=this._events.length;b<c;b++)a.on(this._events[b],this._propagateEvent,this)},_propagateEvent:function(a){a.layer=a.target,a.target=this,this.fire(a.type,a)}}),L.Path=L.Class.extend({includes:[L.Mixin.Events],statics:{CLIP_PADDING:.5},options:{stroke:!0,color:"#0033ff",weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0,updateOnMoveEnd:!0},initialize:function(a){L.Util.setOptions(this,a)},onAdd:function(a){this._map=a,this._initElements(),this._initEvents(),this.projectLatlngs(),this._updatePath(),a.on("viewreset",this.projectLatlngs,this),this._updateTrigger=this.options.updateOnMoveEnd?"moveend":"viewreset",a.on(this._updateTrigger,this._updatePath,this)},onRemove:function(a){this._map=null,a._pathRoot.removeChild(this._container),a.off("viewreset",this.projectLatlngs,this),a.off(this._updateTrigger,this._updatePath,this)},projectLatlngs:function(){},setStyle:function(a){return L.Util.setOptions(this,a),this._container&&this._updateStyle(),this},_redraw:function(){this._map&&(this.projectLatlngs(),this._updatePath())}}),L.Map.include({_updatePathViewport:function(){var a=L.Path.CLIP_PADDING,b=this.getSize(),c=L.DomUtil.getPosition(this._mapPane),d=c.multiplyBy(-1).subtract(b.multiplyBy(a)),e=d.add(b.multiplyBy(1+a*2));this._pathViewport=new L.Bounds(d,e)}}),L.Path.SVG_NS="http://www.w3.org/2000/svg",L.Browser.svg=!!document.createElementNS&&!!document.createElementNS(L.Path.SVG_NS,"svg").createSVGRect,L.Path=L.Path.extend({statics:{SVG:L.Browser.svg,_createElement:function(a){return document.createElementNS(L.Path.SVG_NS,a)}},getPathString:function(){},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=L.Path._createElement("g"),this._path=L.Path._createElement("path"),this._container.appendChild(this._path),this._map._pathRoot.appendChild(this._container)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill?this._path.setAttribute("fill-rule","evenodd"):this._path.setAttribute("fill","none"),this._updateStyle()},_updateStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight)),this.options.fill&&(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity))},_updatePath:function(){var a=this.getPathString();a||(a="M0 0"),this._path.setAttribute("d",a)},_initEvents:function(){if(this.options.clickable){L.Browser.vml||this._path.setAttribute("class","leaflet-clickable"),L.DomEvent.addListener(this._container,"click",this._onMouseClick,this);var a=["dblclick","mousedown","mouseover","mouseout","mousemove"];for(var b=0;b<a.length;b++)L.DomEvent.addListener(this._container,a[b],this._fireMouseEvent,this)}},_onMouseClick:function(a){if(this._map.dragging&&this._map.dragging.moved())return;this._fireMouseEvent(a)},_fireMouseEvent:function(a){if(!this.hasEventListeners(a.type))return;this.fire(a.type,{latlng:this._map.mouseEventToLatLng(a),layerPoint:this._map.mouseEventToLayerPoint(a)}),L.DomEvent.stopPropagation(a)}}),L.Map.include({_initPathRoot:function(){this._pathRoot||(this._pathRoot=L.Path._createElement("svg"),this._panes.overlayPane.appendChild(this._pathRoot),this.on("moveend",this._updateSvgViewport),this._updateSvgViewport())},_updateSvgViewport:function(){this._updatePathViewport();var a=this._pathViewport,b=a.min,c=a.max,d=c.x-b.x,e=c.y-b.y,f=this._pathRoot,g=this._panes.overlayPane;L.Browser.webkit&&g.removeChild(f),L.DomUtil.setPosition(f,b),f.setAttribute("width",d),f.setAttribute("height",e),f.setAttribute("viewBox",[b.x,b.y,d,e].join(" ")),L.Browser.webkit&&g.appendChild(f)}}),L.Path.include({bindPopup:function(a,b){if(!this._popup||this._popup.options!==b)this._popup=new L.Popup(b,this);return this._popup.setContent(a),this._openPopupAdded||(this.on("click",this._openPopup,this),this._openPopupAdded=!0),this},_openPopup:function(a){this._popup.setLatLng(a.latlng),this._map.openPopup(this._popup)}}),L.Browser.vml=function(){var a=document.createElement("div"),b;return a.innerHTML='<v:shape adj="1"/>',b=a.firstChild,b.style.behavior="url(#default#VML)",b&&typeof b.adj=="object"}(),L.Path=L.Browser.svg||!L.Browser.vml?L.Path:L.Path.extend({statics:{VML:!0,CLIP_PADDING:.02,_createElement:function(){try{return document.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(a){return document.createElement("<lvml:"+a+' class="lvml">')}}catch(a){return function(a){return document.createElement("<"+a+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}()},_initPath:function(){this._container=L.Path._createElement("shape"),this._container.className+=" leaflet-vml-shape"+(this.options.clickable?" leaflet-clickable":""),this._container.coordsize="1 1",this._path=L.Path._createElement("path"),this._container.appendChild(this._path),this._map._pathRoot.appendChild(this._container)},_initStyle:function(){this.options.stroke?(this._stroke=L.Path._createElement("stroke"),this._stroke.endcap="round",this._container.appendChild(this._stroke)):this._container.stroked=!1,this.options.fill?(this._container.filled=!0,this._fill=L.Path._createElement("fill"),this._container.appendChild(this._fill)):this._container.filled=!1,this._updateStyle()},_updateStyle:function(){this.options.stroke&&(this._stroke.weight=this.options.weight+"px",this._stroke.color=this.options.color,this._stroke.opacity=this.options.opacity),this.options.fill&&(this._fill.color=this.options.fillColor||this.options.color,this._fill.opacity=this.options.fillOpacity)},_updatePath:function(){this._container.style.display="none",this._path.v=this.getPathString()+" ",this._container.style.display=""}}),L.Map.include(L.Browser.svg||!L.Browser.vml?{}:{_initPathRoot:function(){this._pathRoot||(this._pathRoot=document.createElement("div"),this._pathRoot.className="leaflet-vml-container",this._panes.overlayPane.appendChild(this._pathRoot),this.on("moveend",this._updatePathViewport),this._updatePathViewport())}}),L.LineUtil={simplify:function(a,b){if(!b||!a.length)return a.slice();var c=b*b;return a=this._reducePoints(a,c),a=this._simplifyDP(a,c),a},pointToSegmentDistance:function(a,b,c){return Math.sqrt(this._sqClosestPointOnSegment(a,b,c,!0))},closestPointOnSegment:function(a,b,c){return this._sqClosestPointOnSegment(a,b,c)},_simplifyDP:function(a,b){var c=a.length,d=typeof Uint8Array!="undefined"?Uint8Array:Array,e=new d(c);e[0]=e[c-1]=1,this._simplifyDPStep(a,e,b,0,c-1);var f,g=[];for(f=0;f<c;f++)e[f]&&g.push(a[f]);return g},_simplifyDPStep:function(a,b,c,d,e){var f=0,g,h,i;for(h=d+1;h<=e-1;h++)i=this._sqClosestPointOnSegment(a[h],a[d],a[e],!0),i>f&&(g=h,f=i);f>c&&(b[g]=1,this._simplifyDPStep(a,b,c,d,g),this._simplifyDPStep(a,b,c,g,e))},_reducePoints:function(a,b){var c=[a[0]];for(var d=1,e=0,f=a.length;d<f;d++)this._sqDist(a[d],a[e])>b&&(c.push(a[d]),e=d);return e<f-1&&c.push(a[f-1]),c},clipSegment:function(a,b,c,d){var e=c.min,f=c.max,g=d?this._lastCode:this._getBitCode(a,c),h=this._getBitCode(b,c);this._lastCode=h;for(;;){if(!(g|h))return[a,b];if(g&h)return!1;var i=g||h,j=this._getEdgeIntersection(a,b,i,c),k=this._getBitCode(j,c);i===g?(a=j,g=k):(b=j,h=k)}},_getEdgeIntersection:function(a,b,c,d){var e=b.x-a.x,f=b.y-a.y,g=d.min,h=d.max;if(c&8)return new L.Point(a.x+e*(h.y-a.y)/f,h.y);if(c&4)return new L.Point(a.x+e*(g.y-a.y)/f,g.y);if(c&2)return new L.Point(h.x,a.y+f*(h.x-a.x)/e);if(c&1)return new L.Point(g.x,a.y+f*(g.x-a.x)/e)},_getBitCode:function(a,b){var c=0;return a.x<b.min.x?c|=1:a.x>b.max.x&&(c|=2),a.y<b.min.y?c|=4:a.y>b.max.y&&(c|=8),c},_sqDist:function(a,b){var c=b.x-a.x,d=b.y-a.y;return c*c+d*d},_sqClosestPointOnSegment:function(a,b,c,d){var e=b.x,f=b.y,g=c.x-e,h=c.y-f,i=g*g+h*h,j;return i>0&&(j=((a.x-e)*g+(a.y-f)*h)/i,j>1?(e=c.x,f=c.y):j>0&&(e+=g*j,f+=h*j)),g=a.x-e,h=a.y-f,d?g*g+h*h:new L.Point(e,f)}},L.Polyline=L.Path.extend({initialize:function(a,b){L.Path.prototype.initialize.call(this,b),this._latlngs=a},options:{smoothFactor:1,noClip:!1,updateOnMoveEnd:!0},projectLatlngs:function(){this._originalPoints=[];for(var a=0,b=this._latlngs.length;a<b;a++)this._originalPoints[a]=this._map.latLngToLayerPoint(this._latlngs[a])},getPathString:function(){for(var a=0,b=this._parts.length,c="";a<b;a++)c+=this._getPathPartStr(this._parts[a]);return c},getLatLngs:function(){return this._latlngs},setLatLngs:function(a){return this._latlngs=a,this._redraw(),this},addLatLng:function(a){return this._latlngs.push(a),this._redraw(),this},spliceLatLngs:function(a,b){var c=[].splice.apply(this._latlngs,arguments);return this._redraw(),c},closestLayerPoint:function(a){var b=Infinity,c=this._parts,d,e,f=null;for(var g=0,h=c.length;g<h;g++){var i=c[g];for(var j=1,k=i.length;j<k;j++){d=i[j-1],e=i[j];var l=L.LineUtil._sqClosestPointOnSegment(a,d,e);l._sqDist<b&&(b=l._sqDist,f=l)}}return f&&(f.distance=Math.sqrt(b)),f},getBounds:function(){var a=new L.LatLngBounds,b=this.getLatLngs();for(var c=0,d=b.length;c<d;c++)a.extend(b[c]);return a},_getPathPartStr:function(a){var b=L.Path.VML;for(var c=0,d=a.length,e="",f;c<d;c++)f=a[c],b&&f._round(),e+=(c?"L":"M")+f.x+" "+f.y;return e},_clipPoints:function(){var a=this._originalPoints,b=a.length,c,d,e;if(this.options.noClip){this._parts=[a];return}this._parts=[];var f=this._parts,g=this._map._pathViewport,h=L.LineUtil;for(c=0,d=0;c<b-1;c++){e=h.clipSegment(a[c],a[c+1],g,c);if(!e)continue;f[d]=f[d]||[],f[d].push(e[0]);if(e[1]!==a[c+1]||c===b-2)f[d].push(e[1]),d++}},_simplifyPoints:function(){var a=this._parts,b=L.LineUtil;for(var c=0,d=a.length;c<d;c++)a[c]=b.simplify(a[c],this.options.smoothFactor)},_updatePath:function(){this._clipPoints(),this._simplifyPoints(),L.Path.prototype._updatePath.call(this)}}),L.PolyUtil={},L.PolyUtil.clipPolygon=function(a,b){var c=b.min,d=b.max,e,f=[1,4,2,8],g,h,i,j,k,l,m,n,o=L.LineUtil;for(g=0,l=a.length;g<l;g++)a[g]._code=o._getBitCode(a[g],b);for(i=0;i<4;i++){m=f[i],e=[];for(g=0,l=a.length,h=l-1;g<l;h=g++)j=a[g],k=a[h],j._code&m?k._code&m||(n=o._getEdgeIntersection(k,j,m,b),n._code=o._getBitCode(n,b),e.push(n)):(k._code&m&&(n=o._getEdgeIntersection(k,j,m,b),n._code=o._getBitCode(n,b),e.push(n)),e.push(j));a=e}return a},L.Polygon=L.Polyline.extend({options:{fill:!0},initialize:function(a,b){L.Polyline.prototype.initialize.call(this,a,b),a&&a[0]instanceof Array&&(this._latlngs=a[0],this._holes=a.slice(1))},projectLatlngs:function(){L.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[];if(!this._holes)return;for(var a=0,b=this._holes.length,c;a<b;a++){this._holePoints[a]=[];for(var d=0,e=this._holes[a].length;d<e;d++)this._holePoints[a][d]=this._map.latLngToLayerPoint(this._holes[a][d])}},_clipPoints:function(){var a=this._originalPoints,b=[];this._parts=[a].concat(this._holePoints);if(this.options.noClip)return;for(var c=0,d=this._parts.length;c<d;c++){var e=L.PolyUtil.clipPolygon(this._parts[c],this._map._pathViewport);if(!e.length)continue;b.push(e)}this._parts=b},_getPathPartStr:function(a){var b=L.Polyline.prototype._getPathPartStr.call(this,a);return b+(L.Browser.svg?"z":"x")}}),function(){function a(a){return L.FeatureGroup.extend({initialize:function(a,b){this._layers={},this._options=b,this.setLatLngs(a)},setLatLngs:function(b){var c=0,d=b.length;this._iterateLayers(function(a){c<d?a.setLatLngs(b[c++]):this.removeLayer(a)},this);while(c<d)this.addLayer(new a(b[c++],this._options))}})}L.MultiPolyline=a(L.Polyline),L.MultiPolygon=a(L.Polygon)}(),L.Circle=L.Path.extend({initialize:function(a,b,c){L.Path.prototype.initialize.call(this,c),this._latlng=a,this._mRadius=b},options:{fill:!0},setLatLng:function(a){return this._latlng=a,this._redraw(),this},setRadius:function(a){return this._mRadius=a,this._redraw(),this},projectLatlngs:function(){var a=40075017,b=a*Math.cos(L.LatLng.DEG_TO_RAD*this._latlng.lat),c=this._mRadius/b*360,d=new L.LatLng(this._latlng.lat,this._latlng.lng-c,!0),e=this._map.latLngToLayerPoint(d);this._point=this._map.latLngToLayerPoint(this._latlng),this._radius=Math.round(this._point.x-e.x)},getPathString:function(){var a=this._point,b=this._radius;return this._checkIfEmpty()?"":L.Browser.svg?"M"+a.x+","+(a.y-b)+"A"+b+","+b+",0,1,1,"+(a.x-.1)+","+(a.y-b)+" z":(a._round(),b=Math.round(b),"AL "+a.x+","+a.y+" "+b+","+b+" 0,"+23592600)},_checkIfEmpty:function(){var a=this._map._pathViewport,b=this._radius,c=this._point;return c.x-b>a.max.x||c.y-b>a.max.y||c.x+b<a.min.x||c.y+b<a.min.y}}),L.CircleMarker=L.Circle.extend({options:{radius:10,weight:2},initialize:function(a,b){L.Circle.prototype.initialize.call(this,a,null,b),this._radius=this.options.radius},projectLatlngs:function(){this._point=this._map.latLngToLayerPoint(this._latlng)},setRadius:function(a){return this._radius=a,this._redraw(),this}}),L.Browser.canvas=function(){return!!document.createElement("canvas").getContext}(),L.Path=L.Path.SVG&&!window.L_PREFER_CANVAS||!L.Browser.canvas?L.Path:L.Path.extend({statics:{CANVAS:!0,SVG:!1},options:{updateOnMoveEnd:!0},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){this.options.stroke&&(this._ctx.lineWidth=this.options.weight,this._ctx.strokeStyle=this.options.color),this.options.fill&&(this._ctx.fillStyle=this.options.fillColor||this.options.color)},_drawPath:function(){var a,b,c,d,e,f;this._ctx.beginPath();for(a=0,c=this._parts.length;a<c;a++){for(b=0,d=this._parts[a].length;b<d;b++)e=this._parts[a][b],f=(b===0?"move":"line")+"To",this._ctx[f](e.x,e.y);this instanceof L.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(this._checkIfEmpty())return;this._drawPath(),this._ctx.save(),this._updateStyle();var a=this.options.opacity,b=this.options.fillOpacity;this.options.fill&&(b<1&&(this._ctx.globalAlpha=b),this._ctx.fill()),this.options.stroke&&(a<1&&(this._ctx.globalAlpha=a),this._ctx.stroke()),this._ctx.restore()},_initEvents:function(){this.options.clickable&&this._map.on("click",this._onClick,this)},_onClick:function(a){this._containsPoint(a.layerPoint)&&this.fire("click",a)},onRemove:function(a){a.off("viewreset",this._projectLatlngs,this),a.off(this._updateTrigger,this._updatePath,this),a.fire(this._updateTrigger)}}),L.Map.include(L.Path.SVG&&!window.L_PREFER_CANVAS||!L.Browser.canvas?{}:{_initPathRoot:function(){var a=this._pathRoot,b;a||(a=this._pathRoot=document.createElement("canvas"),a.style.position="absolute",b=this._canvasCtx=a.getContext("2d"),b.lineCap="round",b.lineJoin="round",this._panes.overlayPane.appendChild(a),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){this._updatePathViewport();var a=this._pathViewport,b=a.min,c=a.max.subtract(b),d=this._pathRoot;L.DomUtil.setPosition(d,b),d.width=c.x,d.height=c.y,d.getContext("2d").translate(-b.x,-b.y)}}),L.Polyline.include(L.Path.CANVAS?{_containsPoint:function(a,b){var c,d,e,f,g,h,i,j=this.options.weight/2;L.Browser.touch&&(j+=10);for(c=0,f=this._parts.length;c<f;c++){i=this._parts[c];for(d=0,g=i.length,e=g-1;d<g;e=d++){if(!b&&d===0)continue;h=L.LineUtil.pointToSegmentDistance(a,i[e],i[d]);if(h<=j)return!0}}return!1}}:{}),L.Polygon.include(L.Path.CANVAS?{_containsPoint:function(a){var b=!1,c,d,e,f,g,h,i,j;if(L.Polyline.prototype._containsPoint.call(this,a,!0))return!0;for(f=0,i=this._parts.length;f<i;f++){c=this._parts[f];for(g=0,j=c.length,h=j-1;g<j;h=g++)d=c[g],e=c[h],d.y>a.y!=e.y>a.y&&a.x<(e.x-d.x)*(a.y-d.y)/(e.y-d.y)+d.x&&(b=!b)}return b}}:{}),L.Circle.include(L.Path.CANVAS?{_drawPath:function(){var a=this._point;this._ctx.beginPath(),this._ctx.arc(a.x,a.y,this._radius,0,Math.PI*2)},_containsPoint:function(a){var b=this._point,c=this.options.stroke?this.options.weight/2:0;return a.distanceTo(b)<=this._radius+c}}:{}),L.GeoJSON=L.FeatureGroup.extend({initialize:function(a,b){L.Util.setOptions(this,b),this._geojson=a,this._layers={},a&&this.addGeoJSON(a)},addGeoJSON:function(a){if(a.features){for(var b=0,c=a.features.length;b<c;b++)this.addGeoJSON(a.features[b]);return}var d=a.type==="Feature",e=d?a.geometry:a,f=L.GeoJSON.geometryToLayer(e,this.options.pointToLayer);this.fire("featureparse",{layer:f,properties:a.properties,geometryType:e.type,bbox:a.bbox,id:a.id}),this.addLayer(f)}}),L.Util.extend(L.GeoJSON,{geometryToLayer:function(a,b){var c=a.coordinates,d,e,f,g,h,i=[];switch(a.type){case"Point":return d=this.coordsToLatLng(c),b?b(d):new L.Marker(d);case"MultiPoint":for(f=0,g=c.length;f<g;f++)d=this.coordsToLatLng(c[f]),h=b?b(d):new L.Marker(d),i.push(h);return new L.FeatureGroup(i);case"LineString":return e=this.coordsToLatLngs(c),new L.Polyline(e);case"Polygon":return e=this.coordsToLatLngs(c,1),new L.Polygon(e);case"MultiLineString":return e=this.coordsToLatLngs(c,1),new L.MultiPolyline(e);case"MultiPolygon":return e=this.coordsToLatLngs(c,2),new L.MultiPolygon(e);case"GeometryCollection":for(f=0,g=a.geometries.length;f<g;f++)h=this.geometryToLayer(a.geometries[f],b),i.push(h);return new L.FeatureGroup(i);default:throw Error("Invalid GeoJSON object.")}},coordsToLatLng:function(a,b){var c=parseFloat(a[b?0:1]),d=parseFloat(a[b?1:0]);return new L.LatLng(c,d,!0)},coordsToLatLngs:function(a,b,c){var d,e=[],f,g=a.length;for(f=0;f<g;f++)d=b?this.coordsToLatLngs(a[f],b-1,c):this.coordsToLatLng(a[f],c),e.push(d);return e}}),L.DomEvent={addListener:function(a,b,c,d){var e=L.Util.stamp(c),f="_leaflet_"+b+e;if(a[f])return;var g=function(b){return c.call(d||a,b||L.DomEvent._getEvent())};if(L.Browser.touch&&b==="dblclick"&&this.addDoubleTapListener)this.addDoubleTapListener(a,g,e);else if("addEventListener"in a)if(b==="mousewheel")a.addEventListener("DOMMouseScroll",g,!1),a.addEventListener(b,g,!1);else if(b==="mouseenter"||b==="mouseleave"){var h=g,i=b==="mouseenter"?"mouseover":"mouseout";g=function(b){if(!L.DomEvent._checkMouse(a,b))return;return h(b)},a.addEventListener(i,g,!1)}else a.addEventListener(b,g,!1);else"attachEvent"in a&&a.attachEvent("on"+b,g);a[f]=g},removeListener:function(a,b,c){var d=L.Util.stamp(c),e="_leaflet_"+b+d,f=a[e];if(!f)return;L.Browser.touch&&b==="dblclick"&&this.removeDoubleTapListener?this.removeDoubleTapListener(a,d):"removeEventListener"in a?b==="mousewheel"?(a.removeEventListener("DOMMouseScroll",f,!1),a.removeEventListener(b,f,!1)):b==="mouseenter"||b==="mouseleave"?a.removeEventListener(b==="mouseenter"?"mouseover":"mouseout",f,!1):a.removeEventListener(b,f,!1):"detachEvent"in a&&a.detachEvent("on"+b,f),a[e]=null},_checkMouse:function(a,b){var c=b.relatedTarget;if(!c)return!0;try{while(c&&c!==a)c=c.parentNode}catch(d){return!1}return c!==a},_getEvent:function(){var a=window.event;if(!a){var b=arguments.callee.caller;while(b){a=b.arguments[0];if(a&&window.Event===a.constructor)break;b=b.caller}}return a},stopPropagation:function(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0},disableClickPropagation:function(a){L.DomEvent.addListener(a,L.Draggable.START,L.DomEvent.stopPropagation),L.DomEvent.addListener(a,"click",L.DomEvent.stopPropagation),L.DomEvent.addListener(a,"dblclick",L.DomEvent.stopPropagation)},preventDefault:function(a){a.preventDefault?a.preventDefault():a.returnValue=!1},stop:function(a){L.DomEvent.preventDefault(a),L.DomEvent.stopPropagation(a)},getMousePosition:function(a,b){var c=a.pageX?a.pageX:a.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,d=a.pageY?a.pageY:a.clientY+document.body.scrollTop+document.documentElement.scrollTop,e=new L.Point(c,d);return b?e.subtract(L.DomUtil.getViewportOffset(b)):e},getWheelDelta:function(a){var b=0;return a.wheelDelta&&(b=a.wheelDelta/120),a.detail&&(b=-a.detail/3),b}},L.Draggable=L.Class.extend({includes:L.Mixin.Events,statics:{START:L.Browser.touch?"touchstart":"mousedown",END:L.Browser.touch?"touchend":"mouseup",MOVE:L.Browser.touch?"touchmove":"mousemove",TAP_TOLERANCE:15},initialize:function(a,b){this._element=a,this._dragStartTarget=b||a},enable:function(){if(this._enabled)return;L.DomEvent.addListener(this._dragStartTarget,L.Draggable.START,this._onDown,this),this._enabled=!0},disable:function(){if(!this._enabled)return;L.DomEvent.removeListener(this._dragStartTarget,L.Draggable.START,this._onDown),this._enabled=!1},_onDown:function(a){if(!L.Browser.touch&&a.shiftKey||a.which!==1&&a.button!==1&&!a.touches)return;if(a.touches&&a.touches.length>1)return;var b=a.touches&&a.touches.length===1?a.touches[0]:a,c=b.target;L.DomEvent.preventDefault(a),L.Browser.touch&&c.tagName.toLowerCase()==="a"&&(c.className+=" leaflet-active"),this._moved=!1;if(this._moving)return;L.Browser.touch||(L.DomUtil.disableTextSelection(),this._setMovingCursor()),this._startPos=this._newPos=L.DomUtil.getPosition(this._element),this._startPoint=new L.Point(b.clientX,b.clientY),L.DomEvent.addListener(document,L.Draggable.MOVE,this._onMove,this),L.DomEvent.addListener(document,L.Draggable.END,this._onUp,this)},_onMove:function(a){if(a.touches&&a.touches.length>1)return;L.DomEvent.preventDefault(a);var b=a.touches&&a.touches.length===1?a.touches[0]:a;this._moved||(this.fire("dragstart"),this._moved=!0),this._moving=!0;var c=new L.Point(b.clientX,b.clientY);this._newPos=this._startPos.add(c).subtract(this._startPoint),L.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget)},_updatePosition:function(){this.fire("predrag"),L.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(a){if(a.changedTouches){var b=a.changedTouches[0],c=b.target,d=this._newPos&&this._newPos.distanceTo(this._startPos)||0;c.tagName.toLowerCase()==="a"&&(c.className=c.className.replace(" leaflet-active","")),d<L.Draggable.TAP_TOLERANCE&&this._simulateEvent("click",b)}L.Browser.touch||(L.DomUtil.enableTextSelection(),this._restoreCursor()),L.DomEvent.removeListener(document,L.Draggable.MOVE,this._onMove),L.DomEvent.removeListener(document,L.Draggable.END,this._onUp),this._moved&&this.fire("dragend"),this._moving=!1},_setMovingCursor:function(){this._bodyCursor=document.body.style.cursor,document.body.style.cursor="move"},_restoreCursor:function(){document.body.style.cursor=this._bodyCursor},_simulateEvent:function(a,b){var c=document.createEvent("MouseEvents");c.initMouseEvent(a,!0,!0,window,1,b.screenX,b.screenY,b.clientX,b.clientY,!1,!1,!1,!1,0,null),b.target.dispatchEvent(c)}}),L.Handler=L.Class.extend({initialize:function(a){this._map=a},enable:function(){if(this._enabled)return;this._enabled=!0,this.addHooks()},disable:function(){if(!this._enabled)return;this._enabled=!1,this.removeHooks()},enabled:function(){return!!this._enabled}}),L.Map.Drag=L.Handler.extend({addHooks:function(){if(!this._draggable){this._draggable=new L.Draggable(this._map._mapPane,this._map._container),this._draggable.on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this);var a=this._map.options;a.worldCopyJump&&!a.continuousWorld&&(this._draggable.on("predrag",this._onPreDrag,this),this._map.on("viewreset",this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._map.fire("movestart").fire("dragstart")},_onDrag:function(){this._map.fire("move").fire("drag")},_onViewReset:function(){var a=this._map.getSize().divideBy(2),b=this._map.latLngToLayerPoint(new L.LatLng(0,0));this._initialWorldOffset=b.subtract(a)},_onPreDrag:function(){var a=this._map,b=a.options.scale(a.getZoom()),c=Math.round(b/2),d=this._initialWorldOffset.x,e=this._draggable._newPos.x,f=(e-c+d)%b+c-d,g=(e+c+d)%b-c-d,h=Math.abs(f+d)<Math.abs(g+d)?f:g;this._draggable._newPos.x=h},_onDragEnd:function(){var a=this._map;a.fire("moveend").fire("dragend"),a.options.maxBounds&&L.Util.requestAnimFrame(this._panInsideMaxBounds,a,!0,a._container)},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)}}),L.Map.DoubleClickZoom=L.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick)},_onDoubleClick:function(a){this.setView(a.latlng,this._zoom+1)}}),L.Map.ScrollWheelZoom=L.Handler.extend({addHooks:function(){L.DomEvent.addListener(this._map._container,"mousewheel",this._onWheelScroll,this),this._delta=0},removeHooks:function(){L.DomEvent.removeListener(this._map._container,"mousewheel",this._onWheelScroll)},_onWheelScroll:function(a){var b=L.DomEvent.getWheelDelta(a);this._delta+=b,this._lastMousePos=this._map.mouseEventToContainerPoint(a),clearTimeout(this._timer),this._timer=setTimeout(L.Util.bind(this._performZoom,this),50),L.DomEvent.preventDefault(a)},_performZoom:function(){var a=this._map,b=Math.round(this._delta),c=a.getZoom();b=Math.max(Math.min(b,4),-4),b=a._limitZoom(c+b)-c,this._delta=0;if(!b)return;var d=this._getCenterForScrollWheelZoom(this._lastMousePos,b),e=c+b;a.setView(d,e)},_getCenterForScrollWheelZoom:function(a,b){var c=this._map,d=c.getPixelBounds().getCenter(),e=c.getSize().divideBy(2),f=a.subtract(e).multiplyBy(1-Math.pow(2,-b)),g=d.add(f);return c.unproject(g,c._zoom,!0)}}),L.Util.extend(L.DomEvent,{addDoubleTapListener:function(a,b,c){function k(a){if(a.touches.length!==1)return;var b=Date.now(),c=b-(d||b);g=a.touches[0],e=c>0&&c<=f,d=b}function l(a){e&&(g.type="dblclick",b(g),d=null)}var d,e=!1,f=250,g,h="_leaflet_",i="touchstart",j="touchend";a[h+i+c]=k,a[h+j+c]=l,a.addEventListener(i,k,!1),a.addEventListener(j,l,!1)},removeDoubleTapListener:function(a,b){var c="_leaflet_";a.removeEventListener(a,a[c+"touchstart"+b],!1),a.removeEventListener(a,a[c+"touchend"+b],!1)}}),L.Map.TouchZoom=L.Handler.extend({addHooks:function(){L.DomEvent.addListener(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){L.DomEvent.removeListener(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(a){if(!a.touches||a.touches.length!==2||this._map._animatingZoom)return;var b=this._map.mouseEventToLayerPoint(a.touches[0]),c=this._map.mouseEventToLayerPoint(a.touches[1]),d=this._map.containerPointToLayerPoint(this._map.getSize().divideBy(2));this._startCenter=b.add(c).divideBy(2,!0),this._startDist=b.distanceTo(c),this._moved=!1,this._zooming=!0,this._centerOffset=d.subtract(this._startCenter),L.DomEvent.addListener(document,"touchmove",this._onTouchMove,this),L.DomEvent.addListener(document,"touchend",this._onTouchEnd,this),L.DomEvent.preventDefault(a)},_onTouchMove:function(a){if(!a.touches||a.touches.length!==2)return;this._moved||(this._map._mapPane.className+=" leaflet-zoom-anim",this._map.fire("zoomstart").fire("movestart")._prepareTileBg(),this._moved=!0);var b=this._map.mouseEventToLayerPoint(a.touches[0]),c=this._map.mouseEventToLayerPoint(a.touches[1]);this._scale=b.distanceTo(c)/this._startDist,this._delta=b.add(c).divideBy(2,!0).subtract(this._startCenter),this._map._tileBg.style.webkitTransform=[L.DomUtil.getTranslateString(this._delta),L.DomUtil.getScaleString(this._scale,this._startCenter)].join(" "),L.DomEvent.preventDefault(a)},_onTouchEnd:function(a){if(!this._moved||!this._zooming)return;this._zooming=!1;var b=this._map.getZoom(),c=Math.log(this._scale)/Math.LN2,d=c>0?Math.ceil(c):Math.floor(c),e=this._map._limitZoom(b+d),f=e-b,g=this._centerOffset.subtract(this._delta).divideBy(this._scale),h=this._map.getPixelOrigin().add(this._startCenter).add(g),i=this._map.unproject(h);L.DomEvent.removeListener(document,"touchmove",this._onTouchMove),L.DomEvent.removeListener(document,"touchend",this._onTouchEnd);var j=Math.pow(2,f);this._map._runAnimation(i,e,j/this._scale,this._startCenter.add(g))}}),L.Map.BoxZoom=L.Handler.extend({initialize:function(a){this._map=a,this._container=a._container,this._pane=a._panes.overlayPane},addHooks:function(){L.DomEvent.addListener(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){L.DomEvent.removeListener(this._container,"mousedown",this._onMouseDown)},_onMouseDown:function(a){if(!a.shiftKey||a.which!==1&&a.button!==1)return!1;L.DomUtil.disableTextSelection(),this._startLayerPoint=this._map.mouseEventToLayerPoint(a),this._box=L.DomUtil.create("div","leaflet-zoom-box",this._pane),L.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",L.DomEvent.addListener(document,"mousemove",this._onMouseMove,this),L.DomEvent.addListener(document,"mouseup",this._onMouseUp,this),L.DomEvent.preventDefault(a)},_onMouseMove:function(a){var b=this._map.mouseEventToLayerPoint(a),c=b.x-this._startLayerPoint.x,d=b.y-this._startLayerPoint.y,e=Math.min(b.x,this._startLayerPoint.x),f=Math.min(b.y,this._startLayerPoint.y),g=new L.Point(e,f);L.DomUtil.setPosition(this._box,g),this._box.style.width=Math.abs(c)-4+"px",this._box.style.height=Math.abs(d)-4+"px"},_onMouseUp:function(a){this._pane.removeChild(this._box),this._container.style.cursor="",L.DomUtil.enableTextSelection(),L.DomEvent.removeListener(document,"mousemove",this._onMouseMove),L.DomEvent.removeListener(document,"mouseup",this._onMouseUp);var b=this._map.mouseEventToLayerPoint(a),c=new L.LatLngBounds(this._map.layerPointToLatLng(this._startLayerPoint),this._map.layerPointToLatLng(b));this._map.fitBounds(c)}}),L.Handler.MarkerDrag=L.Handler.extend({initialize:function(a){this._marker=a},addHooks:function(){var a=this._marker._icon;this._draggable||(this._draggable=new L.Draggable(a,a),this._draggable.on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this)),this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(a){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(a){var b=L.DomUtil.getPosition(this._marker._icon);this._marker._shadow&&L.DomUtil.setPosition(this._marker._shadow,b),this._marker._latlng=this._marker._map.layerPointToLatLng(b),this._marker.fire("move").fire("drag")},_onDragEnd:function(){this._marker.fire("moveend").fire("dragend")}}),L.Control={},L.Control.Position={TOP_LEFT:"topLeft",TOP_RIGHT:"topRight",BOTTOM_LEFT:"bottomLeft",BOTTOM_RIGHT:"bottomRight"},L.Map.include({addControl:function(a){a.onAdd(this);var b=a.getPosition(),c=this._controlCorners[b],d=a.getContainer();return L.DomUtil.addClass(d,"leaflet-control"),b.indexOf("bottom")!==-1?c.insertBefore(d,c.firstChild):c.appendChild(d),this},removeControl:function(a){var b=a.getPosition(),c=this._controlCorners[b],d=a.getContainer();return c.removeChild(d),a.onRemove&&a.onRemove(this),this},_initControlPos:function(){var a=this._controlCorners={},b="leaflet-",c=b+"top",d=b+"bottom",e=b+"left",f=b+"right",g=L.DomUtil.create("div",b+"control-container",this._container);L.Browser.touch&&(g.className+=" "+b+"big-buttons"),a.topLeft=L.DomUtil.create("div",c+" "+e,g),a.topRight=L.DomUtil.create("div",c+" "+f,g),a.bottomLeft=L.DomUtil.create("div",d+" "+e,g),a.bottomRight=L.DomUtil.create("div",d+" "+f,g)}}),L.Control.Zoom=L.Class.extend({onAdd:function(a){this._map=a,this._container=L.DomUtil.create("div","leaflet-control-zoom"),this._zoomInButton=this._createButton("Zoom in","leaflet-control-zoom-in",this._map.zoomIn,this._map),this._zoomOutButton=this._createButton("Zoom out","leaflet-control-zoom-out",this._map.zoomOut,this._map),this._container.appendChild(this._zoomInButton),this._container.appendChild(this._zoomOutButton)},getContainer:function(){return this._container},getPosition:function(){return L.Control.Position.TOP_LEFT},_createButton:function(a,b,c,d){var e=document.createElement("a");return e.href="#",e.title=a,e.className=b,L.DomEvent.disableClickPropagation(e),L.DomEvent.addListener(e,"click",L.DomEvent.preventDefault),L.DomEvent.addListener(e,"click",c,d),e}}),L.Control.Attribution=L.Class.extend({initialize:function(a){this._prefix=a||'Powered by <a href="http://leaflet.cloudmade.com">Leaflet</a>',this._attributions={}},onAdd:function(a){this._container=L.DomUtil.create("div","leaflet-control-attribution"),L.DomEvent.disableClickPropagation(this._container),this._map=a,this._update()},getPosition:function(){return L.Control.Position.BOTTOM_RIGHT},getContainer:function(){return this._container},setPrefix:function(a){this._prefix=a,this._update()},addAttribution:function(a){if(!a)return;this._attributions[a]=!0,this._update()},removeAttribution:function(a){if(!a)return;delete this._attributions[a],this._update()},_update:function(){if(!this._map)return;var a=[];for(var b in this._attributions)this._attributions.hasOwnProperty(b)&&a.push(b);var c=[];this._prefix&&c.push(this._prefix),a.length&&c.push(a.join(", ")),this._container.innerHTML=c.join(" &mdash; ")}}),L.Control.Layers=L.Class.extend({options:{collapsed:!L.Browser.touch},initialize:function(a,b,c){L.Util.setOptions(this,c),this._layers={};for(var d in a)a.hasOwnProperty(d)&&this._addLayer(a[d],d);for(d in b)b.hasOwnProperty(d)&&this._addLayer(b[d],d,!0)},onAdd:function(a){this._map=a,this._initLayout(),this._update()},getContainer:function(){return this._container},getPosition:function(){return L.Control.Position.TOP_RIGHT},addBaseLayer:function(a,b){return this._addLayer(a,b),this._update(),this},addOverlay:function(a,b){return this._addLayer(a,b,!0),this._update(),this},removeLayer:function(a){var b=L.Util.stamp(a);return delete this._layers[b],this._update(),this},_initLayout:function(){this._container=L.DomUtil.create("div","leaflet-control-layers"),L.DomEvent.disableClickPropagation(this._container),this._form=L.DomUtil.create("form","leaflet-control-layers-list");if(this.options.collapsed){L.DomEvent.addListener(this._container,"mouseover",this._expand,this),L.DomEvent.addListener(this._container,"mouseout",this._collapse,this);var a=this._layersLink=L.DomUtil.create("a","leaflet-control-layers-toggle");a.href="#",a.title="Layers",L.DomEvent.addListener(a,"focus",this._expand,this),L.DomEvent.addListener(this._map,L.Draggable.START,this._collapse,this),this._container.appendChild(a)}else this._expand();this._baseLayersList=L.DomUtil.create("div","leaflet-control-layers-base",this._form),this._separator=L.DomUtil.create("div","leaflet-control-layers-separator",this._form),this._overlaysList=L.DomUtil.create("div","leaflet-control-layers-overlays",this._form),this._container.appendChild(this._form)},_addLayer:function(a,b,c){var d=L.Util.stamp(a);this._layers[d]={layer:a,name:b,overlay:c}},_update:function(){if(!this._container)return;this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var a=!1,b=!1;for(var c in this._layers)if(this._layers.hasOwnProperty(c)){var d=this._layers[c];this._addItem(d),b=b||d.overlay,a=a||!d.overlay}this._separator.style.display=b&&a?"":"none"},_addItem:function(a,b){var c=document.createElement("label"),d=document.createElement("input");a.overlay||(d.name="leaflet-base-layers"),d.type=a.overlay?"checkbox":"radio",d.checked=this._map.hasLayer(a.layer),d.layerId=L.Util.stamp(a.layer),L.DomEvent.addListener(d,"click",this._onInputClick,this);var e=document.createTextNode(" "+a.name);c.appendChild(d),c.appendChild(e);var f=a.overlay?this._overlaysList:this._baseLayersList;f.appendChild(c)},_onInputClick:function(){var a,b,c,d=this._form.getElementsByTagName("input"),e=d.length;for(a=0;a<e;a++)b=d[a],c=this._layers[b.layerId],b.checked?this._map.addLayer(c.layer,!c.overlay):this._map.removeLayer(c.layer)},_expand:function(){L.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),L.Transition=L.Class.extend({includes:L.Mixin.Events,statics:{CUSTOM_PROPS_SETTERS:{position:L.DomUtil.setPosition},implemented:function(){return L.Transition.NATIVE||L.Transition.TIMER}},options:{easing:"ease",duration:.5},_setProperty:function(a,b){var c=L.Transition.CUSTOM_PROPS_SETTERS;a in c?c[a](this._el,b):this._el.style[a]=b}}),L.Transition=L.Transition.extend({statics:function(){var a=L.DomUtil.TRANSITION,b=a==="webkitTransition"||a==="OTransition"?a+"End":"transitionend";return{NATIVE:!!a,TRANSITION:a,PROPERTY:a+"Property",DURATION:a+"Duration",EASING:a+"TimingFunction",END:b,CUSTOM_PROPS_PROPERTIES:{position:L.Browser.webkit?L.DomUtil.TRANSFORM:"top, left"}}}(),options:{fakeStepInterval:100},initialize:function(a,b){this._el=a,L.Util.setOptions(this,b),L.DomEvent.addListener(a,L.Transition.END,this._onTransitionEnd,this),this._onFakeStep=L.Util.bind(this._onFakeStep,this)},run:function(a){var b,c=[],d=L.Transition.CUSTOM_PROPS_PROPERTIES;for(b in a)a.hasOwnProperty(b)&&(b=d[b]?d[b]:b,b=this._dasherize(b),c.push(b));this._el.style[L.Transition.DURATION]=this.options.duration+"s",this._el.style[L.Transition.EASING]=this.options.easing,this._el.style[L.Transition.PROPERTY]=c.join(", ");for(b in a)a.hasOwnProperty(b)&&this._setProperty(b,a[b]);this._inProgress=!0,this.fire("start"),L.Transition.NATIVE?(clearInterval(this._timer),this._timer=setInterval(this._onFakeStep,this.options.fakeStepInterval)):this._onTransitionEnd()},_dasherize:function(){function b(a){return"-"+a.toLowerCase()}var a=/([A-Z])/g;return function(c){return c.replace(a,b)}}(),_onFakeStep:function(){this.fire("step")},_onTransitionEnd:function(){this._inProgress&&(this._inProgress=!1,clearInterval(this._timer),this._el.style[L.Transition.PROPERTY]="none",this.fire("step"),this.fire("end"))}}),L.Transition=L.Transition.NATIVE?L.Transition:L.Transition.extend({statics:{getTime:Date.now||function(){return+(new Date)},TIMER:!0,EASINGS:{ease:[.25,.1,.25,1],linear:[0,0,1,1],"ease-in":[.42,0,1,1],"ease-out":[0,0,.58,1],"ease-in-out":[.42,0,.58,1]},CUSTOM_PROPS_GETTERS:{position:L.DomUtil.getPosition},UNIT_RE:/^[\d\.]+(\D*)$/},options:{fps:50},initialize:function(a,b){this._el=a,L.Util.extend(this.options,b);var c=L.Transition.EASINGS[this.options.easing]||L.Transition.EASINGS.ease;this._p1=new L.Point(0,0),this._p2=new L.Point(c[0],c[1]),this._p3=new L.Point(c[2],c[3]),this._p4=new L.Point(1,1),this._step=L.Util.bind(this._step,this),this._interval=Math.round(1e3/this.options.fps)},run:function(a){this._props={};var b=L.Transition.CUSTOM_PROPS_GETTERS,c=L.Transition.UNIT_RE;this.fire("start");for(var d in a)if(a.hasOwnProperty(d)){var e={};if(d in b)e.from=b[d](this._el);else{var f=this._el.style[d].match(c);e.from=parseFloat(f[0]),e.unit=f[1]}e.to=a[d],this._props[d]=e}clearInterval(this._timer),this._timer=setInterval(this._step,this._interval),this._startTime=L.Transition.getTime()},_step:function(){var a=L.Transition.getTime(),b=a-this._startTime,c=this.options.duration*1e3;b<c?this._runFrame(this._cubicBezier(b/c)):(this._runFrame(1),this._complete())},_runFrame:function(a){var b=L.Transition.CUSTOM_PROPS_SETTERS,c,d,e;for(c in this._props)this._props.hasOwnProperty(c)&&(d=this._props[c],c in b?(e=d.to.subtract(d.from).multiplyBy(a).add(d.from),b[c](this._el,e)):this._el.style[c]=(d.to-d.from)*a+d.from+d.unit);this.fire("step")},_complete:function(){clearInterval(this._timer),this.fire("end")},_cubicBezier:function(a){var b=Math.pow(1-a,3),c=3*Math.pow(1-a,2)*a,d=3*(1-a)*Math.pow(a,2),e=Math.pow(a,3),f=this._p1.multiplyBy(b),g=this._p2.multiplyBy(c),h=this._p3.multiplyBy(d),i=this._p4.multiplyBy(e);return f.add(g).add(h).add(i).y}}),L.Map.include(!L.Transition||!L.Transition.implemented()?{}:{setView:function(a,b,c){b=this._limitZoom(b);var d=this._zoom!==b;if(this._loaded&&!c&&this._layers){var e=this._getNewTopLeftPoint(a).subtract(this._getTopLeftPoint());a=new L.LatLng(a.lat,a.lng);var f=d?!!this._zoomToIfCenterInView&&this._zoomToIfCenterInView(a,b,e):this._panByIfClose(e);if(f)return this}return this._resetView(a,b),this},panBy:function(a){return!a.x&&!a.y?this:(this._panTransition||(this._panTransition=new L.Transition(this._mapPane,{duration:.3}),this._panTransition.on("step",this._onPanTransitionStep,this),this._panTransition.on("end",this._onPanTransitionEnd,this)),this.fire("movestart"),this._panTransition.run({position:L.DomUtil.getPosition(this._mapPane).subtract(a)}),this)},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){this.fire("moveend")},_panByIfClose:function(a){return this._offsetIsWithinView(a)?(this.panBy(a),!0):!1},_offsetIsWithinView:function(a,b){var c=b||1,d=this.getSize();return Math.abs(a.x)<=d.x*c&&Math.abs(a.y)<=d.y*c}}),L.Map.include(L.DomUtil.TRANSITION?{_zoomToIfCenterInView:function(a,b,c){if(this._animatingZoom)return!0;if(!this.options.zoomAnimation)return!1;var d=b-this._zoom,e=Math.pow(2,d),f=c.divideBy(1-1/e);if(!this._offsetIsWithinView(f,1))return!1;this._mapPane.className+=" leaflet-zoom-anim",this.fire("movestart").fire("zoomstart");var g=this.containerPointToLayerPoint(this.getSize().divideBy(2)),h=g.add(f);return this._prepareTileBg(),this._runAnimation(a,b,e,h),!0},_runAnimation:function(a,b,c,d){this._animatingZoom=!0,this._animateToCenter=a,this._animateToZoom=b;var e=L.DomUtil.TRANSFORM;if(L.Browser.gecko||window.opera)this._tileBg.style[e]+=" translate(0,0)";var f;L.Browser.android?(this._tileBg.style[e+"Origin"]=d.x+"px "+d.y+"px",f="scale("+c+")"):f=L.DomUtil.getScaleString(c,d),L.Util.falseFn(this._tileBg.offsetWidth);var g={};g[e]=this._tileBg.style[e]+" "+f,this._tileBg.transition.run(g)},_prepareTileBg:function(){this._tileBg||(this._tileBg=this._createPane("leaflet-tile-pane",this._mapPane),this._tileBg.style.zIndex=1);var a=this._tilePane,b=this._tileBg;b.style[L.DomUtil.TRANSFORM]="",b.style.visibility="hidden",b.empty=!0,a.empty=!1,this._tilePane=this._panes.tilePane=b,this._tileBg=a,this._tileBg.transition||(this._tileBg.transition=new L.Transition(this._tileBg,{duration:.3,easing:"cubic-bezier(0.25,0.1,0.25,0.75)"}),this._tileBg.transition.on("end",this._onZoomTransitionEnd,this)),this._stopLoadingBgTiles()},_stopLoadingBgTiles:function(){var a=[].slice.call(this._tileBg.getElementsByTagName("img"));for(var b=0,c=a.length;b<c;b++)a[b].complete||(a[b].parentNode.removeChild(a[b]),a[b]=null)},_onZoomTransitionEnd:function(){this._restoreTileFront(),L.Util.falseFn(this._tileBg.offsetWidth),this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),this._mapPane.className=this._mapPane.className.replace(" leaflet-zoom-anim",""),this._animatingZoom=!1},_restoreTileFront:function(){this._tilePane.innerHTML="",this._tilePane.style.visibility="",this._tilePane.style.zIndex=2,this._tileBg.style.zIndex=1},_clearTileBg:function(){!this._animatingZoom&&!this.touchZoom._zooming&&(this._tileBg.innerHTML="")}}:{}),L.Map.include({locate:function(a){this._locationOptions=a=L.Util.extend({watch:!1,setView:!1,maxZoom:Infinity,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},a);if(!navigator.geolocation)return this.fire("locationerror",{code:0,message:"Geolocation not supported."});var b=L.Util.bind(this._handleGeolocationResponse,this),c=L.Util.bind(this._handleGeolocationError,this);return a.watch?this._locationWatchId=navigator.geolocation.watchPosition(b,c,a):navigator.geolocation.getCurrentPosition(b,c,a),this},stopLocate:function(){navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId)},locateAndSetView:function(a,b){return b=L.Util.extend({maxZoom:a||Infinity,setView:!0},b),this.locate(b)},_handleGeolocationError:function(a){var b=a.code,c=b===1?"permission denied":b===2?"position unavailable":"timeout";this._locationOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:b,message:"Geolocation error: "+c+"."})},_handleGeolocationResponse:function(a){var b=180*a.coords.accuracy/4e7,c=b*2,d=a.coords.latitude,e=a.coords.longitude,f=new L.LatLng(d,e),g=new L.LatLng(d-b,e-c),h=new L.LatLng(d+b,e+c),i=new L.LatLngBounds(g,h);if(this._locationOptions.setView){var j=Math.min(this.getBoundsZoom(i),this._locationOptions.maxZoom);this.setView(f,j)}this.fire("locationfound",{latlng:f,bounds:i,accuracy:a.coords.accuracy})}});
\ No newline at end of file
--- a/web/hdalab/static/hdalab/lib/mustache.js	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,436 +0,0 @@
-/*
-  mustache.js — Logic-less templates in JavaScript
-
-  See http://mustache.github.com/ for more info.
-*/
-
-var Mustache = function () {
-  var _toString = Object.prototype.toString;
-
-  Array.isArray = Array.isArray || function (obj) {
-    return _toString.call(obj) == "[object Array]";
-  }
-
-  var _trim = String.prototype.trim, trim;
-
-  if (_trim) {
-    trim = function (text) {
-      return text == null ? "" : _trim.call(text);
-    }
-  } else {
-    var trimLeft, trimRight;
-
-    // IE doesn't match non-breaking spaces with \s.
-    if ((/\S/).test("\xA0")) {
-      trimLeft = /^[\s\xA0]+/;
-      trimRight = /[\s\xA0]+$/;
-    } else {
-      trimLeft = /^\s+/;
-      trimRight = /\s+$/;
-    }
-
-    trim = function (text) {
-      return text == null ? "" :
-        text.toString().replace(trimLeft, "").replace(trimRight, "");
-    }
-  }
-
-  var escapeMap = {
-    "&": "&amp;",
-    "<": "&lt;",
-    ">": "&gt;",
-    '"': '&quot;',
-    "'": '&#39;'
-  };
-
-  function escapeHTML(string) {
-    return String(string).replace(/&(?!\w+;)|[<>"']/g, function (s) {
-      return escapeMap[s] || s;
-    });
-  }
-
-  var regexCache = {};
-  var Renderer = function () {};
-
-  Renderer.prototype = {
-    otag: "{{",
-    ctag: "}}",
-    pragmas: {},
-    buffer: [],
-    pragmas_implemented: {
-      "IMPLICIT-ITERATOR": true
-    },
-    context: {},
-
-    render: function (template, context, partials, in_recursion) {
-      // reset buffer & set context
-      if (!in_recursion) {
-        this.context = context;
-        this.buffer = []; // TODO: make this non-lazy
-      }
-
-      // fail fast
-      if (!this.includes("", template)) {
-        if (in_recursion) {
-          return template;
-        } else {
-          this.send(template);
-          return;
-        }
-      }
-
-      // get the pragmas together
-      template = this.render_pragmas(template);
-
-      // render the template
-      var html = this.render_section(template, context, partials);
-
-      // render_section did not find any sections, we still need to render the tags
-      if (html === false) {
-        html = this.render_tags(template, context, partials, in_recursion);
-      }
-
-      if (in_recursion) {
-        return html;
-      } else {
-        this.sendLines(html);
-      }
-    },
-
-    /*
-      Sends parsed lines
-    */
-    send: function (line) {
-      if (line !== "") {
-        this.buffer.push(line);
-      }
-    },
-
-    sendLines: function (text) {
-      if (text) {
-        var lines = text.split("\n");
-        for (var i = 0; i < lines.length; i++) {
-          this.send(lines[i]);
-        }
-      }
-    },
-
-    /*
-      Looks for %PRAGMAS
-    */
-    render_pragmas: function (template) {
-      // no pragmas
-      if (!this.includes("%", template)) {
-        return template;
-      }
-
-      var that = this;
-      var regex = this.getCachedRegex("render_pragmas", function (otag, ctag) {
-        return new RegExp(otag + "%([\\w-]+) ?([\\w]+=[\\w]+)?" + ctag, "g");
-      });
-
-      return template.replace(regex, function (match, pragma, options) {
-        if (!that.pragmas_implemented[pragma]) {
-          throw({message:
-            "This implementation of mustache doesn't understand the '" +
-            pragma + "' pragma"});
-        }
-        that.pragmas[pragma] = {};
-        if (options) {
-          var opts = options.split("=");
-          that.pragmas[pragma][opts[0]] = opts[1];
-        }
-        return "";
-        // ignore unknown pragmas silently
-      });
-    },
-
-    /*
-      Tries to find a partial in the curent scope and render it
-    */
-    render_partial: function (name, context, partials) {
-      name = trim(name);
-      if (!partials || partials[name] === undefined) {
-        throw({message: "unknown_partial '" + name + "'"});
-      }
-      if (!context || typeof context[name] != "object") {
-        return this.render(partials[name], context, partials, true);
-      }
-      return this.render(partials[name], context[name], partials, true);
-    },
-
-    /*
-      Renders inverted (^) and normal (#) sections
-    */
-    render_section: function (template, context, partials) {
-      if (!this.includes("#", template) && !this.includes("^", template)) {
-        // did not render anything, there were no sections
-        return false;
-      }
-
-      var that = this;
-
-      var regex = this.getCachedRegex("render_section", function (otag, ctag) {
-        // This regex matches _the first_ section ({{#foo}}{{/foo}}), and captures the remainder
-        return new RegExp(
-          "^([\\s\\S]*?)" +         // all the crap at the beginning that is not {{*}} ($1)
-
-          otag +                    // {{
-          "(\\^|\\#)\\s*(.+)\\s*" + //  #foo (# == $2, foo == $3)
-          ctag +                    // }}
-
-          "\n*([\\s\\S]*?)" +       // between the tag ($2). leading newlines are dropped
-
-          otag +                    // {{
-          "\\/\\s*\\3\\s*" +        //  /foo (backreference to the opening tag).
-          ctag +                    // }}
-
-          "\\s*([\\s\\S]*)$",       // everything else in the string ($4). leading whitespace is dropped.
-
-        "g");
-      });
-
-
-      // for each {{#foo}}{{/foo}} section do...
-      return template.replace(regex, function (match, before, type, name, content, after) {
-        // before contains only tags, no sections
-        var renderedBefore = before ? that.render_tags(before, context, partials, true) : "",
-
-        // after may contain both sections and tags, so use full rendering function
-            renderedAfter = after ? that.render(after, context, partials, true) : "",
-
-        // will be computed below
-            renderedContent,
-
-            value = that.find(name, context);
-
-        if (type === "^") { // inverted section
-          if (!value || Array.isArray(value) && value.length === 0) {
-            // false or empty list, render it
-            renderedContent = that.render(content, context, partials, true);
-          } else {
-            renderedContent = "";
-          }
-        } else if (type === "#") { // normal section
-          if (Array.isArray(value)) { // Enumerable, Let's loop!
-            renderedContent = that.map(value, function (row) {
-              return that.render(content, that.create_context(row), partials, true);
-            }).join("");
-          } else if (that.is_object(value)) { // Object, Use it as subcontext!
-            renderedContent = that.render(content, that.create_context(value),
-              partials, true);
-          } else if (typeof value == "function") {
-            // higher order section
-            renderedContent = value.call(context, content, function (text) {
-              return that.render(text, context, partials, true);
-            });
-          } else if (value) { // boolean section
-            renderedContent = that.render(content, context, partials, true);
-          } else {
-            renderedContent = "";
-          }
-        }
-
-        return renderedBefore + renderedContent + renderedAfter;
-      });
-    },
-
-    /*
-      Replace {{foo}} and friends with values from our view
-    */
-    render_tags: function (template, context, partials, in_recursion) {
-      // tit for tat
-      var that = this;
-
-      var new_regex = function () {
-        return that.getCachedRegex("render_tags", function (otag, ctag) {
-          return new RegExp(otag + "(=|!|>|&|\\{|%)?([^#\\^]+?)\\1?" + ctag + "+", "g");
-        });
-      };
-
-      var regex = new_regex();
-      var tag_replace_callback = function (match, operator, name) {
-        switch(operator) {
-        case "!": // ignore comments
-          return "";
-        case "=": // set new delimiters, rebuild the replace regexp
-          that.set_delimiters(name);
-          regex = new_regex();
-          return "";
-        case ">": // render partial
-          return that.render_partial(name, context, partials);
-        case "{": // the triple mustache is unescaped
-        case "&": // & operator is an alternative unescape method
-          return that.find(name, context);
-        default: // escape the value
-          return escapeHTML(that.find(name, context));
-        }
-      };
-      var lines = template.split("\n");
-      for(var i = 0; i < lines.length; i++) {
-        lines[i] = lines[i].replace(regex, tag_replace_callback, this);
-        if (!in_recursion) {
-          this.send(lines[i]);
-        }
-      }
-
-      if (in_recursion) {
-        return lines.join("\n");
-      }
-    },
-
-    set_delimiters: function (delimiters) {
-      var dels = delimiters.split(" ");
-      this.otag = this.escape_regex(dels[0]);
-      this.ctag = this.escape_regex(dels[1]);
-    },
-
-    escape_regex: function (text) {
-      // thank you Simon Willison
-      if (!arguments.callee.sRE) {
-        var specials = [
-          '/', '.', '*', '+', '?', '|',
-          '(', ')', '[', ']', '{', '}', '\\'
-        ];
-        arguments.callee.sRE = new RegExp(
-          '(\\' + specials.join('|\\') + ')', 'g'
-        );
-      }
-      return text.replace(arguments.callee.sRE, '\\$1');
-    },
-
-    /*
-      find `name` in current `context`. That is find me a value
-      from the view object
-    */
-    find: function (name, context) {
-      name = trim(name);
-
-      // Checks whether a value is thruthy or false or 0
-      function is_kinda_truthy(bool) {
-        return bool === false || bool === 0 || bool;
-      }
-
-      var value;
-
-      // check for dot notation eg. foo.bar
-      if (name.match(/([a-z_]+)\./ig)) {
-        var childValue = this.walk_context(name, context);
-        if (is_kinda_truthy(childValue)) {
-          value = childValue;
-        }
-      } else {
-        if (is_kinda_truthy(context[name])) {
-          value = context[name];
-        } else if (is_kinda_truthy(this.context[name])) {
-          value = this.context[name];
-        }
-      }
-
-      if (typeof value == "function") {
-        return value.apply(context);
-      }
-      if (value !== undefined) {
-        return value;
-      }
-      // silently ignore unkown variables
-      return "";
-    },
-
-    walk_context: function (name, context) {
-      var path = name.split('.');
-      // if the var doesn't exist in current context, check the top level context
-      var value_context = (context[path[0]] != undefined) ? context : this.context;
-      var value = value_context[path.shift()];
-      while (value != undefined && path.length > 0) {
-        value_context = value;
-        value = value[path.shift()];
-      }
-      // if the value is a function, call it, binding the correct context
-      if (typeof value == "function") {
-        return value.apply(value_context);
-      }
-      return value;
-    },
-
-    // Utility methods
-
-    /* includes tag */
-    includes: function (needle, haystack) {
-      return haystack.indexOf(this.otag + needle) != -1;
-    },
-
-    // by @langalex, support for arrays of strings
-    create_context: function (_context) {
-      if (this.is_object(_context)) {
-        return _context;
-      } else {
-        var iterator = ".";
-        if (this.pragmas["IMPLICIT-ITERATOR"]) {
-          iterator = this.pragmas["IMPLICIT-ITERATOR"].iterator;
-        }
-        var ctx = {};
-        ctx[iterator] = _context;
-        return ctx;
-      }
-    },
-
-    is_object: function (a) {
-      return a && typeof a == "object";
-    },
-
-    /*
-      Why, why, why? Because IE. Cry, cry cry.
-    */
-    map: function (array, fn) {
-      if (typeof array.map == "function") {
-        return array.map(fn);
-      } else {
-        var r = [];
-        var l = array.length;
-        for(var i = 0; i < l; i++) {
-          r.push(fn(array[i]));
-        }
-        return r;
-      }
-    },
-
-    getCachedRegex: function (name, generator) {
-      var byOtag = regexCache[this.otag];
-      if (!byOtag) {
-        byOtag = regexCache[this.otag] = {};
-      }
-
-      var byCtag = byOtag[this.ctag];
-      if (!byCtag) {
-        byCtag = byOtag[this.ctag] = {};
-      }
-
-      var regex = byCtag[name];
-      if (!regex) {
-        regex = byCtag[name] = generator(this.otag, this.ctag);
-      }
-
-      return regex;
-    }
-  };
-
-  return({
-    name: "mustache.js",
-    version: "0.5.0-dev",
-
-    /*
-      Turns a template and view into HTML
-    */
-    to_html: function (template, view, partials, send_fun) {
-      var renderer = new Renderer();
-      if (send_fun) {
-        renderer.send = send_fun;
-      }
-      renderer.render(template, view || {}, partials);
-      if (!send_fun) {
-        return renderer.buffer.join("\n");
-      }
-    }
-  });
-}();
--- a/web/hdalab/static/hdalab/lib/raphael-min.js	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,116 +0,0 @@
-/*
- * Raphael 1.4.7 - JavaScript Vector Library
- *
- * Copyright (c) 2010 Dmitry Baranovskiy (http://raphaeljs.com)
- * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
- */
-Raphael=function(){function l(){if(l.is(arguments[0],U)){for(var a=arguments[0],b=Ca[K](l,a.splice(0,3+l.is(a[0],P))),c=b.set(),d=0,f=a[o];d<f;d++){var e=a[d]||{};sb.test(e.type)&&c[F](b[e.type]().attr(e))}return c}return Ca[K](l,arguments)}l.version="1.4.7";var V=/[, ]+/,sb=/^(circle|rect|path|ellipse|text|image)$/,p="prototype",z="hasOwnProperty",C=document,aa=window,Qa={was:Object[p][z].call(aa,"Raphael"),is:aa.Raphael};function H(){}var x="appendChild",K="apply",M="concat",Da="createTouch"in C,
-A="",N=" ",D=String,G="split",Ra="click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend orientationchange touchcancel gesturestart gesturechange gestureend"[G](N),Ea={mousedown:"touchstart",mousemove:"touchmove",mouseup:"touchend"},R="join",o="length",fa=String[p].toLowerCase,v=Math,Y=v.max,ba=v.min,P="number",ga="string",U="array",O="toString",ca="fill",tb=Object[p][O],E=v.pow,F="push",ja=/^(?=[\da-f]$)/,Sa=/^url\(['"]?([^\)]+?)['"]?\)$/i,ub=/^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+\s*,\s*[\d\.]+\s*,\s*[\d\.]+(?:\s*,\s*[\d\.]+)?)\s*\)|rgba?\(\s*([\d\.]+%\s*,\s*[\d\.]+%\s*,\s*[\d\.]+%(?:\s*,\s*[\d\.]+%)?)\s*\)|hsb\(\s*([\d\.]+(?:deg|\xb0)?\s*,\s*[\d\.]+\s*,\s*[\d\.]+)\s*\)|hsb\(\s*([\d\.]+(?:deg|\xb0|%)\s*,\s*[\d\.]+%\s*,\s*[\d\.]+%)\s*\)|hsl\(\s*([\d\.]+(?:deg|\xb0)?\s*,\s*[\d\.]+\s*,\s*[\d\.]+)\s*\)|hsl\(\s*([\d\.]+(?:deg|\xb0|%)\s*,\s*[\d\.]+%\s*,\s*[\d\.]+%)\s*\))\s*$/i,
-Q=v.round,W="setAttribute",y=parseFloat,ha=parseInt,Fa=" progid:DXImageTransform.Microsoft",sa=String[p].toUpperCase,ta={blur:0,"clip-rect":"0 0 1e9 1e9",cursor:"default",cx:0,cy:0,fill:"#fff","fill-opacity":1,font:'10px "Arial"',"font-family":'"Arial"',"font-size":"10","font-style":"normal","font-weight":400,gradient:0,height:0,href:"http://raphaeljs.com/",opacity:1,path:"M0,0",r:0,rotation:0,rx:0,ry:0,scale:"1 1",src:"",stroke:"#000","stroke-dasharray":"","stroke-linecap":"butt","stroke-linejoin":"butt",
-"stroke-miterlimit":0,"stroke-opacity":1,"stroke-width":1,target:"_blank","text-anchor":"middle",title:"Raphael",translation:"0 0",width:0,x:0,y:0},Ga={along:"along",blur:P,"clip-rect":"csv",cx:P,cy:P,fill:"colour","fill-opacity":P,"font-size":P,height:P,opacity:P,path:"path",r:P,rotation:"csv",rx:P,ry:P,scale:"csv",stroke:"colour","stroke-opacity":P,"stroke-width":P,translation:"csv",width:P,x:P,y:P},I="replace";l.type=aa.SVGAngle||C.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure",
-"1.1")?"SVG":"VML";if(l.type=="VML"){var da=C.createElement("div");da.innerHTML='<v:shape adj="1"/>';da=da.firstChild;da.style.behavior="url(#default#VML)";if(!(da&&typeof da.adj=="object"))return l.type=null;da=null}l.svg=!(l.vml=l.type=="VML");H[p]=l[p];l._id=0;l._oid=0;l.fn={};l.is=function(a,b){b=fa.call(b);return b=="object"&&a===Object(a)||b=="undefined"&&typeof a==b||b=="null"&&a==null||b=="array"&&Array.isArray&&Array.isArray(a)||fa.call(tb.call(a).slice(8,-1))==b};l.setWindow=function(a){aa=
-a;C=aa.document};function ua(a){if(l.vml){var b=/^\s+|\s+$/g;ua=Z(function(d){var f;d=D(d)[I](b,A);try{var e=new aa.ActiveXObject("htmlfile");e.write("<body>");e.close();f=e.body}catch(g){f=aa.createPopup().document.body}e=f.createTextRange();try{f.style.color=d;var h=e.queryCommandValue("ForeColor");h=(h&255)<<16|h&65280|(h&16711680)>>>16;return"#"+("000000"+h[O](16)).slice(-6)}catch(i){return"none"}})}else{var c=C.createElement("i");c.title="Rapha\u00ebl Colour Picker";c.style.display="none";C.body[x](c);
-ua=Z(function(d){c.style.color=d;return C.defaultView.getComputedStyle(c,A).getPropertyValue("color")})}return ua(a)}function Ta(){return"hsb("+[this.h,this.s,this.b]+")"}function vb(){return"hsl("+[this.h,this.s,this.l]+")"}function wb(){return this.hex}l.hsb2rgb=function(a,b,c){if(l.is(a,"object")&&"h"in a&&"s"in a&&"b"in a){c=a.b;b=a.s;a=a.h}return l.hsl2rgb(a,b,c/2)};l.hsl2rgb=function(a,b,c){if(l.is(a,"object")&&"h"in a&&"s"in a&&"l"in a){c=a.l;b=a.s;a=a.h}var d={},f=["r","g","b"],e;if(b){b=
-c<0.5?c*(1+b):c+b-c*b;c=2*c-b;for(var g=0,h=f.length;g<h;g++){e=a+1/3*-(g-1);e<0&&e++;e>1&&e--;d[f[g]]=e*6<1?c+(b-c)*6*e:e*2<1?b:e*3<2?c+(b-c)*(2/3-e)*6:c}}else d={r:c,g:c,b:c};d.r*=255;d.g*=255;d.b*=255;a=(~~d.r)[O](16);f=(~~d.g)[O](16);b=(~~d.b)[O](16);a=a[I](ja,"0");f=f[I](ja,"0");b=b[I](ja,"0");d.hex="#"+a+f+b;d.toString=wb;return d};l.rgb2hsb=function(a,b,c){if(b==null&&l.is(a,"object")&&"r"in a&&"g"in a&&"b"in a){c=a.b;b=a.g;a=a.r}if(b==null&&l.is(a,ga)){var d=l.getRGB(a);a=d.r;b=d.g;c=d.b}if(a>
-1||b>1||c>1){a/=255;b/=255;c/=255}var f=Y(a,b,c),e=ba(a,b,c);d=f;if(e==f)return{h:0,s:0,b:f,toString:Ta};else{var g=f-e;e=g/f;a=a==f?(b-c)/g:b==f?2+(c-a)/g:4+(a-b)/g;a/=6;a<0&&a++;a>1&&a--}return{h:a,s:e,b:d,toString:Ta}};l.rgb2hsl=function(a,b,c){if(b==null&&l.is(a,"object")&&"r"in a&&"g"in a&&"b"in a){c=a.b;b=a.g;a=a.r}if(b==null&&l.is(a,ga)){var d=l.getRGB(a);a=d.r;b=d.g;c=d.b}if(a>1||b>1||c>1){a/=255;b/=255;c/=255}var f=Y(a,b,c),e=ba(a,b,c);d=(f+e)/2;if(e==f)a={h:0,s:0,l:d};else{var g=f-e;e=d<
-0.5?g/(f+e):g/(2-f-e);a=a==f?(b-c)/g:b==f?2+(c-a)/g:4+(a-b)/g;a/=6;a<0&&a++;a>1&&a--;a={h:a,s:e,l:d}}a.toString=vb;return a};var xb=/,?([achlmqrstvxz]),?/gi,ka=/\s*,\s*/,yb={hs:1,rg:1};l._path2string=function(){return this.join(",")[I](xb,"$1")};function Z(a,b,c){function d(){var f=Array[p].slice.call(arguments,0),e=f[R]("\u25ba"),g=d.cache=d.cache||{},h=d.count=d.count||[];if(g[z](e))return c?c(g[e]):g[e];h[o]>=1000&&delete g[h.shift()];h[F](e);g[e]=a[K](b,f);return c?c(g[e]):g[e]}return d}l.getRGB=
-Z(function(a){if(!a||(a=D(a)).indexOf("-")+1)return{r:-1,g:-1,b:-1,hex:"none",error:1};if(a=="none")return{r:-1,g:-1,b:-1,hex:"none"};!(yb[z](a.substring(0,2))||a.charAt()=="#")&&(a=ua(a));var b,c,d,f,e;if(a=a.match(ub)){if(a[2]){d=ha(a[2].substring(5),16);c=ha(a[2].substring(3,5),16);b=ha(a[2].substring(1,3),16)}if(a[3]){d=ha((e=a[3].charAt(3))+e,16);c=ha((e=a[3].charAt(2))+e,16);b=ha((e=a[3].charAt(1))+e,16)}if(a[4]){a=a[4][G](ka);b=y(a[0]);c=y(a[1]);d=y(a[2]);f=y(a[3])}if(a[5]){a=a[5][G](ka);b=
-y(a[0])*2.55;c=y(a[1])*2.55;d=y(a[2])*2.55;f=y(a[3])}if(a[6]){a=a[6][G](ka);b=y(a[0]);c=y(a[1]);d=y(a[2]);(a[0].slice(-3)=="deg"||a[0].slice(-1)=="\u00b0")&&(b/=360);return l.hsb2rgb(b,c,d)}if(a[7]){a=a[7][G](ka);b=y(a[0])*2.55;c=y(a[1])*2.55;d=y(a[2])*2.55;(a[0].slice(-3)=="deg"||a[0].slice(-1)=="\u00b0")&&(b/=360*2.55);return l.hsb2rgb(b,c,d)}if(a[8]){a=a[8][G](ka);b=y(a[0]);c=y(a[1]);d=y(a[2]);(a[0].slice(-3)=="deg"||a[0].slice(-1)=="\u00b0")&&(b/=360);return l.hsl2rgb(b,c,d)}if(a[9]){a=a[9][G](ka);
-b=y(a[0])*2.55;c=y(a[1])*2.55;d=y(a[2])*2.55;(a[0].slice(-3)=="deg"||a[0].slice(-1)=="\u00b0")&&(b/=360*2.55);return l.hsl2rgb(b,c,d)}a={r:b,g:c,b:d};b=(~~b)[O](16);c=(~~c)[O](16);d=(~~d)[O](16);b=b[I](ja,"0");c=c[I](ja,"0");d=d[I](ja,"0");a.hex="#"+b+c+d;isFinite(y(f))&&(a.o=f);return a}return{r:-1,g:-1,b:-1,hex:"none",error:1}},l);l.getColor=function(a){a=this.getColor.start=this.getColor.start||{h:0,s:1,b:a||0.75};var b=this.hsb2rgb(a.h,a.s,a.b);a.h+=0.075;if(a.h>1){a.h=0;a.s-=0.2;a.s<=0&&(this.getColor.start=
-{h:0,s:1,b:a.b})}return b.hex};l.getColor.reset=function(){delete this.start};var zb=/([achlmqstvz])[\s,]*((-?\d*\.?\d*(?:e[-+]?\d+)?\s*,?\s*)+)/ig,Ab=/(-?\d*\.?\d*(?:e[-+]?\d+)?)\s*,?\s*/ig;l.parsePathString=Z(function(a){if(!a)return null;var b={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},c=[];if(l.is(a,U)&&l.is(a[0],U))c=va(a);c[o]||D(a)[I](zb,function(d,f,e){var g=[];d=fa.call(f);e[I](Ab,function(h,i){i&&g[F](+i)});if(d=="m"&&g[o]>2){c[F]([f][M](g.splice(0,2)));d="l";f=f=="m"?"l":"L"}for(;g[o]>=
-b[d];){c[F]([f][M](g.splice(0,b[d])));if(!b[d])break}});c[O]=l._path2string;return c});l.findDotsAtSegment=function(a,b,c,d,f,e,g,h,i){var j=1-i,m=E(j,3)*a+E(j,2)*3*i*c+j*3*i*i*f+E(i,3)*g;j=E(j,3)*b+E(j,2)*3*i*d+j*3*i*i*e+E(i,3)*h;var n=a+2*i*(c-a)+i*i*(f-2*c+a),r=b+2*i*(d-b)+i*i*(e-2*d+b),q=c+2*i*(f-c)+i*i*(g-2*f+c),k=d+2*i*(e-d)+i*i*(h-2*e+d);a=(1-i)*a+i*c;b=(1-i)*b+i*d;f=(1-i)*f+i*g;e=(1-i)*e+i*h;h=90-v.atan((n-q)/(r-k))*180/v.PI;(n>q||r<k)&&(h+=180);return{x:m,y:j,m:{x:n,y:r},n:{x:q,y:k},start:{x:a,
-y:b},end:{x:f,y:e},alpha:h}};var xa=Z(function(a){if(!a)return{x:0,y:0,width:0,height:0};a=wa(a);for(var b=0,c=0,d=[],f=[],e,g=0,h=a[o];g<h;g++){e=a[g];if(e[0]=="M"){b=e[1];c=e[2];d[F](b);f[F](c)}else{b=Bb(b,c,e[1],e[2],e[3],e[4],e[5],e[6]);d=d[M](b.min.x,b.max.x);f=f[M](b.min.y,b.max.y);b=e[5];c=e[6]}}a=ba[K](0,d);e=ba[K](0,f);return{x:a,y:e,width:Y[K](0,d)-a,height:Y[K](0,f)-e}});function va(a){var b=[];if(!l.is(a,U)||!l.is(a&&a[0],U))a=l.parsePathString(a);for(var c=0,d=a[o];c<d;c++){b[c]=[];for(var f=
-0,e=a[c][o];f<e;f++)b[c][f]=a[c][f]}b[O]=l._path2string;return b}var Ha=Z(function(a){if(!l.is(a,U)||!l.is(a&&a[0],U))a=l.parsePathString(a);var b=[],c=0,d=0,f=0,e=0,g=0;if(a[0][0]=="M"){c=a[0][1];d=a[0][2];f=c;e=d;g++;b[F](["M",c,d])}g=g;for(var h=a[o];g<h;g++){var i=b[g]=[],j=a[g];if(j[0]!=fa.call(j[0])){i[0]=fa.call(j[0]);switch(i[0]){case "a":i[1]=j[1];i[2]=j[2];i[3]=j[3];i[4]=j[4];i[5]=j[5];i[6]=+(j[6]-c).toFixed(3);i[7]=+(j[7]-d).toFixed(3);break;case "v":i[1]=+(j[1]-d).toFixed(3);break;case "m":f=
-j[1];e=j[2];default:for(var m=1,n=j[o];m<n;m++)i[m]=+(j[m]-(m%2?c:d)).toFixed(3)}}else{b[g]=[];if(j[0]=="m"){f=j[1]+c;e=j[2]+d}i=0;for(m=j[o];i<m;i++)b[g][i]=j[i]}j=b[g][o];switch(b[g][0]){case "z":c=f;d=e;break;case "h":c+=+b[g][j-1];break;case "v":d+=+b[g][j-1];break;default:c+=+b[g][j-2];d+=+b[g][j-1]}}b[O]=l._path2string;return b},0,va),oa=Z(function(a){if(!l.is(a,U)||!l.is(a&&a[0],U))a=l.parsePathString(a);var b=[],c=0,d=0,f=0,e=0,g=0;if(a[0][0]=="M"){c=+a[0][1];d=+a[0][2];f=c;e=d;g++;b[0]=["M",
-c,d]}g=g;for(var h=a[o];g<h;g++){var i=b[g]=[],j=a[g];if(j[0]!=sa.call(j[0])){i[0]=sa.call(j[0]);switch(i[0]){case "A":i[1]=j[1];i[2]=j[2];i[3]=j[3];i[4]=j[4];i[5]=j[5];i[6]=+(j[6]+c);i[7]=+(j[7]+d);break;case "V":i[1]=+j[1]+d;break;case "H":i[1]=+j[1]+c;break;case "M":f=+j[1]+c;e=+j[2]+d;default:for(var m=1,n=j[o];m<n;m++)i[m]=+j[m]+(m%2?c:d)}}else{m=0;for(n=j[o];m<n;m++)b[g][m]=j[m]}switch(i[0]){case "Z":c=f;d=e;break;case "H":c=i[1];break;case "V":d=i[1];break;case "M":f=b[g][b[g][o]-2];e=b[g][b[g][o]-
-1];default:c=b[g][b[g][o]-2];d=b[g][b[g][o]-1]}}b[O]=l._path2string;return b},null,va);function ya(a,b,c,d){return[a,b,c,d,c,d]}function Ua(a,b,c,d,f,e){var g=1/3,h=2/3;return[g*a+h*c,g*b+h*d,g*f+h*c,g*e+h*d,f,e]}function Va(a,b,c,d,f,e,g,h,i,j){var m=v.PI,n=m*120/180,r=m/180*(+f||0),q=[],k,t=Z(function(J,ia,za){var Cb=J*v.cos(za)-ia*v.sin(za);J=J*v.sin(za)+ia*v.cos(za);return{x:Cb,y:J}});if(j){w=j[0];k=j[1];e=j[2];B=j[3]}else{k=t(a,b,-r);a=k.x;b=k.y;k=t(h,i,-r);h=k.x;i=k.y;v.cos(m/180*f);v.sin(m/
-180*f);k=(a-h)/2;w=(b-i)/2;B=k*k/(c*c)+w*w/(d*d);if(B>1){B=v.sqrt(B);c=B*c;d=B*d}B=c*c;var L=d*d;B=(e==g?-1:1)*v.sqrt(v.abs((B*L-B*w*w-L*k*k)/(B*w*w+L*k*k)));e=B*c*w/d+(a+h)/2;var B=B*-d*k/c+(b+i)/2,w=v.asin(((b-B)/d).toFixed(7));k=v.asin(((i-B)/d).toFixed(7));w=a<e?m-w:w;k=h<e?m-k:k;w<0&&(w=m*2+w);k<0&&(k=m*2+k);if(g&&w>k)w-=m*2;if(!g&&k>w)k-=m*2}m=k-w;if(v.abs(m)>n){q=k;m=h;L=i;k=w+n*(g&&k>w?1:-1);h=e+c*v.cos(k);i=B+d*v.sin(k);q=Va(h,i,c,d,f,0,g,m,L,[k,q,e,B])}m=k-w;f=v.cos(w);e=v.sin(w);g=v.cos(k);
-k=v.sin(k);m=v.tan(m/4);c=4/3*c*m;m=4/3*d*m;d=[a,b];a=[a+c*e,b-m*f];b=[h+c*k,i-m*g];h=[h,i];a[0]=2*d[0]-a[0];a[1]=2*d[1]-a[1];if(j)return[a,b,h][M](q);else{q=[a,b,h][M](q)[R]()[G](",");j=[];h=0;for(i=q[o];h<i;h++)j[h]=h%2?t(q[h-1],q[h],r).y:t(q[h],q[h+1],r).x;return j}}function la(a,b,c,d,f,e,g,h,i){var j=1-i;return{x:E(j,3)*a+E(j,2)*3*i*c+j*3*i*i*f+E(i,3)*g,y:E(j,3)*b+E(j,2)*3*i*d+j*3*i*i*e+E(i,3)*h}}var Bb=Z(function(a,b,c,d,f,e,g,h){var i=f-2*c+a-(g-2*f+c),j=2*(c-a)-2*(f-c),m=a-c,n=(-j+v.sqrt(j*
-j-4*i*m))/2/i;i=(-j-v.sqrt(j*j-4*i*m))/2/i;var r=[b,h],q=[a,g];v.abs(n)>1000000000000&&(n=0.5);v.abs(i)>1000000000000&&(i=0.5);if(n>0&&n<1){n=la(a,b,c,d,f,e,g,h,n);q[F](n.x);r[F](n.y)}if(i>0&&i<1){n=la(a,b,c,d,f,e,g,h,i);q[F](n.x);r[F](n.y)}i=e-2*d+b-(h-2*e+d);j=2*(d-b)-2*(e-d);m=b-d;n=(-j+v.sqrt(j*j-4*i*m))/2/i;i=(-j-v.sqrt(j*j-4*i*m))/2/i;v.abs(n)>1000000000000&&(n=0.5);v.abs(i)>1000000000000&&(i=0.5);if(n>0&&n<1){n=la(a,b,c,d,f,e,g,h,n);q[F](n.x);r[F](n.y)}if(i>0&&i<1){n=la(a,b,c,d,f,e,g,h,i);
-q[F](n.x);r[F](n.y)}return{min:{x:ba[K](0,q),y:ba[K](0,r)},max:{x:Y[K](0,q),y:Y[K](0,r)}}}),wa=Z(function(a,b){var c=oa(a),d=b&&oa(b);a={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null};b={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null};function f(q,k){var t;if(!q)return["C",k.x,k.y,k.x,k.y,k.x,k.y];!(q[0]in{T:1,Q:1})&&(k.qx=k.qy=null);switch(q[0]){case "M":k.X=q[1];k.Y=q[2];break;case "A":q=["C"][M](Va[K](0,[k.x,k.y][M](q.slice(1))));break;case "S":t=k.x+(k.x-(k.bx||k.x));k=k.y+(k.y-(k.by||k.y));q=["C",t,k][M](q.slice(1));
-break;case "T":k.qx=k.x+(k.x-(k.qx||k.x));k.qy=k.y+(k.y-(k.qy||k.y));q=["C"][M](Ua(k.x,k.y,k.qx,k.qy,q[1],q[2]));break;case "Q":k.qx=q[1];k.qy=q[2];q=["C"][M](Ua(k.x,k.y,q[1],q[2],q[3],q[4]));break;case "L":q=["C"][M](ya(k.x,k.y,q[1],q[2]));break;case "H":q=["C"][M](ya(k.x,k.y,q[1],k.y));break;case "V":q=["C"][M](ya(k.x,k.y,k.x,q[1]));break;case "Z":q=["C"][M](ya(k.x,k.y,k.X,k.Y));break}return q}function e(q,k){if(q[k][o]>7){q[k].shift();for(var t=q[k];t[o];)q.splice(k++,0,["C"][M](t.splice(0,6)));
-q.splice(k,1);i=Y(c[o],d&&d[o]||0)}}function g(q,k,t,L,B){if(q&&k&&q[B][0]=="M"&&k[B][0]!="M"){k.splice(B,0,["M",L.x,L.y]);t.bx=0;t.by=0;t.x=q[B][1];t.y=q[B][2];i=Y(c[o],d&&d[o]||0)}}for(var h=0,i=Y(c[o],d&&d[o]||0);h<i;h++){c[h]=f(c[h],a);e(c,h);d&&(d[h]=f(d[h],b));d&&e(d,h);g(c,d,a,b,h);g(d,c,b,a,h);var j=c[h],m=d&&d[h],n=j[o],r=d&&m[o];a.x=j[n-2];a.y=j[n-1];a.bx=y(j[n-4])||a.x;a.by=y(j[n-3])||a.y;b.bx=d&&(y(m[r-4])||b.x);b.by=d&&(y(m[r-3])||b.y);b.x=d&&m[r-2];b.y=d&&m[r-1]}return d?[c,d]:c},null,
-va),Wa=Z(function(a){for(var b=[],c=0,d=a[o];c<d;c++){var f={},e=a[c].match(/^([^:]*):?([\d\.]*)/);f.color=l.getRGB(e[1]);if(f.color.error)return null;f.color=f.color.hex;e[2]&&(f.offset=e[2]+"%");b[F](f)}c=1;for(d=b[o]-1;c<d;c++)if(!b[c].offset){a=y(b[c-1].offset||0);e=0;for(f=c+1;f<d;f++)if(b[f].offset){e=b[f].offset;break}if(!e){e=100;f=d}e=y(e);for(e=(e-a)/(f-c+1);c<f;c++){a+=e;b[c].offset=a+"%"}}return b});function Xa(a,b,c,d){if(l.is(a,ga)||l.is(a,"object")){a=l.is(a,ga)?C.getElementById(a):
-a;if(a.tagName)return b==null?{container:a,width:a.style.pixelWidth||a.offsetWidth,height:a.style.pixelHeight||a.offsetHeight}:{container:a,width:b,height:c}}else return{container:1,x:a,y:b,width:c,height:d}}function Ia(a,b){var c=this;for(var d in b)if(b[z](d)&&!(d in a))switch(typeof b[d]){case "function":(function(f){a[d]=a===c?f:function(){return f[K](c,arguments)}})(b[d]);break;case "object":a[d]=a[d]||{};Ia.call(this,a[d],b[d]);break;default:a[d]=b[d];break}}function ma(a,b){a==b.top&&(b.top=
-a.prev);a==b.bottom&&(b.bottom=a.next);a.next&&(a.next.prev=a.prev);a.prev&&(a.prev.next=a.next)}function Ya(a,b){if(b.top!==a){ma(a,b);a.next=null;a.prev=b.top;b.top.next=a;b.top=a}}function Za(a,b){if(b.bottom!==a){ma(a,b);a.next=b.bottom;a.prev=null;b.bottom.prev=a;b.bottom=a}}function $a(a,b,c){ma(a,c);b==c.top&&(c.top=a);b.next&&(b.next.prev=a);a.next=b.next;a.prev=b;b.next=a}function ab(a,b,c){ma(a,c);b==c.bottom&&(c.bottom=a);b.prev&&(b.prev.next=a);a.prev=b.prev;b.prev=a;a.next=b}function bb(a){return function(){throw new Error("Rapha\u00ebl: you are calling to method \u201c"+
-a+"\u201d of removed object");}}var cb=/^r(?:\(([^,]+?)\s*,\s*([^\)]+?)\))?/;l.pathToRelative=Ha;if(l.svg){H[p].svgns="http://www.w3.org/2000/svg";H[p].xlink="http://www.w3.org/1999/xlink";Q=function(a){return+a+(~~a===a)*0.5};var u=function(a,b){if(b)for(var c in b)b[z](c)&&a[W](c,D(b[c]));else{a=C.createElementNS(H[p].svgns,a);a.style.webkitTapHighlightColor="rgba(0,0,0,0)";return a}};l[O]=function(){return"Your browser supports SVG.\nYou are running Rapha\u00ebl "+this.version};var db=function(a,
-b){var c=u("path");b.canvas&&b.canvas[x](c);b=new s(c,b);b.type="path";ea(b,{fill:"none",stroke:"#000",path:a});return b},pa=function(a,b,c){var d="linear",f=0.5,e=0.5,g=a.style;b=D(b)[I](cb,function(m,n,r){d="radial";if(n&&r){f=y(n);e=y(r);m=(e>0.5)*2-1;E(f-0.5,2)+E(e-0.5,2)>0.25&&(e=v.sqrt(0.25-E(f-0.5,2))*m+0.5)&&e!=0.5&&(e=e.toFixed(5)-1.0E-5*m)}return A});b=b[G](/\s*\-\s*/);if(d=="linear"){var h=b.shift();h=-y(h);if(isNaN(h))return null;h=[0,0,v.cos(h*v.PI/180),v.sin(h*v.PI/180)];var i=1/(Y(v.abs(h[2]),
-v.abs(h[3]))||1);h[2]*=i;h[3]*=i;if(h[2]<0){h[0]=-h[2];h[2]=0}if(h[3]<0){h[1]=-h[3];h[3]=0}}b=Wa(b);if(!b)return null;i=a.getAttribute(ca);(i=i.match(/^url\(#(.*)\)$/))&&c.defs.removeChild(C.getElementById(i[1]));i=u(d+"Gradient");i.id="r"+(l._id++)[O](36);u(i,d=="radial"?{fx:f,fy:e}:{x1:h[0],y1:h[1],x2:h[2],y2:h[3]});c.defs[x](i);c=0;for(h=b[o];c<h;c++){var j=u("stop");u(j,{offset:b[c].offset?b[c].offset:!c?"0%":"100%","stop-color":b[c].color||"#fff"});i[x](j)}u(a,{fill:"url(#"+i.id+")",opacity:1,
-"fill-opacity":1});g.fill=A;g.opacity=1;return g.fillOpacity=1},Ja=function(a){var b=a.getBBox();u(a.pattern,{patternTransform:l.format("translate({0},{1})",b.x,b.y)})},ea=function(a,b){var c={"":[0],none:[0],"-":[3,1],".":[1,1],"-.":[3,1,1,1],"-..":[3,1,1,1,1,1],". ":[1,3],"- ":[4,3],"--":[8,3],"- .":[4,3,1,3],"--.":[8,3,1,3],"--..":[8,3,1,3,1,3]},d=a.node,f=a.attrs,e=a.rotate();function g(k,t){if(t=c[fa.call(t)]){var L=k.attrs["stroke-width"]||"1";k={round:L,square:L,butt:0}[k.attrs["stroke-linecap"]||
-b["stroke-linecap"]]||0;for(var B=[],w=t[o];w--;)B[w]=t[w]*L+(w%2?1:-1)*k;u(d,{"stroke-dasharray":B[R](",")})}}b[z]("rotation")&&(e=b.rotation);var h=D(e)[G](V);if(h.length-1){h[1]=+h[1];h[2]=+h[2]}else h=null;y(e)&&a.rotate(0,true);for(var i in b)if(b[z](i))if(ta[z](i)){var j=b[i];f[i]=j;switch(i){case "blur":a.blur(j);break;case "rotation":a.rotate(j,true);break;case "href":case "title":case "target":var m=d.parentNode;if(fa.call(m.tagName)!="a"){var n=u("a");m.insertBefore(n,d);n[x](d);m=n}m.setAttributeNS(a.paper.xlink,
-i,j);break;case "cursor":d.style.cursor=j;break;case "clip-rect":m=D(j)[G](V);if(m[o]==4){a.clip&&a.clip.parentNode.parentNode.removeChild(a.clip.parentNode);var r=u("clipPath");n=u("rect");r.id="r"+(l._id++)[O](36);u(n,{x:m[0],y:m[1],width:m[2],height:m[3]});r[x](n);a.paper.defs[x](r);u(d,{"clip-path":"url(#"+r.id+")"});a.clip=n}if(!j){(j=C.getElementById(d.getAttribute("clip-path")[I](/(^url\(#|\)$)/g,A)))&&j.parentNode.removeChild(j);u(d,{"clip-path":A});delete a.clip}break;case "path":if(a.type==
-"path")u(d,{d:j?(f.path=oa(j)):"M0,0"});break;case "width":d[W](i,j);if(f.fx){i="x";j=f.x}else break;case "x":if(f.fx)j=-f.x-(f.width||0);case "rx":if(i=="rx"&&a.type=="rect")break;case "cx":h&&(i=="x"||i=="cx")&&(h[1]+=j-f[i]);d[W](i,j);a.pattern&&Ja(a);break;case "height":d[W](i,j);if(f.fy){i="y";j=f.y}else break;case "y":if(f.fy)j=-f.y-(f.height||0);case "ry":if(i=="ry"&&a.type=="rect")break;case "cy":h&&(i=="y"||i=="cy")&&(h[2]+=j-f[i]);d[W](i,j);a.pattern&&Ja(a);break;case "r":a.type=="rect"?
-u(d,{rx:j,ry:j}):d[W](i,j);break;case "src":a.type=="image"&&d.setAttributeNS(a.paper.xlink,"href",j);break;case "stroke-width":d.style.strokeWidth=j;d[W](i,j);f["stroke-dasharray"]&&g(a,f["stroke-dasharray"]);break;case "stroke-dasharray":g(a,j);break;case "translation":j=D(j)[G](V);j[0]=+j[0]||0;j[1]=+j[1]||0;if(h){h[1]+=j[0];h[2]+=j[1]}Aa.call(a,j[0],j[1]);break;case "scale":j=D(j)[G](V);a.scale(+j[0]||1,+j[1]||+j[0]||1,isNaN(y(j[2]))?null:+j[2],isNaN(y(j[3]))?null:+j[3]);break;case ca:if(m=D(j).match(Sa)){r=
-u("pattern");var q=u("image");r.id="r"+(l._id++)[O](36);u(r,{x:0,y:0,patternUnits:"userSpaceOnUse",height:1,width:1});u(q,{x:0,y:0});q.setAttributeNS(a.paper.xlink,"href",m[1]);r[x](q);j=C.createElement("img");j.style.cssText="position:absolute;left:-9999em;top-9999em";j.onload=function(){u(r,{width:this.offsetWidth,height:this.offsetHeight});u(q,{width:this.offsetWidth,height:this.offsetHeight});C.body.removeChild(this);a.paper.safari()};C.body[x](j);j.src=m[1];a.paper.defs[x](r);d.style.fill="url(#"+
-r.id+")";u(d,{fill:"url(#"+r.id+")"});a.pattern=r;a.pattern&&Ja(a);break}m=l.getRGB(j);if(m.error){if(({circle:1,ellipse:1}[z](a.type)||D(j).charAt()!="r")&&pa(d,j,a.paper)){f.gradient=j;f.fill="none";break}}else{delete b.gradient;delete f.gradient;!l.is(f.opacity,"undefined")&&l.is(b.opacity,"undefined")&&u(d,{opacity:f.opacity});!l.is(f["fill-opacity"],"undefined")&&l.is(b["fill-opacity"],"undefined")&&u(d,{"fill-opacity":f["fill-opacity"]})}m[z]("o")&&u(d,{"fill-opacity":m.o/100});case "stroke":m=
-l.getRGB(j);d[W](i,m.hex);i=="stroke"&&m[z]("o")&&u(d,{"stroke-opacity":m.o/100});break;case "gradient":(({circle:1,ellipse:1})[z](a.type)||D(j).charAt()!="r")&&pa(d,j,a.paper);break;case "opacity":case "fill-opacity":if(f.gradient){if(m=C.getElementById(d.getAttribute(ca)[I](/^url\(#|\)$/g,A))){m=m.getElementsByTagName("stop");m[m[o]-1][W]("stop-opacity",j)}break}default:i=="font-size"&&(j=ha(j,10)+"px");m=i[I](/(\-.)/g,function(k){return sa.call(k.substring(1))});d.style[m]=j;d[W](i,j);break}}Db(a,
-b);if(h)a.rotate(h.join(N));else y(e)&&a.rotate(e,true)},eb=1.2,Db=function(a,b){if(!(a.type!="text"||!(b[z]("text")||b[z]("font")||b[z]("font-size")||b[z]("x")||b[z]("y")))){var c=a.attrs,d=a.node,f=d.firstChild?ha(C.defaultView.getComputedStyle(d.firstChild,A).getPropertyValue("font-size"),10):10;if(b[z]("text")){for(c.text=b.text;d.firstChild;)d.removeChild(d.firstChild);b=D(b.text)[G]("\n");for(var e=0,g=b[o];e<g;e++)if(b[e]){var h=u("tspan");e&&u(h,{dy:f*eb,x:c.x});h[x](C.createTextNode(b[e]));
-d[x](h)}}else{b=d.getElementsByTagName("tspan");e=0;for(g=b[o];e<g;e++)e&&u(b[e],{dy:f*eb,x:c.x})}u(d,{y:c.y});a=a.getBBox();(a=c.y-(a.y+a.height/2))&&isFinite(a)&&u(d,{y:c.y+a})}},s=function(a,b){this[0]=a;this.id=l._oid++;this.node=a;a.raphael=this;this.paper=b;this.attrs=this.attrs||{};this.transformations=[];this._={tx:0,ty:0,rt:{deg:0,cx:0,cy:0},sx:1,sy:1};!b.bottom&&(b.bottom=this);(this.prev=b.top)&&(b.top.next=this);b.top=this;this.next=null};s[p].rotate=function(a,b,c){if(this.removed)return this;
-if(a==null){if(this._.rt.cx)return[this._.rt.deg,this._.rt.cx,this._.rt.cy][R](N);return this._.rt.deg}var d=this.getBBox();a=D(a)[G](V);if(a[o]-1){b=y(a[1]);c=y(a[2])}a=y(a[0]);if(b!=null)this._.rt.deg=a;else this._.rt.deg+=a;c==null&&(b=null);this._.rt.cx=b;this._.rt.cy=c;b=b==null?d.x+d.width/2:b;c=c==null?d.y+d.height/2:c;if(this._.rt.deg){this.transformations[0]=l.format("rotate({0} {1} {2})",this._.rt.deg,b,c);this.clip&&u(this.clip,{transform:l.format("rotate({0} {1} {2})",-this._.rt.deg,b,
-c)})}else{this.transformations[0]=A;this.clip&&u(this.clip,{transform:A})}u(this.node,{transform:this.transformations[R](N)});return this};s[p].hide=function(){!this.removed&&(this.node.style.display="none");return this};s[p].show=function(){!this.removed&&(this.node.style.display="");return this};s[p].remove=function(){if(!this.removed){ma(this,this.paper);this.node.parentNode.removeChild(this.node);for(var a in this)delete this[a];this.removed=true}};s[p].getBBox=function(){if(this.removed)return this;
-if(this.type=="path")return xa(this.attrs.path);if(this.node.style.display=="none"){this.show();var a=true}var b={};try{b=this.node.getBBox()}catch(c){}finally{b=b||{}}if(this.type=="text"){b={x:b.x,y:Infinity,width:0,height:0};for(var d=0,f=this.node.getNumberOfChars();d<f;d++){var e=this.node.getExtentOfChar(d);e.y<b.y&&(b.y=e.y);e.y+e.height-b.y>b.height&&(b.height=e.y+e.height-b.y);e.x+e.width-b.x>b.width&&(b.width=e.x+e.width-b.x)}}a&&this.hide();return b};s[p].attr=function(a,b){if(this.removed)return this;
-if(a==null){a={};for(var c in this.attrs)if(this.attrs[z](c))a[c]=this.attrs[c];this._.rt.deg&&(a.rotation=this.rotate());(this._.sx!=1||this._.sy!=1)&&(a.scale=this.scale());a.gradient&&a.fill=="none"&&(a.fill=a.gradient)&&delete a.gradient;return a}if(b==null&&l.is(a,ga)){if(a=="translation")return Aa.call(this);if(a=="rotation")return this.rotate();if(a=="scale")return this.scale();if(a==ca&&this.attrs.fill=="none"&&this.attrs.gradient)return this.attrs.gradient;return this.attrs[a]}if(b==null&&
-l.is(a,U)){b={};c=0;for(var d=a.length;c<d;c++)b[a[c]]=this.attr(a[c]);return b}if(b!=null){c={};c[a]=b;ea(this,c)}else a!=null&&l.is(a,"object")&&ea(this,a);return this};s[p].toFront=function(){if(this.removed)return this;this.node.parentNode[x](this.node);var a=this.paper;a.top!=this&&Ya(this,a);return this};s[p].toBack=function(){if(this.removed)return this;if(this.node.parentNode.firstChild!=this.node){this.node.parentNode.insertBefore(this.node,this.node.parentNode.firstChild);Za(this,this.paper)}return this};
-s[p].insertAfter=function(a){if(this.removed)return this;var b=a.node||a[a.length].node;b.nextSibling?b.parentNode.insertBefore(this.node,b.nextSibling):b.parentNode[x](this.node);$a(this,a,this.paper);return this};s[p].insertBefore=function(a){if(this.removed)return this;var b=a.node||a[0].node;b.parentNode.insertBefore(this.node,b);ab(this,a,this.paper);return this};s[p].blur=function(a){var b=this;if(+a!==0){var c=u("filter"),d=u("feGaussianBlur");b.attrs.blur=a;c.id="r"+(l._id++)[O](36);u(d,{stdDeviation:+a||
-1.5});c.appendChild(d);b.paper.defs.appendChild(c);b._blur=c;u(b.node,{filter:"url(#"+c.id+")"})}else{if(b._blur){b._blur.parentNode.removeChild(b._blur);delete b._blur;delete b.attrs.blur}b.node.removeAttribute("filter")}};var fb=function(a,b,c,d){var f=u("circle");a.canvas&&a.canvas[x](f);a=new s(f,a);a.attrs={cx:b,cy:c,r:d,fill:"none",stroke:"#000"};a.type="circle";u(f,a.attrs);return a},gb=function(a,b,c,d,f,e){var g=u("rect");a.canvas&&a.canvas[x](g);a=new s(g,a);a.attrs={x:b,y:c,width:d,height:f,
-r:e||0,rx:e||0,ry:e||0,fill:"none",stroke:"#000"};a.type="rect";u(g,a.attrs);return a},hb=function(a,b,c,d,f){var e=u("ellipse");a.canvas&&a.canvas[x](e);a=new s(e,a);a.attrs={cx:b,cy:c,rx:d,ry:f,fill:"none",stroke:"#000"};a.type="ellipse";u(e,a.attrs);return a},ib=function(a,b,c,d,f,e){var g=u("image");u(g,{x:c,y:d,width:f,height:e,preserveAspectRatio:"none"});g.setAttributeNS(a.xlink,"href",b);a.canvas&&a.canvas[x](g);a=new s(g,a);a.attrs={x:c,y:d,width:f,height:e,src:b};a.type="image";return a},
-jb=function(a,b,c,d){var f=u("text");u(f,{x:b,y:c,"text-anchor":"middle"});a.canvas&&a.canvas[x](f);a=new s(f,a);a.attrs={x:b,y:c,"text-anchor":"middle",text:d,font:ta.font,stroke:"none",fill:"#000"};a.type="text";ea(a,a.attrs);return a},kb=function(a,b){this.width=a||this.width;this.height=b||this.height;this.canvas[W]("width",this.width);this.canvas[W]("height",this.height);return this},Ca=function(){var a=Xa[K](0,arguments),b=a&&a.container,c=a.x,d=a.y,f=a.width;a=a.height;if(!b)throw new Error("SVG container not found.");
-var e=u("svg");c=c||0;d=d||0;f=f||512;a=a||342;u(e,{xmlns:"http://www.w3.org/2000/svg",version:1.1,width:f,height:a});if(b==1){e.style.cssText="position:absolute;left:"+c+"px;top:"+d+"px";C.body[x](e)}else b.firstChild?b.insertBefore(e,b.firstChild):b[x](e);b=new H;b.width=f;b.height=a;b.canvas=e;Ia.call(b,b,l.fn);b.clear();return b};H[p].clear=function(){for(var a=this.canvas;a.firstChild;)a.removeChild(a.firstChild);this.bottom=this.top=null;(this.desc=u("desc"))[x](C.createTextNode("Created with Rapha\u00ebl"));
-a[x](this.desc);a[x](this.defs=u("defs"))};H[p].remove=function(){this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas);for(var a in this)this[a]=bb(a)}}if(l.vml){var lb={M:"m",L:"l",C:"c",Z:"x",m:"t",l:"r",c:"v",z:"x"},Eb=/([clmz]),?([^clmz]*)/gi,Fb=/-?[^,\s-]+/g,qa=1000+N+1000,na=10,ra={path:1,rect:1},Gb=function(a){var b=/[ahqstv]/ig,c=oa;D(a).match(b)&&(c=wa);b=/[clmz]/g;if(c==oa&&!D(a).match(b))return a=D(a)[I](Eb,function(i,j,m){var n=[],r=fa.call(j)=="m",q=lb[j];m[I](Fb,function(k){if(r&&
-n[o]==2){q+=n+lb[j=="m"?"l":"L"];n=[]}n[F](Q(k*na))});return q+n});b=c(a);var d;a=[];for(var f=0,e=b[o];f<e;f++){c=b[f];d=fa.call(b[f][0]);d=="z"&&(d="x");for(var g=1,h=c[o];g<h;g++)d+=Q(c[g]*na)+(g!=h-1?",":A);a[F](d)}return a[R](N)};l[O]=function(){return"Your browser doesn\u2019t support SVG. Falling down to VML.\nYou are running Rapha\u00ebl "+this.version};db=function(a,b){var c=S("group");c.style.cssText="position:absolute;left:0;top:0;width:"+b.width+"px;height:"+b.height+"px";c.coordsize=
-b.coordsize;c.coordorigin=b.coordorigin;var d=S("shape"),f=d.style;f.width=b.width+"px";f.height=b.height+"px";d.coordsize=qa;d.coordorigin=b.coordorigin;c[x](d);d=new s(d,c,b);f={fill:"none",stroke:"#000"};a&&(f.path=a);d.isAbsolute=true;d.type="path";d.path=[];d.Path=A;ea(d,f);b.canvas[x](c);return d};ea=function(a,b){a.attrs=a.attrs||{};var c=a.node,d=a.attrs,f=c.style,e;e=(b.x!=d.x||b.y!=d.y||b.width!=d.width||b.height!=d.height||b.r!=d.r)&&a.type=="rect";var g=a;for(var h in b)if(b[z](h))d[h]=
-b[h];if(e){d.path=mb(d.x,d.y,d.width,d.height,d.r);a.X=d.x;a.Y=d.y;a.W=d.width;a.H=d.height}b.href&&(c.href=b.href);b.title&&(c.title=b.title);b.target&&(c.target=b.target);b.cursor&&(f.cursor=b.cursor);"blur"in b&&a.blur(b.blur);if(b.path&&a.type=="path"||e)c.path=Gb(d.path);b.rotation!=null&&a.rotate(b.rotation,true);if(b.translation){e=D(b.translation)[G](V);Aa.call(a,e[0],e[1]);if(a._.rt.cx!=null){a._.rt.cx+=+e[0];a._.rt.cy+=+e[1];a.setBox(a.attrs,e[0],e[1])}}if(b.scale){e=D(b.scale)[G](V);a.scale(+e[0]||
-1,+e[1]||+e[0]||1,+e[2]||null,+e[3]||null)}if("clip-rect"in b){e=D(b["clip-rect"])[G](V);if(e[o]==4){e[2]=+e[2]+ +e[0];e[3]=+e[3]+ +e[1];h=c.clipRect||C.createElement("div");var i=h.style,j=c.parentNode;i.clip=l.format("rect({1}px {2}px {3}px {0}px)",e);if(!c.clipRect){i.position="absolute";i.top=0;i.left=0;i.width=a.paper.width+"px";i.height=a.paper.height+"px";j.parentNode.insertBefore(h,j);h[x](j);c.clipRect=h}}if(!b["clip-rect"])c.clipRect&&(c.clipRect.style.clip=A)}if(a.type=="image"&&b.src)c.src=
-b.src;if(a.type=="image"&&b.opacity){c.filterOpacity=Fa+".Alpha(opacity="+b.opacity*100+")";f.filter=(c.filterMatrix||A)+(c.filterOpacity||A)}b.font&&(f.font=b.font);b["font-family"]&&(f.fontFamily='"'+b["font-family"][G](",")[0][I](/^['"]+|['"]+$/g,A)+'"');b["font-size"]&&(f.fontSize=b["font-size"]);b["font-weight"]&&(f.fontWeight=b["font-weight"]);b["font-style"]&&(f.fontStyle=b["font-style"]);if(b.opacity!=null||b["stroke-width"]!=null||b.fill!=null||b.stroke!=null||b["stroke-width"]!=null||b["stroke-opacity"]!=
-null||b["fill-opacity"]!=null||b["stroke-dasharray"]!=null||b["stroke-miterlimit"]!=null||b["stroke-linejoin"]!=null||b["stroke-linecap"]!=null){c=a.shape||c;f=c.getElementsByTagName(ca)&&c.getElementsByTagName(ca)[0];e=false;!f&&(e=f=S(ca));if("fill-opacity"in b||"opacity"in b){a=((+d["fill-opacity"]+1||2)-1)*((+d.opacity+1||2)-1)*((+l.getRGB(b.fill).o+1||2)-1);a<0&&(a=0);a>1&&(a=1);f.opacity=a}b.fill&&(f.on=true);if(f.on==null||b.fill=="none")f.on=false;if(f.on&&b.fill)if(a=b.fill.match(Sa)){f.src=
-a[1];f.type="tile"}else{f.color=l.getRGB(b.fill).hex;f.src=A;f.type="solid";if(l.getRGB(b.fill).error&&(g.type in{circle:1,ellipse:1}||D(b.fill).charAt()!="r")&&pa(g,b.fill)){d.fill="none";d.gradient=b.fill}}e&&c[x](f);f=c.getElementsByTagName("stroke")&&c.getElementsByTagName("stroke")[0];e=false;!f&&(e=f=S("stroke"));if(b.stroke&&b.stroke!="none"||b["stroke-width"]||b["stroke-opacity"]!=null||b["stroke-dasharray"]||b["stroke-miterlimit"]||b["stroke-linejoin"]||b["stroke-linecap"])f.on=true;(b.stroke==
-"none"||f.on==null||b.stroke==0||b["stroke-width"]==0)&&(f.on=false);a=l.getRGB(b.stroke);f.on&&b.stroke&&(f.color=a.hex);a=((+d["stroke-opacity"]+1||2)-1)*((+d.opacity+1||2)-1)*((+a.o+1||2)-1);h=(y(b["stroke-width"])||1)*0.75;a<0&&(a=0);a>1&&(a=1);b["stroke-width"]==null&&(h=d["stroke-width"]);b["stroke-width"]&&(f.weight=h);h&&h<1&&(a*=h)&&(f.weight=1);f.opacity=a;b["stroke-linejoin"]&&(f.joinstyle=b["stroke-linejoin"]||"miter");f.miterlimit=b["stroke-miterlimit"]||8;b["stroke-linecap"]&&(f.endcap=
-b["stroke-linecap"]=="butt"?"flat":b["stroke-linecap"]=="square"?"square":"round");if(b["stroke-dasharray"]){a={"-":"shortdash",".":"shortdot","-.":"shortdashdot","-..":"shortdashdotdot",". ":"dot","- ":"dash","--":"longdash","- .":"dashdot","--.":"longdashdot","--..":"longdashdotdot"};f.dashstyle=a[z](b["stroke-dasharray"])?a[b["stroke-dasharray"]]:A}e&&c[x](f)}if(g.type=="text"){f=g.paper.span.style;d.font&&(f.font=d.font);d["font-family"]&&(f.fontFamily=d["font-family"]);d["font-size"]&&(f.fontSize=
-d["font-size"]);d["font-weight"]&&(f.fontWeight=d["font-weight"]);d["font-style"]&&(f.fontStyle=d["font-style"]);g.node.string&&(g.paper.span.innerHTML=D(g.node.string)[I](/</g,"&#60;")[I](/&/g,"&#38;")[I](/\n/g,"<br>"));g.W=d.w=g.paper.span.offsetWidth;g.H=d.h=g.paper.span.offsetHeight;g.X=d.x;g.Y=d.y+Q(g.H/2);switch(d["text-anchor"]){case "start":g.node.style["v-text-align"]="left";g.bbx=Q(g.W/2);break;case "end":g.node.style["v-text-align"]="right";g.bbx=-Q(g.W/2);break;default:g.node.style["v-text-align"]=
-"center";break}}};pa=function(a,b){a.attrs=a.attrs||{};var c="linear",d=".5 .5";a.attrs.gradient=b;b=D(b)[I](cb,function(i,j,m){c="radial";if(j&&m){j=y(j);m=y(m);E(j-0.5,2)+E(m-0.5,2)>0.25&&(m=v.sqrt(0.25-E(j-0.5,2))*((m>0.5)*2-1)+0.5);d=j+N+m}return A});b=b[G](/\s*\-\s*/);if(c=="linear"){var f=b.shift();f=-y(f);if(isNaN(f))return null}var e=Wa(b);if(!e)return null;a=a.shape||a.node;b=a.getElementsByTagName(ca)[0]||S(ca);!b.parentNode&&a.appendChild(b);if(e[o]){b.on=true;b.method="none";b.color=e[0].color;
-b.color2=e[e[o]-1].color;a=[];for(var g=0,h=e[o];g<h;g++)e[g].offset&&a[F](e[g].offset+N+e[g].color);b.colors&&(b.colors.value=a[o]?a[R]():"0% "+b.color);if(c=="radial"){b.type="gradientradial";b.focus="100%";b.focussize=d;b.focusposition=d}else{b.type="gradient";b.angle=(270-f)%360}}return 1};s=function(a,b,c){this[0]=a;this.id=l._oid++;this.node=a;a.raphael=this;this.Y=this.X=0;this.attrs={};this.Group=b;this.paper=c;this._={tx:0,ty:0,rt:{deg:0},sx:1,sy:1};!c.bottom&&(c.bottom=this);(this.prev=
-c.top)&&(c.top.next=this);c.top=this;this.next=null};s[p].rotate=function(a,b,c){if(this.removed)return this;if(a==null){if(this._.rt.cx)return[this._.rt.deg,this._.rt.cx,this._.rt.cy][R](N);return this._.rt.deg}a=D(a)[G](V);if(a[o]-1){b=y(a[1]);c=y(a[2])}a=y(a[0]);if(b!=null)this._.rt.deg=a;else this._.rt.deg+=a;c==null&&(b=null);this._.rt.cx=b;this._.rt.cy=c;this.setBox(this.attrs,b,c);this.Group.style.rotation=this._.rt.deg;return this};s[p].setBox=function(a,b,c){if(this.removed)return this;var d=
-this.Group.style,f=this.shape&&this.shape.style||this.node.style;a=a||{};for(var e in a)if(a[z](e))this.attrs[e]=a[e];b=b||this._.rt.cx;c=c||this._.rt.cy;var g=this.attrs,h;switch(this.type){case "circle":a=g.cx-g.r;e=g.cy-g.r;h=g=g.r*2;break;case "ellipse":a=g.cx-g.rx;e=g.cy-g.ry;h=g.rx*2;g=g.ry*2;break;case "image":a=+g.x;e=+g.y;h=g.width||0;g=g.height||0;break;case "text":this.textpath.v=["m",Q(g.x),", ",Q(g.y-2),"l",Q(g.x)+1,", ",Q(g.y-2)][R](A);a=g.x-Q(this.W/2);e=g.y-this.H/2;h=this.W;g=this.H;
-break;case "rect":case "path":if(this.attrs.path){g=xa(this.attrs.path);a=g.x;e=g.y;h=g.width;g=g.height}else{e=a=0;h=this.paper.width;g=this.paper.height}break;default:e=a=0;h=this.paper.width;g=this.paper.height;break}b=b==null?a+h/2:b;c=c==null?e+g/2:c;b=b-this.paper.width/2;c=c-this.paper.height/2;var i;d.left!=(i=b+"px")&&(d.left=i);d.top!=(i=c+"px")&&(d.top=i);this.X=ra[z](this.type)?-b:a;this.Y=ra[z](this.type)?-c:e;this.W=h;this.H=g;if(ra[z](this.type)){f.left!=(i=-b*na+"px")&&(f.left=i);
-f.top!=(i=-c*na+"px")&&(f.top=i)}else if(this.type=="text"){f.left!=(i=-b+"px")&&(f.left=i);f.top!=(i=-c+"px")&&(f.top=i)}else{d.width!=(i=this.paper.width+"px")&&(d.width=i);d.height!=(i=this.paper.height+"px")&&(d.height=i);f.left!=(i=a-b+"px")&&(f.left=i);f.top!=(i=e-c+"px")&&(f.top=i);f.width!=(i=h+"px")&&(f.width=i);f.height!=(i=g+"px")&&(f.height=i)}};s[p].hide=function(){!this.removed&&(this.Group.style.display="none");return this};s[p].show=function(){!this.removed&&(this.Group.style.display=
-"block");return this};s[p].getBBox=function(){if(this.removed)return this;if(ra[z](this.type))return xa(this.attrs.path);return{x:this.X+(this.bbx||0),y:this.Y,width:this.W,height:this.H}};s[p].remove=function(){if(!this.removed){ma(this,this.paper);this.node.parentNode.removeChild(this.node);this.Group.parentNode.removeChild(this.Group);this.shape&&this.shape.parentNode.removeChild(this.shape);for(var a in this)delete this[a];this.removed=true}};s[p].attr=function(a,b){if(this.removed)return this;
-if(a==null){a={};for(var c in this.attrs)if(this.attrs[z](c))a[c]=this.attrs[c];this._.rt.deg&&(a.rotation=this.rotate());(this._.sx!=1||this._.sy!=1)&&(a.scale=this.scale());a.gradient&&a.fill=="none"&&(a.fill=a.gradient)&&delete a.gradient;return a}if(b==null&&l.is(a,ga)){if(a=="translation")return Aa.call(this);if(a=="rotation")return this.rotate();if(a=="scale")return this.scale();if(a==ca&&this.attrs.fill=="none"&&this.attrs.gradient)return this.attrs.gradient;return this.attrs[a]}if(this.attrs&&
-b==null&&l.is(a,U)){var d={};c=0;for(b=a[o];c<b;c++)d[a[c]]=this.attr(a[c]);return d}if(b!=null){d={};d[a]=b}b==null&&l.is(a,"object")&&(d=a);if(d){if(d.text&&this.type=="text")this.node.string=d.text;ea(this,d);if(d.gradient&&({circle:1,ellipse:1}[z](this.type)||D(d.gradient).charAt()!="r"))pa(this,d.gradient);(!ra[z](this.type)||this._.rt.deg)&&this.setBox(this.attrs)}return this};s[p].toFront=function(){!this.removed&&this.Group.parentNode[x](this.Group);this.paper.top!=this&&Ya(this,this.paper);
-return this};s[p].toBack=function(){if(this.removed)return this;if(this.Group.parentNode.firstChild!=this.Group){this.Group.parentNode.insertBefore(this.Group,this.Group.parentNode.firstChild);Za(this,this.paper)}return this};s[p].insertAfter=function(a){if(this.removed)return this;if(a.constructor==X)a=a[a.length];a.Group.nextSibling?a.Group.parentNode.insertBefore(this.Group,a.Group.nextSibling):a.Group.parentNode[x](this.Group);$a(this,a,this.paper);return this};s[p].insertBefore=function(a){if(this.removed)return this;
-if(a.constructor==X)a=a[0];a.Group.parentNode.insertBefore(this.Group,a.Group);ab(this,a,this.paper);return this};var Hb=/ progid:\S+Blur\([^\)]+\)/g;s[p].blur=function(a){var b=this.node.runtimeStyle,c=b.filter;c=c.replace(Hb,A);if(+a!==0){this.attrs.blur=a;b.filter=c+N+Fa+".Blur(pixelradius="+(+a||1.5)+")";b.margin=l.format("-{0}px 0 0 -{0}px",Q(+a||1.5))}else{b.filter=c;b.margin=0;delete this.attrs.blur}};fb=function(a,b,c,d){var f=S("group"),e=S("oval");f.style.cssText="position:absolute;left:0;top:0;width:"+
-a.width+"px;height:"+a.height+"px";f.coordsize=qa;f.coordorigin=a.coordorigin;f[x](e);e=new s(e,f,a);e.type="circle";ea(e,{stroke:"#000",fill:"none"});e.attrs.cx=b;e.attrs.cy=c;e.attrs.r=d;e.setBox({x:b-d,y:c-d,width:d*2,height:d*2});a.canvas[x](f);return e};function mb(a,b,c,d,f){return f?l.format("M{0},{1}l{2},0a{3},{3},0,0,1,{3},{3}l0,{5}a{3},{3},0,0,1,{4},{3}l{6},0a{3},{3},0,0,1,{4},{4}l0,{7}a{3},{3},0,0,1,{3},{4}z",a+f,b,c-f*2,f,-f,d-f*2,f*2-c,f*2-d):l.format("M{0},{1}l{2},0,0,{3},{4},0z",a,
-b,c,d,-c)}gb=function(a,b,c,d,f,e){var g=mb(b,c,d,f,e);a=a.path(g);var h=a.attrs;a.X=h.x=b;a.Y=h.y=c;a.W=h.width=d;a.H=h.height=f;h.r=e;h.path=g;a.type="rect";return a};hb=function(a,b,c,d,f){var e=S("group"),g=S("oval");e.style.cssText="position:absolute;left:0;top:0;width:"+a.width+"px;height:"+a.height+"px";e.coordsize=qa;e.coordorigin=a.coordorigin;e[x](g);g=new s(g,e,a);g.type="ellipse";ea(g,{stroke:"#000"});g.attrs.cx=b;g.attrs.cy=c;g.attrs.rx=d;g.attrs.ry=f;g.setBox({x:b-d,y:c-f,width:d*2,
-height:f*2});a.canvas[x](e);return g};ib=function(a,b,c,d,f,e){var g=S("group"),h=S("image");g.style.cssText="position:absolute;left:0;top:0;width:"+a.width+"px;height:"+a.height+"px";g.coordsize=qa;g.coordorigin=a.coordorigin;h.src=b;g[x](h);h=new s(h,g,a);h.type="image";h.attrs.src=b;h.attrs.x=c;h.attrs.y=d;h.attrs.w=f;h.attrs.h=e;h.setBox({x:c,y:d,width:f,height:e});a.canvas[x](g);return h};jb=function(a,b,c,d){var f=S("group"),e=S("shape"),g=e.style,h=S("path"),i=S("textpath");f.style.cssText=
-"position:absolute;left:0;top:0;width:"+a.width+"px;height:"+a.height+"px";f.coordsize=qa;f.coordorigin=a.coordorigin;h.v=l.format("m{0},{1}l{2},{1}",Q(b*10),Q(c*10),Q(b*10)+1);h.textpathok=true;g.width=a.width;g.height=a.height;i.string=D(d);i.on=true;e[x](i);e[x](h);f[x](e);g=new s(i,f,a);g.shape=e;g.textpath=h;g.type="text";g.attrs.text=d;g.attrs.x=b;g.attrs.y=c;g.attrs.w=1;g.attrs.h=1;ea(g,{font:ta.font,stroke:"none",fill:"#000"});g.setBox();a.canvas[x](f);return g};kb=function(a,b){var c=this.canvas.style;
-a==+a&&(a+="px");b==+b&&(b+="px");c.width=a;c.height=b;c.clip="rect(0 "+a+" "+b+" 0)";return this};var S;C.createStyleSheet().addRule(".rvml","behavior:url(#default#VML)");try{!C.namespaces.rvml&&C.namespaces.add("rvml","urn:schemas-microsoft-com:vml");S=function(a){return C.createElement("<rvml:"+a+' class="rvml">')}}catch(Pb){S=function(a){return C.createElement("<"+a+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}Ca=function(){var a=Xa[K](0,arguments),b=a.container,c=a.height,d=a.width,
-f=a.x;a=a.y;if(!b)throw new Error("VML container not found.");var e=new H,g=e.canvas=C.createElement("div"),h=g.style;f=f||0;a=a||0;d=d||512;c=c||342;d==+d&&(d+="px");c==+c&&(c+="px");e.width=1000;e.height=1000;e.coordsize=na*1000+N+na*1000;e.coordorigin="0 0";e.span=C.createElement("span");e.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;";g[x](e.span);h.cssText=l.format("width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden",
-d,c);if(b==1){C.body[x](g);h.left=f+"px";h.top=a+"px";h.position="absolute"}else b.firstChild?b.insertBefore(g,b.firstChild):b[x](g);Ia.call(e,e,l.fn);return e};H[p].clear=function(){this.canvas.innerHTML=A;this.span=C.createElement("span");this.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;";this.canvas[x](this.span);this.bottom=this.top=null};H[p].remove=function(){this.canvas.parentNode.removeChild(this.canvas);for(var a in this)this[a]=
-bb(a);return true}}H[p].safari=navigator.vendor=="Apple Computer, Inc."&&(navigator.userAgent.match(/Version\/(.*?)\s/)[1]<4||aa.navigator.platform.slice(0,2)=="iP")?function(){var a=this.rect(-99,-99,this.width+99,this.height+99).attr({stroke:"none"});aa.setTimeout(function(){a.remove()})}:function(){};function Ib(){this.returnValue=false}function Jb(){return this.originalEvent.preventDefault()}function Kb(){this.cancelBubble=true}function Lb(){return this.originalEvent.stopPropagation()}var Mb=
-function(){if(C.addEventListener)return function(a,b,c,d){var f=Da&&Ea[b]?Ea[b]:b;function e(g){if(Da&&Ea[z](b))for(var h=0,i=g.targetTouches&&g.targetTouches.length;h<i;h++)if(g.targetTouches[h].target==a){i=g;g=g.targetTouches[h];g.originalEvent=i;g.preventDefault=Jb;g.stopPropagation=Lb;break}return c.call(d,g)}a.addEventListener(f,e,false);return function(){a.removeEventListener(f,e,false);return true}};else if(C.attachEvent)return function(a,b,c,d){function f(g){g=g||aa.event;g.preventDefault=
-g.preventDefault||Ib;g.stopPropagation=g.stopPropagation||Kb;return c.call(d,g)}a.attachEvent("on"+b,f);function e(){a.detachEvent("on"+b,f);return true}return e}}(),$=[];function Ka(a){for(var b=a.clientX,c=a.clientY,d,f=$.length;f--;){d=$[f];if(Da)for(var e=a.touches.length,g;e--;){g=a.touches[e];if(g.identifier==d.el._drag.id){b=g.clientX;c=g.clientY;(a.originalEvent?a.originalEvent:a).preventDefault();break}}else a.preventDefault();d.move&&d.move.call(d.el,b-d.el._drag.x,c-d.el._drag.y,b,c)}}
-function La(){l.unmousemove(Ka).unmouseup(La);for(var a=$.length,b;a--;){b=$[a];b.el._drag={};b.end&&b.end.call(b.el)}$=[]}for(da=Ra[o];da--;)(function(a){l[a]=s[p][a]=function(b){if(l.is(b,"function")){this.events=this.events||[];this.events.push({name:a,f:b,unbind:Mb(this.shape||this.node||C,a,b,this)})}return this};l["un"+a]=s[p]["un"+a]=function(b){for(var c=this.events,d=c[o];d--;)if(c[d].name==a&&c[d].f==b){c[d].unbind();c.splice(d,1);!c.length&&delete this.events;return this}return this}})(Ra[da]);
-s[p].hover=function(a,b){return this.mouseover(a).mouseout(b)};s[p].unhover=function(a,b){return this.unmouseover(a).unmouseout(b)};s[p].drag=function(a,b,c){this._drag={};this.mousedown(function(d){(d.originalEvent||d).preventDefault();this._drag.x=d.clientX;this._drag.y=d.clientY;this._drag.id=d.identifier;b&&b.call(this,d.clientX,d.clientY);!$.length&&l.mousemove(Ka).mouseup(La);$.push({el:this,move:a,end:c})});return this};s[p].undrag=function(a,b,c){for(b=$.length;b--;){$[b].el==this&&$[b].move==
-a&&$[b].end==c&&$.splice(b,1);!$.length&&l.unmousemove(Ka).unmouseup(La)}};H[p].circle=function(a,b,c){return fb(this,a||0,b||0,c||0)};H[p].rect=function(a,b,c,d,f){return gb(this,a||0,b||0,c||0,d||0,f||0)};H[p].ellipse=function(a,b,c,d){return hb(this,a||0,b||0,c||0,d||0)};H[p].path=function(a){a&&!l.is(a,ga)&&!l.is(a[0],U)&&(a+=A);return db(l.format[K](l,arguments),this)};H[p].image=function(a,b,c,d,f){return ib(this,a||"about:blank",b||0,c||0,d||0,f||0)};H[p].text=function(a,b,c){return jb(this,
-a||0,b||0,c||A)};H[p].set=function(a){arguments[o]>1&&(a=Array[p].splice.call(arguments,0,arguments[o]));return new X(a)};H[p].setSize=kb;H[p].top=H[p].bottom=null;H[p].raphael=l;function nb(){return this.x+N+this.y}s[p].resetScale=function(){if(this.removed)return this;this._.sx=1;this._.sy=1;this.attrs.scale="1 1"};s[p].scale=function(a,b,c,d){if(this.removed)return this;if(a==null&&b==null)return{x:this._.sx,y:this._.sy,toString:nb};b=b||a;!+b&&(b=a);var f,e,g=this.attrs;if(a!=0){var h=this.getBBox(),
-i=h.x+h.width/2,j=h.y+h.height/2;f=a/this._.sx;e=b/this._.sy;c=+c||c==0?c:i;d=+d||d==0?d:j;h=~~(a/v.abs(a));var m=~~(b/v.abs(b)),n=this.node.style,r=c+(i-c)*f;j=d+(j-d)*e;switch(this.type){case "rect":case "image":var q=g.width*h*f,k=g.height*m*e;this.attr({height:k,r:g.r*ba(h*f,m*e),width:q,x:r-q/2,y:j-k/2});break;case "circle":case "ellipse":this.attr({rx:g.rx*h*f,ry:g.ry*m*e,r:g.r*ba(h*f,m*e),cx:r,cy:j});break;case "text":this.attr({x:r,y:j});break;case "path":i=Ha(g.path);for(var t=true,L=0,B=
-i[o];L<B;L++){var w=i[L],J=sa.call(w[0]);if(!(J=="M"&&t)){t=false;if(J=="A"){w[i[L][o]-2]*=f;w[i[L][o]-1]*=e;w[1]*=h*f;w[2]*=m*e;w[5]=+!(h+m?!+w[5]:+w[5])}else if(J=="H"){J=1;for(var ia=w[o];J<ia;J++)w[J]*=f}else if(J=="V"){J=1;for(ia=w[o];J<ia;J++)w[J]*=e}else{J=1;for(ia=w[o];J<ia;J++)w[J]*=J%2?f:e}}}e=xa(i);f=r-e.x-e.width/2;e=j-e.y-e.height/2;i[0][1]+=f;i[0][2]+=e;this.attr({path:i});break}if(this.type in{text:1,image:1}&&(h!=1||m!=1))if(this.transformations){this.transformations[2]="scale("[M](h,
-",",m,")");this.node[W]("transform",this.transformations[R](N));f=h==-1?-g.x-(q||0):g.x;e=m==-1?-g.y-(k||0):g.y;this.attr({x:f,y:e});g.fx=h-1;g.fy=m-1}else{this.node.filterMatrix=Fa+".Matrix(M11="[M](h,", M12=0, M21=0, M22=",m,", Dx=0, Dy=0, sizingmethod='auto expand', filtertype='bilinear')");n.filter=(this.node.filterMatrix||A)+(this.node.filterOpacity||A)}else if(this.transformations){this.transformations[2]=A;this.node[W]("transform",this.transformations[R](N));g.fx=0;g.fy=0}else{this.node.filterMatrix=
-A;n.filter=(this.node.filterMatrix||A)+(this.node.filterOpacity||A)}g.scale=[a,b,c,d][R](N);this._.sx=a;this._.sy=b}return this};s[p].clone=function(){if(this.removed)return null;var a=this.attr();delete a.scale;delete a.translation;return this.paper[this.type]().attr(a)};var ob=Z(function(a,b,c,d,f,e,g,h,i){for(var j=0,m,n=0;n<1.01;n+=0.01){var r=la(a,b,c,d,f,e,g,h,n);n&&(j+=E(E(m.x-r.x,2)+E(m.y-r.y,2),0.5));if(j>=i)return r;m=r}});function Ma(a,b){return function(c,d,f){c=wa(c);for(var e,g,h,i,
-j="",m={},n=0,r=0,q=c.length;r<q;r++){h=c[r];if(h[0]=="M"){e=+h[1];g=+h[2]}else{i=Nb(e,g,h[1],h[2],h[3],h[4],h[5],h[6]);if(n+i>d){if(b&&!m.start){e=ob(e,g,h[1],h[2],h[3],h[4],h[5],h[6],d-n);j+=["C",e.start.x,e.start.y,e.m.x,e.m.y,e.x,e.y];if(f)return j;m.start=j;j=["M",e.x,e.y+"C",e.n.x,e.n.y,e.end.x,e.end.y,h[5],h[6]][R]();n+=i;e=+h[5];g=+h[6];continue}if(!a&&!b){e=ob(e,g,h[1],h[2],h[3],h[4],h[5],h[6],d-n);return{x:e.x,y:e.y,alpha:e.alpha}}}n+=i;e=+h[5];g=+h[6]}j+=h}m.end=j;e=a?n:b?m:l.findDotsAtSegment(e,
-g,h[1],h[2],h[3],h[4],h[5],h[6],1);e.alpha&&(e={x:e.x,y:e.y,alpha:e.alpha});return e}}var Nb=Z(function(a,b,c,d,f,e,g,h){for(var i={x:0,y:0},j=0,m=0;m<1.01;m+=0.01){var n=la(a,b,c,d,f,e,g,h,m);m&&(j+=E(E(i.x-n.x,2)+E(i.y-n.y,2),0.5));i=n}return j}),pb=Ma(1),Ba=Ma(),Na=Ma(0,1);s[p].getTotalLength=function(){if(this.type=="path"){if(this.node.getTotalLength)return this.node.getTotalLength();return pb(this.attrs.path)}};s[p].getPointAtLength=function(a){if(this.type=="path"){if(this.node.getPointAtLength)return this.node.getPointAtLength(a);
-return Ba(this.attrs.path,a)}};s[p].getSubpath=function(a,b){if(this.type=="path"){if(v.abs(this.getTotalLength()-b)<1.0E-6)return Na(this.attrs.path,a).end;b=Na(this.attrs.path,b,1);return a?Na(b,a).end:b}};l.easing_formulas={linear:function(a){return a},"<":function(a){return E(a,3)},">":function(a){return E(a-1,3)+1},"<>":function(a){a*=2;if(a<1)return E(a,3)/2;a-=2;return(E(a,3)+2)/2},backIn:function(a){var b=1.70158;return a*a*((b+1)*a-b)},backOut:function(a){a-=1;var b=1.70158;return a*a*((b+
-1)*a+b)+1},elastic:function(a){if(a==0||a==1)return a;var b=0.3,c=b/4;return E(2,-10*a)*v.sin((a-c)*2*v.PI/b)+1},bounce:function(a){var b=7.5625,c=2.75;if(a<1/c)a=b*a*a;else if(a<2/c){a-=1.5/c;a=b*a*a+0.75}else if(a<2.5/c){a-=2.25/c;a=b*a*a+0.9375}else{a-=2.625/c;a=b*a*a+0.984375}return a}};var T={length:0};function qb(){var a=+new Date;for(var b in T)if(b!="length"&&T[z](b)){var c=T[b];if(c.stop||c.el.removed){delete T[b];T[o]--}else{var d=a-c.start,f=c.ms,e=c.easing,g=c.from,h=c.diff,i=c.to,j=c.t,
-m=c.prev||0,n=c.el,r=c.callback,q={},k;if(d<f){r=l.easing_formulas[e]?l.easing_formulas[e](d/f):d/f;for(var t in g)if(g[z](t)){switch(Ga[t]){case "along":k=r*f*h[t];i.back&&(k=i.len-k);e=Ba(i[t],k);n.translate(h.sx-h.x||0,h.sy-h.y||0);h.x=e.x;h.y=e.y;n.translate(e.x-h.sx,e.y-h.sy);i.rot&&n.rotate(h.r+e.alpha,e.x,e.y);break;case P:k=+g[t]+r*f*h[t];break;case "colour":k="rgb("+[Oa(Q(g[t].r+r*f*h[t].r)),Oa(Q(g[t].g+r*f*h[t].g)),Oa(Q(g[t].b+r*f*h[t].b))][R](",")+")";break;case "path":k=[];e=0;for(var L=
-g[t][o];e<L;e++){k[e]=[g[t][e][0]];for(var B=1,w=g[t][e][o];B<w;B++)k[e][B]=+g[t][e][B]+r*f*h[t][e][B];k[e]=k[e][R](N)}k=k[R](N);break;case "csv":switch(t){case "translation":k=h[t][0]*(d-m);e=h[t][1]*(d-m);j.x+=k;j.y+=e;k=k+N+e;break;case "rotation":k=+g[t][0]+r*f*h[t][0];g[t][1]&&(k+=","+g[t][1]+","+g[t][2]);break;case "scale":k=[+g[t][0]+r*f*h[t][0],+g[t][1]+r*f*h[t][1],2 in i[t]?i[t][2]:A,3 in i[t]?i[t][3]:A][R](N);break;case "clip-rect":k=[];for(e=4;e--;)k[e]=+g[t][e]+r*f*h[t][e];break}break}q[t]=
-k}n.attr(q);n._run&&n._run.call(n)}else{if(i.along){e=Ba(i.along,i.len*!i.back);n.translate(h.sx-(h.x||0)+e.x-h.sx,h.sy-(h.y||0)+e.y-h.sy);i.rot&&n.rotate(h.r+e.alpha,e.x,e.y)}(j.x||j.y)&&n.translate(-j.x,-j.y);i.scale&&(i.scale+=A);n.attr(i);delete T[b];T[o]--;n.in_animation=null;l.is(r,"function")&&r.call(n)}c.prev=d}}l.svg&&n&&n.paper&&n.paper.safari();T[o]&&aa.setTimeout(qb)}function Oa(a){return Y(ba(a,255),0)}function Aa(a,b){if(a==null)return{x:this._.tx,y:this._.ty,toString:nb};this._.tx+=
-+a;this._.ty+=+b;switch(this.type){case "circle":case "ellipse":this.attr({cx:+a+this.attrs.cx,cy:+b+this.attrs.cy});break;case "rect":case "image":case "text":this.attr({x:+a+this.attrs.x,y:+b+this.attrs.y});break;case "path":var c=Ha(this.attrs.path);c[0][1]+=+a;c[0][2]+=+b;this.attr({path:c});break}return this}s[p].animateWith=function(a,b,c,d,f){T[a.id]&&(b.start=T[a.id].start);return this.animate(b,c,d,f)};s[p].animateAlong=rb();s[p].animateAlongBack=rb(1);function rb(a){return function(b,c,
-d,f){var e={back:a};l.is(d,"function")?(f=d):(e.rot=d);b&&b.constructor==s&&(b=b.attrs.path);b&&(e.along=b);return this.animate(e,c,f)}}s[p].onAnimation=function(a){this._run=a||0;return this};s[p].animate=function(a,b,c,d){if(l.is(c,"function")||!c)d=c||null;var f={},e={},g={};for(var h in a)if(a[z](h))if(Ga[z](h)){f[h]=this.attr(h);f[h]==null&&(f[h]=ta[h]);e[h]=a[h];switch(Ga[h]){case "along":var i=pb(a[h]),j=Ba(a[h],i*!!a.back),m=this.getBBox();g[h]=i/b;g.tx=m.x;g.ty=m.y;g.sx=j.x;g.sy=j.y;e.rot=
-a.rot;e.back=a.back;e.len=i;a.rot&&(g.r=y(this.rotate())||0);break;case P:g[h]=(e[h]-f[h])/b;break;case "colour":f[h]=l.getRGB(f[h]);i=l.getRGB(e[h]);g[h]={r:(i.r-f[h].r)/b,g:(i.g-f[h].g)/b,b:(i.b-f[h].b)/b};break;case "path":i=wa(f[h],e[h]);f[h]=i[0];j=i[1];g[h]=[];i=0;for(m=f[h][o];i<m;i++){g[h][i]=[0];for(var n=1,r=f[h][i][o];n<r;n++)g[h][i][n]=(j[i][n]-f[h][i][n])/b}break;case "csv":j=D(a[h])[G](V);i=D(f[h])[G](V);switch(h){case "translation":f[h]=[0,0];g[h]=[j[0]/b,j[1]/b];break;case "rotation":f[h]=
-i[1]==j[1]&&i[2]==j[2]?i:[0,j[1],j[2]];g[h]=[(j[0]-f[h][0])/b,0,0];break;case "scale":a[h]=j;f[h]=D(f[h])[G](V);g[h]=[(j[0]-f[h][0])/b,(j[1]-f[h][1])/b,0,0];break;case "clip-rect":f[h]=D(f[h])[G](V);g[h]=[];for(i=4;i--;)g[h][i]=(j[i]-f[h][i])/b;break}e[h]=j}}this.stop();this.in_animation=1;T[this.id]={start:a.start||+new Date,ms:b,easing:c,from:f,diff:g,to:e,el:this,callback:d,t:{x:0,y:0}};++T[o]==1&&qb();return this};s[p].stop=function(){T[this.id]&&T[o]--;delete T[this.id];return this};s[p].translate=
-function(a,b){return this.attr({translation:a+" "+b})};s[p][O]=function(){return"Rapha\u00ebl\u2019s object"};l.ae=T;function X(a){this.items=[];this[o]=0;this.type="set";if(a)for(var b=0,c=a[o];b<c;b++)if(a[b]&&(a[b].constructor==s||a[b].constructor==X)){this[this.items[o]]=this.items[this.items[o]]=a[b];this[o]++}}X[p][F]=function(){for(var a,b,c=0,d=arguments[o];c<d;c++)if((a=arguments[c])&&(a.constructor==s||a.constructor==X)){b=this.items[o];this[b]=this.items[b]=a;this[o]++}return this};X[p].pop=
-function(){delete this[this[o]--];return this.items.pop()};for(var Pa in s[p])if(s[p][z](Pa))X[p][Pa]=function(a){return function(){for(var b=0,c=this.items[o];b<c;b++)this.items[b][a][K](this.items[b],arguments);return this}}(Pa);X[p].attr=function(a,b){if(a&&l.is(a,U)&&l.is(a[0],"object")){b=0;for(var c=a[o];b<c;b++)this.items[b].attr(a[b])}else{c=0;for(var d=this.items[o];c<d;c++)this.items[c].attr(a,b)}return this};X[p].animate=function(a,b,c,d){(l.is(c,"function")||!c)&&(d=c||null);var f=this.items[o],
-e=f,g,h=this,i;d&&(i=function(){!--f&&d.call(h)});c=l.is(c,ga)?c:i;for(g=this.items[--e].animate(a,b,c,i);e--;)this.items[e].animateWith(g,a,b,c,i);return this};X[p].insertAfter=function(a){for(var b=this.items[o];b--;)this.items[b].insertAfter(a);return this};X[p].getBBox=function(){for(var a=[],b=[],c=[],d=[],f=this.items[o];f--;){var e=this.items[f].getBBox();a[F](e.x);b[F](e.y);c[F](e.x+e.width);d[F](e.y+e.height)}a=ba[K](0,a);b=ba[K](0,b);return{x:a,y:b,width:Y[K](0,c)-a,height:Y[K](0,d)-b}};
-X[p].clone=function(a){a=new X;for(var b=0,c=this.items[o];b<c;b++)a[F](this.items[b].clone());return a};l.registerFont=function(a){if(!a.face)return a;this.fonts=this.fonts||{};var b={w:a.w,face:{},glyphs:{}},c=a.face["font-family"];for(var d in a.face)if(a.face[z](d))b.face[d]=a.face[d];if(this.fonts[c])this.fonts[c][F](b);else this.fonts[c]=[b];if(!a.svg){b.face["units-per-em"]=ha(a.face["units-per-em"],10);for(var f in a.glyphs)if(a.glyphs[z](f)){c=a.glyphs[f];b.glyphs[f]={w:c.w,k:{},d:c.d&&"M"+
-c.d[I](/[mlcxtrv]/g,function(g){return{l:"L",c:"C",x:"z",t:"m",r:"l",v:"c"}[g]||"M"})+"z"};if(c.k)for(var e in c.k)if(c[z](e))b.glyphs[f].k[e]=c.k[e]}}return a};H[p].getFont=function(a,b,c,d){d=d||"normal";c=c||"normal";b=+b||{normal:400,bold:700,lighter:300,bolder:800}[b]||400;if(l.fonts){var f=l.fonts[a];if(!f){a=new RegExp("(^|\\s)"+a[I](/[^\w\d\s+!~.:_-]/g,A)+"(\\s|$)","i");for(var e in l.fonts)if(l.fonts[z](e))if(a.test(e)){f=l.fonts[e];break}}var g;if(f){e=0;for(a=f[o];e<a;e++){g=f[e];if(g.face["font-weight"]==
-b&&(g.face["font-style"]==c||!g.face["font-style"])&&g.face["font-stretch"]==d)break}}return g}};H[p].print=function(a,b,c,d,f,e){e=e||"middle";var g=this.set(),h=D(c)[G](A),i=0;l.is(d,c)&&(d=this.getFont(d));if(d){c=(f||16)/d.face["units-per-em"];var j=d.face.bbox.split(V);f=+j[0];e=+j[1]+(e=="baseline"?j[3]-j[1]+ +d.face.descent:(j[3]-j[1])/2);j=0;for(var m=h[o];j<m;j++){var n=j&&d.glyphs[h[j-1]]||{},r=d.glyphs[h[j]];i+=j?(n.w||d.w)+(n.k&&n.k[h[j]]||0):0;r&&r.d&&g[F](this.path(r.d).attr({fill:"#000",
-stroke:"none",translation:[i,0]}))}g.scale(c,c,f,e).translate(a-f,b-e)}return g};var Ob=/\{(\d+)\}/g;l.format=function(a,b){var c=l.is(b,U)?[0][M](b):arguments;a&&l.is(a,ga)&&c[o]-1&&(a=a[I](Ob,function(d,f){return c[++f]==null?A:c[f]}));return a||A};l.ninja=function(){Qa.was?(Raphael=Qa.is):delete Raphael;return l};l.el=s[p];return l}();
--- a/web/hdalab/static/hdalab/lib/underscore-min.js	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-// Underscore.js 1.2.3
-// (c) 2009-2011 Jeremy Ashkenas, DocumentCloud Inc.
-// Underscore is freely distributable under the MIT license.
-// Portions of Underscore are inspired or borrowed from Prototype,
-// Oliver Steele's Functional, and John Resig's Micro-Templating.
-// For all details and documentation:
-// http://documentcloud.github.com/underscore
-(function(){function r(a,c,d){if(a===c)return a!==0||1/a==1/c;if(a==null||c==null)return a===c;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return false;switch(e){case "[object String]":return a==String(c);case "[object Number]":return a!=+a?c!=+c:a==0?1/a==1/c:a==+c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source==
-c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if(typeof a!="object"||typeof c!="object")return false;for(var f=d.length;f--;)if(d[f]==a)return true;d.push(a);var f=0,g=true;if(e=="[object Array]"){if(f=a.length,g=f==c.length)for(;f--;)if(!(g=f in a==f in c&&r(a[f],c[f],d)))break}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return false;for(var h in a)if(m.call(a,h)&&(f++,!(g=m.call(c,h)&&r(a[h],c[h],d))))break;if(g){for(h in c)if(m.call(c,
-h)&&!f--)break;g=!f}}d.pop();return g}var s=this,F=s._,o={},k=Array.prototype,p=Object.prototype,i=k.slice,G=k.concat,H=k.unshift,l=p.toString,m=p.hasOwnProperty,v=k.forEach,w=k.map,x=k.reduce,y=k.reduceRight,z=k.filter,A=k.every,B=k.some,q=k.indexOf,C=k.lastIndexOf,p=Array.isArray,I=Object.keys,t=Function.prototype.bind,b=function(a){return new n(a)};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports)exports=module.exports=b;exports._=b}else typeof define==="function"&&
-define.amd?define("underscore",function(){return b}):s._=b;b.VERSION="1.2.3";var j=b.each=b.forEach=function(a,c,b){if(a!=null)if(v&&a.forEach===v)a.forEach(c,b);else if(a.length===+a.length)for(var e=0,f=a.length;e<f;e++){if(e in a&&c.call(b,a[e],e,a)===o)break}else for(e in a)if(m.call(a,e)&&c.call(b,a[e],e,a)===o)break};b.map=function(a,c,b){var e=[];if(a==null)return e;if(w&&a.map===w)return a.map(c,b);j(a,function(a,g,h){e[e.length]=c.call(b,a,g,h)});return e};b.reduce=b.foldl=b.inject=function(a,
-c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(x&&a.reduce===x)return e&&(c=b.bind(c,e)),f?a.reduce(c,d):a.reduce(c);j(a,function(a,b,i){f?d=c.call(e,d,a,b,i):(d=a,f=true)});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(y&&a.reduceRight===y)return e&&(c=b.bind(c,e)),f?a.reduceRight(c,d):a.reduceRight(c);var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,
-c,d,e):b.reduce(g,c)};b.find=b.detect=function(a,c,b){var e;D(a,function(a,g,h){if(c.call(b,a,g,h))return e=a,true});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(z&&a.filter===z)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(A&&a.every===A)return a.every(c,
-b);j(a,function(a,g,h){if(!(e=e&&c.call(b,a,g,h)))return o});return e};var D=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(B&&a.some===B)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return o});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;return q&&a.indexOf===q?a.indexOf(c)!=-1:b=D(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(c.call?c||a:a[c]).apply(a,
-d)})};b.pluck=function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b<e.computed&&(e={value:a,
-computed:b})});return e.value};b.shuffle=function(a){var c=[],b;j(a,function(a,f){f==0?c[0]=a:(b=Math.floor(Math.random()*(f+1)),c[f]=c[b],c[b]=a)});return c};b.sortBy=function(a,c,d){return b.pluck(b.map(a,function(a,b,g){return{value:a,criteria:c.call(d,a,b,g)}}).sort(function(a,c){var b=a.criteria,d=c.criteria;return b<d?-1:b>d?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=
-function(a,c,d){d||(d=b.identity);for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?e=g+1:f=g}return e};b.toArray=function(a){return!a?[]:a.toArray?a.toArray():b.isArray(a)?i.call(a):b.isArguments(a)?i.call(a):b.values(a)};b.size=function(a){return b.toArray(a).length};b.first=b.head=function(a,b,d){return b!=null&&!d?i.call(a,0,b):a[0]};b.initial=function(a,b,d){return i.call(a,0,a.length-(b==null||d?1:b))};b.last=function(a,b,d){return b!=null&&!d?i.call(a,Math.max(a.length-b,0)):a[a.length-
-1]};b.rest=b.tail=function(a,b,d){return i.call(a,b==null||d?1:b)};b.compact=function(a){return b.filter(a,function(a){return!!a})};b.flatten=function(a,c){return b.reduce(a,function(a,e){if(b.isArray(e))return a.concat(c?e:b.flatten(e));a[a.length]=e;return a},[])};b.without=function(a){return b.difference(a,i.call(arguments,1))};b.uniq=b.unique=function(a,c,d){var d=d?b.map(a,d):a,e=[];b.reduce(d,function(d,g,h){if(0==h||(c===true?b.last(d)!=g:!b.include(d,g)))d[d.length]=g,e[e.length]=a[h];return d},
-[]);return e};b.union=function(){return b.uniq(b.flatten(arguments,true))};b.intersection=b.intersect=function(a){var c=i.call(arguments,1);return b.filter(b.uniq(a),function(a){return b.every(c,function(c){return b.indexOf(c,a)>=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1));return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e<c;e++)d[e]=b.pluck(a,""+e);return d};b.indexOf=function(a,
-c,d){if(a==null)return-1;var e;if(d)return d=b.sortedIndex(a,c),a[d]===c?d:-1;if(q&&a.indexOf===q)return a.indexOf(c);for(d=0,e=a.length;d<e;d++)if(d in a&&a[d]===c)return d;return-1};b.lastIndexOf=function(a,b){if(a==null)return-1;if(C&&a.lastIndexOf===C)return a.lastIndexOf(b);for(var d=a.length;d--;)if(d in a&&a[d]===b)return d;return-1};b.range=function(a,b,d){arguments.length<=1&&(b=a||0,a=0);for(var d=arguments[2]||1,e=Math.max(Math.ceil((b-a)/d),0),f=0,g=Array(e);f<e;)g[f++]=a,a+=d;return g};
-var E=function(){};b.bind=function(a,c){var d,e;if(a.bind===t&&t)return t.apply(a,i.call(arguments,1));if(!b.isFunction(a))throw new TypeError;e=i.call(arguments,2);return d=function(){if(!(this instanceof d))return a.apply(c,e.concat(i.call(arguments)));E.prototype=a.prototype;var b=new E,g=a.apply(b,e.concat(i.call(arguments)));return Object(g)===g?g:b}};b.bindAll=function(a){var c=i.call(arguments,1);c.length==0&&(c=b.functions(a));j(c,function(c){a[c]=b.bind(a[c],a)});return a};b.memoize=function(a,
-c){var d={};c||(c=b.identity);return function(){var b=c.apply(this,arguments);return m.call(d,b)?d[b]:d[b]=a.apply(this,arguments)}};b.delay=function(a,b){var d=i.call(arguments,2);return setTimeout(function(){return a.apply(a,d)},b)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(i.call(arguments,1)))};b.throttle=function(a,c){var d,e,f,g,h,i=b.debounce(function(){h=g=false},c);return function(){d=this;e=arguments;var b;f||(f=setTimeout(function(){f=null;h&&a.apply(d,e);i()},c));g?h=true:
-a.apply(d,e);i();g=true}};b.debounce=function(a,b){var d;return function(){var e=this,f=arguments;clearTimeout(d);d=setTimeout(function(){d=null;a.apply(e,f)},b)}};b.once=function(a){var b=false,d;return function(){if(b)return d;b=true;return d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var d=G.apply([a],arguments);return b.apply(this,d)}};b.compose=function(){var a=arguments;return function(){for(var b=arguments,d=a.length-1;d>=0;d--)b=[a[d].apply(this,b)];return b[0]}};b.after=
-function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=I||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var b=[],d;for(d in a)m.call(a,d)&&(b[b.length]=d);return b};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)b[d]!==void 0&&(a[d]=b[d])});return a};b.defaults=function(a){j(i.call(arguments,
-1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return r(a,b,[])};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(m.call(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=p||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===
-Object(a)};b.isArguments=function(a){return l.call(a)=="[object Arguments]"};if(!b.isArguments(arguments))b.isArguments=function(a){return!(!a||!m.call(a,"callee"))};b.isFunction=function(a){return l.call(a)=="[object Function]"};b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)==
-"[object Date]"};b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.noConflict=function(){s._=F;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e<a;e++)b.call(d,e)};b.escape=function(a){return(""+a).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;").replace(/\//g,"&#x2F;")};b.mixin=function(a){j(b.functions(a),function(c){J(c,
-b[c]=a[c])})};var K=0;b.uniqueId=function(a){var b=K++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};b.template=function(a,c){var d=b.templateSettings,d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.escape,function(a,b){return"',_.escape("+b.replace(/\\'/g,"'")+"),'"}).replace(d.interpolate,function(a,b){return"',"+b.replace(/\\'/g,
-"'")+",'"}).replace(d.evaluate||null,function(a,b){return"');"+b.replace(/\\'/g,"'").replace(/[\r\n\t]/g," ")+";__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",e=new Function("obj","_",d);return c?e(c,b):function(a){return e.call(this,a,b)}};var n=function(a){this._wrapped=a};b.prototype=n.prototype;var u=function(a,c){return c?b(a).chain():a},J=function(a,c){n.prototype[a]=function(){var a=i.call(arguments);H.call(a,this._wrapped);return u(c.apply(b,
-a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];n.prototype[a]=function(){b.apply(this._wrapped,arguments);return u(this._wrapped,this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];n.prototype[a]=function(){return u(b.apply(this._wrapped,arguments),this._chain)}});n.prototype.chain=function(){this._chain=true;return this};n.prototype.value=function(){return this._wrapped}}).call(this);
--- a/web/hdalab/templates/base.html	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-{% load analytics %}
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{{LANGUAGE_CODE}}" lang="{{LANGUAGE_CODE}}">
-    <head>
-        <meta charset="utf-8" />
-        <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />        
-        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
-        <meta http-equiv="content-language" content="{{LANGUAGE_CODE}}" />
-        <link rel="SHORTCUT ICON" href="{{STATIC_URL}}hdalab/img/favicon.ico" />        
-        <title>{% block title %}HdA Lab{% endblock %}</title>
-
-{% block css_import %}
-        <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/common.css" />
-{% endblock %}
-
-{% block js_import %}
-        <script src="{{STATIC_URL}}hdalab/lib/jquery-1.7.1.min.js"></script>
-{% endblock %}
-        
-    </head>
-    <body>
-
-{% block header %}
-        <div id="header">
-            <ul id="nav">
-                <li><a class="{% block home_actif %}{% endblock %}" href="{% url home %}">Accueil</a></li>
-                <li>&mdash;</li>
-                <li>Navigation par&nbsp;:</li>
-                <li><a class="{% block facettes_actif %}{% endblock %}" href="{% url facettes %}">Facettes</a></li>
-                <li><a class="{% block categories_actif %}{% endblock %}" href="{% url categories %}">Catégories de Wikipedia</a></li>
-                <li><a class="{% block thesaurus_actif %}{% endblock %}" href="{% url thesaurus %}">Thésaurus</a></li>
-            </ul>
-            <h1>
-                <a href="{% url home %}">HdA Lab</a>
-            </h1>
-        </div>
-        <div id="container">
-{% endblock %}
-
-{% block main_content %}
-
-{% endblock %}
-
-{% block footer %}
-        </div>
-        <div id="footer">
-            <ul id="footer-contents">
-                <li>
-                    <p>Une expérimentation de l'Institut de Recherche et d'Innovation et du Ministère de la Culture et de la Communication</p>
-                </li>
-                <li>
-                    <a href="http://culture.gouv.fr/" target="_blank">
-                        <img src="{{STATIC_URL}}hdalab/img/logo_mcc_blanc.png" />
-                    </a>
-                </li>
-                <li>
-                    <a href="http://www.iri-research.org/" target="_blank">
-                        <img src="{{STATIC_URL}}hdalab/img/logo_iri_blanc.png" />
-                    </a>
-                </li>
-            </ul>
-        </div>
-{% endblock %}
-    {% analytics %}
-    </body>
-</html>
--- a/web/hdalab/templates/categories.html	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-{% extends "base.html" %}
-
-{% block title %}{{block.super}} &gt; Recherche par arbre{% endblock %}
-
-{% block css_import %}
-{{block.super}}
-        <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/ui-lightness/jquery-ui-1.8.16.custom.css" />
-        <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/trees.css?refresh" />
-        <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/cattree.css?refresh" />
-{% endblock %}
-
-{% block js_import %}
-{{block.super}}
-        <script src="{{STATIC_URL}}hdalab/lib/underscore-min.js"></script>
-        <script src="{{STATIC_URL}}hdalab/lib/mustache.js"></script>
-        <script src="{{STATIC_URL}}hdalab/lib/jquery-ui-1.8.16.custom.min.js"></script>
-        <script type="text/javascript">
-        endpoints = {
-            cat_search: "{% url cat_search %}",
-            cat_tree: "{% url cat_tree %}",
-            fill_tree: "{% url fill_tree %}",
-            datasheet: "{% url notice 'ID' %}"
-        };
-        </script>
-        <script src="{{STATIC_URL}}hdalab/js/trees.js?refresh"></script>
-        <script src="{{STATIC_URL}}hdalab/js/cattree.js?refresh"></script>
-{% endblock %}
-
-{% block categories_actif %}actif{% endblock %}
-
-{% block main_content %}
-    <div class="leftzone">
-        <h2>Explorer les domaines artistiques</h2>
-        <p>
-            Cette interface expérimentale présente les ressources d'<a href="http://histoiredesarts.culture.fr/" target="_blank">Histoire des Arts</a>,
-            ordonnées selon l'arborescence des <a href="http://fr.wikipedia.org/wiki/Sp%C3%A9cial:ArbreCat%C3%A9gorie/Espace_Cat%C3%A9gorie" target="_blank">catégories de Wikipédia</a>.
-            Seules les ressources les plus pertinentes sont affichées.
-        </p>
-        <ul class="disciplist">
-            <li><a href="#">Architecture</a></li>
-            <li><a href="#">Cinéma</a></li>
-            <li><a href="#">Littérature</a></li>
-            <li><a href="#">Musique</a></li>
-            <li><a href="#">Peinture</a></li>
-            <li><a href="#">Photographie</a></li>
-            <li><a href="#">Poésie</a></li>
-            <li><a href="#">Sculpture</a></li>
-            <li><a href="#">Théâtre</a></li>
-        </ul>
-        <h3>Recherche de catégories de Wikipédia&nbsp;: </h3>
-        <p>
-            <form id="catform"><input id="catsearch" /></form>
-        </p>
-        <div class="results hidden">
-            <h2>Résultats pour &laquo;&nbsp;<span class="label-name"></span>&nbsp;&raquo;&nbsp;:</h2>
-            <p class="category-results"><span class="category-count"></span> sous-catégorie(s)</p>
-            <p class="tag-results"><span class="tag-count"></span> tag(s)</p>
-            <p class="content-results"><span class="content-count"></span> contenu(s)</p>
-        </div>
-    </div>
-    <div id="tree" class="cattree"></div>
-{% endblock %}
\ No newline at end of file
--- a/web/hdalab/templates/facettes.html	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,165 +0,0 @@
-{% extends "base.html" %}
-
-{% load i18n %}
-
-{% block title %}{{block.super}} &gt; {% trans "Recherche par facettes" %}{% endblock %}
-
-{% block css_import %}
-{{block.super}}
-        <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/lib/leaflet/leaflet.css" />
-        <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/ui-lightness/jquery-ui-1.8.16.custom.css" />
-        <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/facettes.css?refresh" />
-{% endblock %}
-
-{% block js_import %}
-{{block.super}}
-        <script src="{{STATIC_URL}}hdalab/lib/raphael-min.js"></script>
-        <script src="{{STATIC_URL}}hdalab/lib/underscore-min.js"></script>
-        <script src="{{STATIC_URL}}hdalab/lib/jquery-ui-1.8.16.custom.min.js"></script>
-        <script src="{{STATIC_URL}}hdalab/lib/leaflet/leaflet.js"></script>
-        <script src="{{STATIC_URL}}hdalab/lib/ZeroClipboard.js"></script>
-
-        <script src="{% url jsi18n 'hdalab' %}"></script>
-        <script src="{{STATIC_URL}}hdalab/js/gomina.js?refresh"></script>
-        
-        <script type="text/javascript">
-        gomNs.languageCode = '{{LANGUAGE_CODE}}';
-        gomNs.urls = {
-            'filter': "{% url filter %}",
-            'session_info': "{% url session_info %}",
-            'countries': "{{STATIC_URL}}hdalab/lib/countries.geo.json",
-            'tag_search': "{% url tag_search %}",
-            'datasheet': "{% url notice 'ID' %}"
-        };
-        ZeroClipboard.setMoviePath('{{STATIC_URL}}hdalab/lib/ZeroClipboard.swf');
-        </script>
-{% endblock %}
-
-{% block facettes_actif %}actif{% endblock %}
-
-{% block main_content %}
-        <div id="titleleft">
-            <h2 id="hdatitle">{% trans "Recherche par facettes" %}&nbsp;: <span id="sessionname"></span></h2>
-        </div>
-        <div id="titleright">
-            <div id='langselect'>
-                <form action="{% url django.views.i18n.set_language %}" method="post" id="lang_form">
-                {% csrf_token %}
-                    <!--input name="next" type="hidden" value="" /-->
-                    {% get_language_info_list for LANGUAGES as languages %}
-                    {% for language in languages %}
-                        <input type="submit" name="language" class="langbutton{% if language.code == LANGUAGE_CODE %} selected{% endif %}" style="background-image: url({{STATIC_URL}}hdalab/img/flag_{{ language.code }}.png)" value="{{ language.code }}" title="{{ language.name_local }}" />
-                    {% endfor %}
-                </form>
-            </div>
-            <div id="apartager"><a href="#">{% trans "Partager la session" %}</a></div>
-            <div id="partageurls">
-                <ul>
-                    <li class="actif" id="partagero"><a href="#">{% trans "En lecture seule" %}</a></li>
-                    <li id="partagerw"><a href="#">{% trans "En lecture-ecriture" %}</a></li>
-                </ul>
-                <div id="zc-partageligne">
-                    <label id="zc-partagelabel">{% trans "Copier le lien" %}&nbsp;: </label>
-                    <input id="zc-partageinput" onfocus="select();" />
-                </div>
-            </div>
-            <div id="vues">
-                <h4 id="vuestitre">{% trans "Mes vues :"%}</h4>
-                <ul id="ongletsvues">
-                </ul>
-                <span id="nouvellevue"><a href="#">+</a></span>
-            </div>
-            <ul id="plusdevues">
-                <li id="nouv_resrech"><a href="#">{% trans "Creer une vue sur des resultats de recherche" %}</a></li>
-                <li id="nouv_liste"><a href="#">{% trans "Creer une liste de notices" %}</a></li>
-            </ul>
-        </div>
-        <div id="waitcontainer">
-            <div id="waiting"></div>
-        </div>
-        <div id="bandefiltre">
-            <h4 id="filtertitle">
-                {% trans "Filtres :" %}
-            </h4>
-            <ul id="filters">
-            </ul>
-        </div>
-        <div id="timeline">
-            <ul id="dates"></ul>
-            <div id="dateheat"></div>
-            <div id="handle_0" class="handle">
-                <div class="handleinner"></div>
-            </div>
-            <div id="handle_1" class="handle">
-                <div class="handleinner"></div>
-            </div>
-        </div>
-        <div id="leftcol">
-            <div id="bloc_gestvue">
-                <div class="barrebloc">
-                    <h2>{% trans "Gerer la vue" %}</h2>
-                </div>
-                <div class="corpsbloc" id="gestvue">
-                    <div id="div_titrevue">
-                        <label>{% trans "Nom :" %}</label>
-                        <input id="titrevue" />
-                    </div>
-                    <h4>{% trans "Blocs visibles :" %}</h4>
-                </div>
-            </div>
-            <div class="bloc" id="bloc_map">
-                <div class="barrebloc">
-                    <h2>{% trans "Pays" %}</h2>
-                </div>
-                <div class="corpsbloc" id="map"></div>
-            </div>
-            <div class="bloc" id="bloc_tagcloud">
-                <div class="barrebloc">
-                    <h2>{% trans "Nuage de mots-cles" %}</h2>
-                </div>
-                <div class="corpsbloc" id="tagcloud">
-                </div>
-            </div>
-            <div class="bloc" id="bloc_taginfo">
-                <div class="barrebloc">
-                    <h2>{% trans "Rechercher un tag" %}</h2>
-                </div>
-                <div class="corpsbloc" id="taginfo">
-                    <form id="tagform">
-                        <input id="tagsearch" placeholder="{% trans "Rechercher un tag" %}" />
-                    </form>
-                    <div class="wpinfo">
-                        
-                    </div>
-                </div>
-            </div>
-            <div class="bloc" id="bloc_translationinfo">
-            {% trans "translation_info" %}
-            </div>
-        </div>
-        <div id="rightcol">
-            <div class="bloc" id="bloc_notes">
-                <div class="barrebloc">
-                    <h2>{% trans "Notes" %}</h2>
-                </div>
-                <div id="notes" class="corpsbloc"></div>
-            </div>
-            <div class="bloc" id="bloc_disciplines">
-                <div class="barrebloc">
-                    <h2>{% trans "Disciplines artistiques" %}</h2>
-                </div>
-                <div id="disciplines" class="corpsbloc"></div>
-            </div>
-            <div class="bloc" id="bloc_notices">
-                <div class="barrebloc">
-                    <h2>{% trans "Resultats de recherche" %}</h2>
-                </div>
-                <div class="corpsbloc">
-                    <div id="contentcount"></div>
-                    <div id="contents"></div>
-                </div>
-            </div>
-        </div>
-    </div>
-
-{% endblock %}
--- a/web/hdalab/templates/google_analytics/analytics_template.html	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-<script type="text/javascript">
-var _gaq = _gaq || [];
-_gaq.push(['_setAccount', '{{ analytics_code }}']);
-_gaq.push(['_trackPageview']);
-(function() {
-var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
-ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
-var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
-})();
-</script>
\ No newline at end of file
--- a/web/hdalab/templates/google_analytics/async_analytics_template.html	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-<script>
-var _gaq=[['_setAccount','{{ analytics_code }}'],['_trackPageview']];
-(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
-g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js';
-s.parentNode.insertBefore(g,s)}(document,'script'));
-</script>
\ No newline at end of file
--- a/web/hdalab/templates/index.html	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,132 +0,0 @@
-{% extends "base.html" %}
-
-{% block title %}{{block.super}} &gt; Accueil{% endblock %}
-
-{% block css_import %}
-{{block.super}}
-        <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/index.css" />
-{% endblock %}
-
-{% block js_import %}
-{{block.super}}
-        <script type="text/javascript">
-            $(function() {
-                $(".fond-bloc").mouseover(function() {
-                    var _this = this;
-                    $(".overlay-bloc").each(function() {
-                        if (this.parentNode == _this) {
-                            $(this).slideDown();
-                        } else {
-                            $(this).slideUp();
-                        }
-                    });
-                }).click(function() {
-                    document.location.href = $(this).find("a").attr("href");
-                    return false;
-                });
-            });
-        </script>
-{% endblock %}
-
-{% block home_actif %}actif{% endblock %}
-
-{% block main_content %}
-    <h2>Explorez autrement le portail Histoire des Arts</h2>
-    <div class="liste-applis">
-        <div class="bloc-appli">
-            <h3>Recherche par facettes</h3>
-            <div class="fond-bloc" id="bloc-facettes">
-                <div class="overlay-bloc">
-                    <p>Recherchez les contenus d'Histoire des Arts par plusieurs points d'entrée&nbsp;: pays, périodes historiques, disciplines artistiques et mots-clés liés aux &oelig;vres.</p>
-                    <p>Les éléments de l'interface sont à la fois des critères de recherche et des mode de visualisation des résultats&nbsp;: Au fur et à mesure de vos recherches, ils se mettent à jour pour refléter le nombre de contenus correspondant.</p>
-                    <p class="goto"><a href="{% url facettes %}">&raquo;</a></p>
-                </div>
-            </div>
-        </div>
-
-        <div class="separateur-applis"></div>
-        <div class="bloc-appli">
-            <h3>Catégories de Wikipedia</h3>
-            <div class="fond-bloc" id="bloc-categories">
-                <div class="overlay-bloc">
-                    <p>Naviguez dans l'arbre des catégories de Wikipedia pour atteindre les contenus du portail Histoire des Arts.</p>
-                    <p>Recherchez une catégorie par son titre, puis explorez les sous-catégories et les tags qui y sont rattachés.</p>
-                    <p class="goto"><a href="{% url categories %}">&raquo;</a></p>
-                </div>
-            </div>
-        </div>
-        
-        <div class="separateur-applis"></div>
-        <div class="bloc-appli">
-            <h3>Navigation par thésaurus</h3>
-            <div class="fond-bloc" id="bloc-thesaurus">
-                <div class="overlay-bloc">
-                    <p>Cette interface présente deux extraits de thésaurus utilisés par le ministère de la Culture et de la Communication :</p>
-                    <ul>
-                        <li>La branche « Secteur urbain » du Thésaurus de l’architecture et de l’urbanisme (état 2010)</li>
-                        <li>La branche « Architecture d’habitation » du Thésaurus iconographique Garnier (état 2012)</li>
-                    </ul>
-                    <p class="goto"><a href="{% url thesaurus %}">&raquo;</a></p>
-                </div>
-            </div>
-        </div>
-
-        <div style="clear: both;"> </div>
-    </div>
-    <h3>À propos de HdA Lab</h3>
-    <p>Le portail Histoire des arts a pour vocation de mettre à la disposition de publics prescripteurs &mdash;&nbsp;via un site Internet&nbsp;&mdash; une sélection de ressources culturelles et éducatives riches en lien avec le programme officiel de l’enseignement de l’Histoire des arts. Le volet HDA-Lab de ce projet s’inscrit dans le cadre d’une collaboration entre l’Institut de Recherche et d'Innovation (IRI) et le Ministère de la Culture et de la Communication. Ce projet de recherche et développement prévoit la réalisation d’une preuve de concept destinée à montrer le potentiel heuristique du tagging sémantique.</p>
-    <p>Le corpus utilisé pour les besoins de ce projet est extrait du site Histoire des arts, proposant un accès à près de 5&nbsp;000 ressources qualifiées, accessible à l’adresse <a href="http://www.histoiredesarts.culture.fr" target="_blank">http://histoiredesarts.culture.fr</a>. Ce portail est alimenté par un réseau dynamique de 350 institutions culturelles, sur l’ensemble du territoire. Cet annuaire a pour vocation d’aider la communauté éducative (enseignants, médiateurs culturels…) à trouver des documents fiables dans le domaine de l’histoire des arts. Les notices descriptives de chaque ressource renvoient, par des liens profonds, vers autant de ressources en ligne, chaque notice contenant des mots-clés, initialement produits comme de simples tags.</p>
-    <p>Le programme de Recherche et Développement impliquant l’IRI et le Ministère de la Culture et de la Communication &mdash;&nbsp;via son Département des Programmes Numériques (DPN)&nbsp;&mdash; a permis la réalisation de deux outils&nbsp;:</p>
-    <ul>
-        <li>Un module de tagging sémantique du corpus &laquo;&nbsp;Histoire des Arts&nbsp;&raquo; destiné à l’indexation des ressources, via le back-office du site (module &laquo;&nbsp;HDA-BO&nbsp;&raquo;)</li>
-        <li>Une interface de recherche et de navigation de la version sémantisée du corpus (projet &laquo;&nbsp;HDA-Lab&nbsp;&raquo;)</li>
-    </ul>
-    <p>Les tags sémantiques sont constitués des entrées de Wikipédia et dotés de métadonnées, dont les URIs de DBpedia.org correspondant à ces entrées. Les données-clés extraites des articles de Wikipedia sont les infobox et les catégories. Les fonctionnalités de recherche et de navigation dans le corpus s’appuient sur le graphe de DBpedia. L’interface propose des fonctionnalités telles qu’une recherche par facettes, une carte heuristique, etc. ainsi qu’un enrichissement des résultats de recherche à l’aide d’extraits de Wikipedia (photos, définitions…).</p>
-    <p>La preuve de concept est résolument orientée utilisateur final, répondant à une approche de recherche appliquée. Les internautes pourront comparer en direct les fonctionnalités classiques de l’interface d’origine avec les fonctionnalités enrichies de la preuve de concept. L’objectif est de démontrer l’intérêt du tagging sémantique et de sensibiliser l’utilisateur final aux enjeux du Web de données. &Agrave; terme, cette phase expérimentale a vocation à enrichir les fonctionnalités du portail Histoire des arts.</p>
-    <p>&nbsp;</p>
-    <p>NB : La première version de HDA-Lab disponible en mars 2012 s’appuie sur une sémantisation  (production des tags sémantiques) très partielle du corpus &laquo;&nbsp;Histoire des Arts&nbsp;&raquo;. De même les fonctionnalités ne sont pas définitives. L’ensemble du projet &mdash;&nbsp;sémantisation et fonctionnalités&nbsp;&mdash; sera mis en œuvre progressivement d'ici juin 2012.</p>
-    <div class="mini-table">
-        <div class="half-bloc">
-            <p>
-                <a href="http://culture.gouv.fr/" target="_blank" title="Ministère de la Culture et de la Communication">
-                    <img src="{{STATIC_URL}}hdalab/img/logo_mcc.png" alt="Ministère de la Culture et de la Communication" />
-                </a>
-            </p>
-        </div>
-        <div class="half-bloc">
-            <p>
-                <a href="http://www.iri-research.org/" target="_blank">
-                    <img src="{{STATIC_URL}}hdalab/img/logo_iri.png" alt="Institut de Recherche et d'Innovation" />
-                </a>
-            </p>
-        </div>
-    </div>
-    <div class="mini-table">
-        <div class="half-bloc">
-            <p>Département des Programmes Numériques</p>
-        </div>
-        <div class="half-bloc">
-            <p>Directeur&nbsp;: <strong>Bernard Stiegler</strong></p>
-            <p>Directeur exécutif&nbsp;: <strong>Vincent Puig</strong></p>
-        </div>
-    </div>
-    <h4>&Eacute;quipes projet</h4>
-    <div class="mini-table">
-        <div class="half-bloc">
-            <p>Pour le DPN&nbsp;:</p>
-            <ul>
-                <li>Chef de projet utilisateur : <strong>Bertrand Sajus</strong></li>
-                <li>Responsables éditoriales : <strong>Marion Martin Laprade</strong> et <strong>Cécile Riottot</strong></li>
-            </ul>
-        </div>
-        <div class="half-bloc">
-            <p>Pour l'IRI&nbsp;:</p>
-            <ul>
-                <li>Architecture back-office et coordination technique&nbsp;: <strong>Yves-Marie Haussonne</strong></li>
-                <li>Coordination scientifique&nbsp;: <strong>Alexandre Monnin</strong></li>
-                <li>Outils de sémantisation&nbsp;: <strong>Thibaut Cavalié</strong></li>
-                <li>Interfaces de visualisation et d'annotation&nbsp;: <strong>Raphaël Velt</strong></li>
-            </ul>
-        </div>
-    </div>
-{% endblock %}
\ No newline at end of file
--- a/web/hdalab/templates/notice.html	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-{% extends "base.html" %}
-
-{% block title %}{{block.super}} &gt; {{datasheet.title}}{% endblock %}
-
-{% block css_import %}
-{{block.super}}
-        <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/notice.css?refresh" />
-{% endblock %}
-
-{% block js_import %}
-{{block.super}}
-        <script src="{{STATIC_URL}}hdalab/lib/underscore-min.js"></script>
-        <script src="{{STATIC_URL}}hdalab/js/notice.js?refresh"></script>
-{% endblock %}
-
-{% block main_content %}
-<div class="main-datasheet">
-    <h2><a href="{{datasheet.url}}" target="_blank">{{datasheet.title}}</a></h2>
-    <h3><a href="{{datasheet.organisation.website}}" target="_blank">{{datasheet.organisation.name}}</a></h3>
-    <img src="http://histoiredesarts.culture.fr/images/cached/images/{{datasheet.hda_id}}.jpg" />
-    <p>{{datasheet.description}}</p>
-    <ul>
-        <li>Accéder à cette ressource sur <a href="{{datasheet.url}}" target="_blank">{{domain}}</a></li>
-        <li>Plus d'informations sur <a href="http://histoiredesarts.culture.fr/notices/{{datasheet.hda_id}}/" target="_blank">histoiredesarts.culture.fr</a></li>
-    </ul>
-</div>
-
-<div class="tag-container">
-    <canvas class="tag-canvas"></canvas>
-    <div class="tags-main">
-        <h2>Mots-clés</h2>
-        <ul class="tags">
-        {% for t in ordered_tags %}
-            <li><span class="main-datasheet-tag" data-tag-id="{{t.tag.id}}">{{t.tag.label}}</span></li>
-        {% endfor %}
-        </ul>
-    </div>
-</div>
-
-<div class="related-datasheets">
-    <h2>Notices liées :</h2>
-    <ul class="datasheets">
-    {% for ds in related %}
-        <li class="datasheet">
-            <img src="http://histoiredesarts.culture.fr/images/cached/images/{{ds.hda_id}}.jpg" />
-            <h3><a href="{% url notice ds.hda_id %}">{{ds.title}}</a></h3>
-            <h4>{{ds.organisation_name}}</h4>
-            <ul class="datasheet-tags">{% for t in ds.ordered_tags %}<li data-tag-id="{{t.id}}" class="related-datasheet-tag {% if t.common %} common-tag{% endif %}">{{t.label}}</li>{% endfor %}</ul>
-        </li>
-    {% endfor %}
-    </ul>
-</div>
-    
-{% endblock %}
\ No newline at end of file
--- a/web/hdalab/templates/thesaurus.html	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-{% extends "base.html" %}
-
-{% block title %}{{block.super}} &gt; Recherche par arbre{% endblock %}
-
-{% block css_import %}
-{{block.super}}
-        <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/ui-lightness/jquery-ui-1.8.16.custom.css" />
-        <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/trees.css?refresh" />
-        <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}hdalab/css/thesaurus.css?refresh" />
-{% endblock %}
-
-{% block js_import %}
-{{block.super}}
-        <script src="{{STATIC_URL}}hdalab/lib/underscore-min.js"></script>
-        <script src="{{STATIC_URL}}hdalab/lib/mustache.js"></script>
-        <script src="{{STATIC_URL}}hdalab/lib/jquery-ui-1.8.16.custom.min.js"></script>
-        <script type="text/javascript">
-        endpoints = {
-            fill_tree: "{% url fill_tree %}",
-            datasheet: "{% url notice 'ID' %}"
-        };
-        </script>
-        <script src="{{STATIC_URL}}hdalab/js/trees.js?refresh"></script>
-        <script src="{{STATIC_URL}}hdalab/js/thesaurus.js?refresh"></script>
-{% endblock %}
-
-{% block thesaurus_actif %}actif{% endblock %}
-
-{% block main_content %}
-    <div class="explain">
-        <p>Cette interface présente deux extraits de thésaurus utilisés par le ministère de la Culture et de la Communication :</p>
-        <ul>
-            <li>La branche « Secteur urbain » du Thésaurus de l’architecture et de l’urbanisme (état 2010)</li>
-            <li>La branche « Architecture d’habitation » du Thésaurus iconographique Garnier (état 2012)</li>
-        </ul>
-        <p>Les mots-clés de ces branches ont été liés avec Wikipédia. Ils deviennent ainsi sémantiquement interopérables avec les tags d’HDA-Lab. Comme le montre l’interface, ce procédé permet d’organiser et de visualiser les tags et les ressources d'HDA-Lab en utilisant des thésaurus « métiers » externes. Dans cet extrait, le mot-clé « Cité jardin » est présenté, en vis-à-vis, dans deux univers sémantiques différents</p>
-    </div>
-    
-    <div class="column leftcol">
-        <h3>Arborescence 1</h3>
-        <div class="cattree">
-        
-        </div>
-    </div>
-    <div class="separator"></div>
-    <div class="column rightcol">
-        <h3>Arborescence 2</h3>
-        <div class="cattree">
-            
-        </div>
-    </div>
-{% endblock %}
\ No newline at end of file
--- a/web/hdalab/templatetags/analytics.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-###
-# Taken and adapted form django-google-analytics : http://
-#
-#
-##
-from django import template
-
-from django.template import Context, loader
-from django.conf import settings
-
-
-register = template.Library()
-
-def __clean_token(str, tag_name):
-    if not (str[0] == str[-1] and str[0] in ('"', "'")):
-        raise template.TemplateSyntaxError, "%r tag's argument should be in quotes" % tag_name
-    return str[1:-1]
-
-def do_get_analytics(parser, token):
-    code = None
-    style = None
-    tag_name = None
-    try:
-        # split_contents() knows not to split quoted strings.
-        tokens = token.split_contents()
-        if len(tokens) > 0 :
-            tag_name = tokens[0]
-        if len(tokens) > 1 :
-            style = tokens[1]
-        if len(tokens) > 2 :
-            code = tokens[2]
-    except ValueError:
-        code = None
-   
-    if not code:
-        code = getattr(settings,'GOOGLE_ANALYTICS_CODE',None)
-    else:
-        code = __clean_token(code, tag_name)
-
-    if style:
-        style = __clean_token(style, tag_name)
-    else:
-        style = 'async'
-
-    return AnalyticsNode(code, style)
-    
-class AnalyticsNode(template.Node):
-    def __init__(self, code=None, style='async'):
-        self.code = code
-        self.style = style
-        
-    def render(self, context):
-        if not self.code:
-            return ''
-        
-        if self.style == 'async':
-            template_path = 'google_analytics/async_analytics_template.html'
-        else:
-            template_path = 'google_analytics/analytics_template.html'
-
-        if self.code.strip() != '':
-            t = loader.get_template(template_path)
-            c = Context({
-                'analytics_code': self.code,
-            })
-            return t.render(c)
-        else:
-            return ''
-        
-register.tag('analytics', do_get_analytics)
--- a/web/hdalab/urls.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-# -*- coding: utf-8 -*-
-from django.conf.urls.defaults import patterns, include, url
-from django.contrib import admin
-from django.views.generic import TemplateView
-#from hdalab.views.ajax import filter
-
-# Uncomment the next two lines to enable the admin:
-# from django.contrib import admin
-# admin.autodiscover()
-
-urlpatterns = patterns('',
-    # Examples:
-    # url(r'^$', 'hdalab.views.home', name='home'),
-    # url(r'^hdalab/', include('hdalab.foo.urls')),
-
-    # Uncomment the admin/doc line below to enable admin documentation:
-    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
-
-    # Uncomment the next line to enable the admin:
-    url(r'^admin/', include(admin.site.urls)),
-    
-    url(r'^i18n/', include('django.conf.urls.i18n')),
-    url('^jsi18n/?$', 'django.views.i18n.javascript_catalog', name='jsi18n.all'),
-    url('^jsi18n/(?P<packages>\S+?)/$', 'django.views.i18n.javascript_catalog', {'domain':'djangojs'}, name='jsi18n'),
-    
-    url(r'^facettes/', TemplateView.as_view(template_name="facettes.html"), name='facettes'),
-    url(r'^categories/', TemplateView.as_view(template_name="categories.html"), name='categories'),
-    url(r'^thesaurus/', TemplateView.as_view(template_name="thesaurus.html"), name='thesaurus'),
-    url(r'^$', TemplateView.as_view(template_name="index.html"), name='home'),
-    
-    url(r'^notice/(?P<hda_id>[\w-]+)$', 'hdalab.views.pages.datasheet', name='notice')
-
-)
-
-urlpatterns += patterns('hdalab.views.ajax',
-    (r'^a/filter$', 'filter', {}, 'filter'),
-    (r'^a/sessioninfo$', 'sessioninfo', {}, 'session_info'),
-    (r'^a/tagsearch$', 'tagsearch', {}, 'tag_search'),
-    (r'^a/catsearch$', 'catsearch', {}, 'cat_search'),
-    (r'^a/cattree$', 'cattree', {}, 'cat_tree'),
-    (r'^a/filltree$', 'filltree', {}, 'fill_tree'),
-)
--- a/web/hdalab/utils.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Mar 13, 2012
-
-@author: ymh
-'''
-from django.core.cache import cache
-from django.utils.encoding import smart_str
-import md5
-import re
-
-
-def fix_cache_key(key):
-    cache_key = re.sub(r'\s+', '-', key)
-    cache_key = smart_str(cache_key)
-    if len(cache_key) > (250-(2+len(cache.key_prefix)+len(str(cache.version)))-33):
-        cache_key = cache_key[:(250-(2+len(cache.key_prefix)+len(str(cache.version)))-33)] + '-' + md5.new(cache_key).hexdigest()
-    return cache_key
\ No newline at end of file
--- a/web/hdalab/views/ajax.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,458 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on Jan 31, 2012
-
-@author: ymh
-'''
-from django.conf import settings
-from django.core.cache import cache
-from django.db.models import Q, Count, Min
-from django.http import HttpResponse
-from hdabo.models import Tag, Datasheet, TaggedSheet
-from hdalab.models import HdaSession, Country, TagYears, DatasheetExtras
-from hdalab.models.dataviz import DbpediaFieldsTranslation, DbpediaFields
-from hdalab.models.categories import WpCategory, WpCategoryInclusion, TagWpCategory
-from hdalab.utils import fix_cache_key
-import copy
-import django.utils.simplejson as json
-import hmac
-import itertools
-import uuid
-
-def tagtranslation(request):
-    
-    lang = request.GET.get('lang',request.LANGUAGE_CODE)
-    labels = request.GET.get('labels',None)
-
-    if not labels:
-        return HttpResponse(content=json.dumps({}), mimetype='application/json')
-    
-    labelslist = [lbl.strip() for lbl in labels.split(",")]
-    masters = []
-    
-    for lbl in labelslist:
-        labelqs = Tag.objects.select_related('dbpedia_fields').filter(~Q(dbpedia_uri = None), label__iexact = lbl)[0:1]
-        if len(labelqs) > 0:
-            tag = labelqs.get()
-            if tag.dbpedia_fields:
-                masters.append(tag.dbpedia_fields)
-    
-    translationqs = DbpediaFieldsTranslation.objects.select_related("master", "master__tag").filter(master__in = masters, language_code=lang)
-    
-    translations = dict([(t.master.label, t.label) for t in translationqs])
-    
-    return HttpResponse(content=json.dumps(translations), mimetype='application/json')
-
-def subcat(category, globtags, level, max_level ):
-    # recursive function used by cattree
-    catlabel = category.label
-    tags = Tag.objects.filter(wp_categories__wp_category = category).distinct()
-    taglabels = [k for k in dict([(t.label,t.label) for t in tags])]
-    resobj = {
-          'label': category.label,
-          'themes': [],
-          'contents': []
-      }
-    for label in taglabels:
-        if label == catlabel:
-            globtags[label] = {'level': level, 'access': resobj }
-        else:
-            tag_in_list = {'label' : label, 'contents': []}
-            resobj['themes'].append(tag_in_list)
-            globtags[label] = {'level': (level + 1), 'access': tag_in_list }
-            
-    if level < max_level:
-        subcats = WpCategory.objects.filter(parent_categories__parent_category = category)
-        resobj['themes'] += [subcat(subcats[i], globtags, level + 1, max_level ) for i in range(len(subcats))]
-    return resobj
-
-def cleantags(category):
-    if category.has_key('contents') and len(category['contents']) == 0:
-        del category['contents']
-    if category.has_key('contents'):
-        category['contents'] = sorted(category['contents'], key=lambda content: -content['score'])
-    if category.has_key('themes'):
-        themes = []
-        for theme in category['themes']:
-            clean_theme = cleantags(theme)
-            if clean_theme.has_key('themes') or clean_theme.has_key('contents'):
-                themes.append(clean_theme)
-        category['themes'] = sorted(themes, key=lambda cat: cat['label'])
-        if len(category['themes']) == 0:
-            del category['themes']
-    return category
-
-def cattree(request):
-    # Gets the category tree from a label
-    ROOT_MAX_TAG_ORDER = 8
-    MAX_TAG_ORDER = 8
-    MAX_LEVEL = 3
-    LEVEL_COEFF = 5
-    label = request.GET.get('label', None)
-    lowerlabel = label.lower()
-    globtags = {}
-    resobj = None
-    master_category = WpCategory.objects.filter(label__iexact=label)[0:1]
-    if len(master_category):
-        resobj = subcat(master_category[0], globtags, 1, MAX_LEVEL )
-    
-#    tag_list = [k for k in globtags]
-    
-#    if len(tag_list):
-    contents = []
-#    datasheets = Datasheet.objects.filter(validated = True, taggedsheet__tag__label__in = tag_list, taggedsheet__order__lte = MAX_TAG_ORDER).distinct()
-    datasheets = Datasheet.objects.filter(validated = True, taggedsheet__tag__label__iexact = label, taggedsheet__order__lte = ROOT_MAX_TAG_ORDER).select_related('organisation').distinct()
-    for datasheet in datasheets:
-        # Calculating where we add the datasheet in the tree
-        maintag = None
-        maintagscore = -5
-        dsscore = 0
-        rootscore = 0
-        for ts in TaggedSheet.objects.select_related('tag','datasheet').filter(datasheet__id=datasheet.id,order__lte=MAX_TAG_ORDER):
-            label = ts.tag.label
-            if globtags.has_key(label):
-                score = LEVEL_COEFF * globtags[label]['level'] - ts.order
-                if score > maintagscore:
-                    maintagscore = score
-                    maintag = label
-                    dsscore = (MAX_TAG_ORDER - ts.order)
-                if label.lower() == lowerlabel:
-                    rootscore = (ROOT_MAX_TAG_ORDER - ts.order)
-        if maintag is not None:
-            globtags[maintag]['access']['contents'].append({
-                'id': datasheet.id,
-                'title': datasheet.title,
-                'url': datasheet.url,
-                'description': datasheet.description,
-                'hda_id': datasheet.hda_id,
-                'organization': datasheet.organisation.name,
-                'organization_url': datasheet.organisation.website,
-                'score': max(dsscore, rootscore)
-            })
-    cleantags(resobj)
-                    
-#        resobj['contents'] = [{'id': d.id, 'title': d.title, 'tags': [t.label for t in d.tags.filter(taggedsheet__order__lte=5)]} for d in datasheets]
-    
-    return HttpResponse(content=json.dumps(resobj), mimetype='application/json')
-
-def sessioninfo(request):
-    
-    data = json.loads(request.GET.get('data', "{}"))
-    write = False
-    
-    if 'sessionid' in request.GET:
-        request.session['sessionid'] = request.GET['sessionid']
-    if 'sessionkey' in request.GET:
-        request.session['sessionkey'] = request.GET['sessionkey']
-        
-    if 'sessionid' in request.session:
-        sessionid = request.session['sessionid']
-        
-        if HdaSession.objects.filter(sessionid=sessionid).count() == 1:
-            sessionkey = request.session.get('sessionkey',None)
-            hm = hmac.new(settings.SECRET_KEY, sessionid)
-            if hm.hexdigest() == sessionkey:
-                write = True            
-        else:
-            del request.session['sessionid']
-        
-    if 'sessionid' not in request.session:
-        sessionid = unicode(uuid.uuid1())
-        HdaSession.objects.create(sessionid=sessionid, data=json.dumps({}))
-        write = True
-        request.session['sessionid'] = sessionid
-        request.session['sessionkey'] = hmac.new(settings.SECRET_KEY, sessionid).hexdigest()
-        
-    if write and data:
-        HdaSession.objects.filter(sessionid=sessionid).update(data=json.dumps(data))
-    else:
-        data = HdaSession.objects.get(sessionid=sessionid).data
-        data = json.loads(data) if data else {}           
-         
-    resobj = {'data': data, "write_allowed" : write, "sessionid": sessionid }
-    if write:
-        resobj['sessionkey'] = request.session['sessionkey']
-        
-    return HttpResponse(content=json.dumps(resobj), mimetype='application/json')
-
-
-def tagsearch(request):
-    
-    q = request.GET.get('term',None)
-    maxcount = int(request.GET.get('count','40'))
-    lang = request.GET.get('lang',request.LANGUAGE_CODE)
-    
-    stemming_langs = [ 'fr', 'en', 'de', 'it' ]
-    # For Japanese, there are no word boundaries, we should not use the regexp in that case
-    no_translate_langs = [ 'fr' ]
-    
-    if q:
-        lq = q.lower()
-        qs = Tag.objects.select_related('dbpedia_fields').filter(datasheet__validated=True)
-        qrx = '(\\m|\\b)%s'%q
-        if lang in no_translate_langs:
-            if lang in stemming_langs:
-                qs = qs.filter( label__iregex = qrx )
-            else:
-                qs = qs.filter( label__icontains = q )
-        else:
-            if lang in stemming_langs:
-                qs = qs.filter(dbpedia_fields__translations__label__iregex=qrx, dbpedia_fields__translations__language_code=lang, dbpedia_fields__translations__is_label_translated = True)
-            else:
-                qs = qs.filter(dbpedia_fields__translations__label__icontains=q, dbpedia_fields__translations__language_code=lang, dbpedia_fields__translations__is_label_translated = True)
-    else:
-        qs = Tag.objects.filter(~Q(dbpedia_uri = None))
-           
-    qs = qs.annotate(nb=Count('datasheet',distinct=True)).order_by('-nb')[:maxcount]
-    
-    qslist = list(qs)
-    
-    if lang in no_translate_langs:
-        translations = {}
-    else:
-        transqs = DbpediaFieldsTranslation.objects.filter(master__tag__in = qslist, language_code=lang, is_label_translated=True).select_related("master")
-        translations = dict([(tr.master.tag_id, {'label':tr.label,'abstract':tr.abstract, 'is_label_translated': tr.is_label_translated}) for tr in transqs])
-    
-    res = []
-    
-    for t in qslist:
-        dbfields = t.dbpedia_fields
-        resobj = {'original_label':t.label,'nb':t.nb}
-        resobj['thumbnail'] = dbfields.thumbnail if dbfields is not None else None
-        
-#        if t.id in translations and not translations[t.id].get('is_label_translated', True):
-#            continue
-        if t.id in translations:
-            resobj['value'] = translations[t.id]['label']
-            resobj['abstract'] = translations[t.id]['abstract']
-        else:
-            resobj['value'] = t.label
-            resobj['abstract'] = dbfields.abstract if dbfields is not None else None
-        if q is None or resobj['value'].lower().find(lq) != -1:
-            res.append(resobj)
-    
-    return HttpResponse(content=json.dumps(res), mimetype='application/json')
-
-def catsearch(request):
-    
-    q = request.GET.get('term',None)
-    
-    # On ne récupère que les catégories qui sont également des tags
-    qrx = '(\\m|\\b)%s'%q
-    qs = Tag.objects.filter(label__iregex=q)
-    
-    labels = [tag.label for tag in qs]
-    
-    qs = WpCategory.objects.annotate(nb=Count('child_categories__child_category__tags')).filter(label__in = labels, nb__gt=0)
-    
-    res = [{'value':t.label} for t in qs]
-    
-    return HttpResponse(content=json.dumps(res), mimetype='application/json')
-
-def filter(request):
-    
-    lang = request.GET.get('lang',request.LANGUAGE_CODE)
-    periode = request.GET.get('period',None)
-    label = request.GET.get('label', None)
-    country = request.GET.get('country', None)
-    contentlist = request.GET.get('contentlist', None)
-    max_tag_order = int(request.GET.get('mto', '12'))
-    content_count = request.GET.get('contentcount', 12)
-    tag_count = request.GET.get('tagcount', 30)
-    no_translate_langs = [ 'fr' ]
-    
-    key_parts = ("filter",lang,periode,label,country,contentlist,max_tag_order,content_count,tag_count)
-    key_parts = [unicode(p).encode("utf-8") for p in key_parts]
-    
-    cache_key = fix_cache_key("-".join(key_parts))
-    
-    outputstr = cache.get(cache_key)
-    
-    if outputstr is None:
-        
-        matchtagids = []
-        
-        tagqs = Tag.objects.exclude(category__label__in = ['Datation', 'Localisation', 'Discipline artistique']).filter(~Q(dbpedia_uri = None))
-        countryqs = Country.objects
-        discqs = Tag.objects.filter(~Q(dbpedia_uri = None), category__label = u'Discipline artistique').select_related('dbpedia_fields')
-        yearqs = TagYears.objects
-        
-        contentqs = Datasheet.objects.filter(validated=True)
-        labeltranslations = []
-    
-        if label or periode or country or contentlist :
-            matchtagqslist = []
-            
-            if periode:
-                years = periode.split(",")
-                start_year = int(years[0])
-                end_year = int(years[0:2][-1])
-                delta = max(1, (end_year-start_year)/2)
-                minstart = start_year - delta
-                maxend = end_year + delta
-                matchtagqs = Tag.objects.filter(~Q(dbpedia_uri = None),
-                                                years__end_year__gte = start_year, 
-                                                years__start_year__lte = end_year,
-                                                years__end_year__lte = maxend,
-                                                years__start_year__gte = minstart,
-                                                )
-                matchtagqslist.append(matchtagqs)
-                
-            if label:
-                for txtlbl in label.split(","):
-                    matchtagqs = Tag.objects.select_related('dbpedia_fields').filter(~Q(dbpedia_uri = None), label__iexact = txtlbl.strip())
-                    matchtagqslist.append(matchtagqs)
-                
-            if country:
-                for country_uri in country.split(","):
-                    matchtagqs = Tag.objects.filter(~Q(dbpedia_uri = None),locatedin__country__dbpedia_uri = country_uri)
-                    matchtagids += [t.id for t in matchtagqs if t.id not in matchtagids]
-                    matchtagqslist.append(matchtagqs)
-            if contentlist:
-                contentqs = contentqs.filter(id__in = contentlist.split(","))
-
-            tagcond = None
-            tagcondid = None
-            for matchtagqs in matchtagqslist:
-                newcond = Q(id__in = TaggedSheet.objects.filter(tag__in = copy.deepcopy(matchtagqs), order__lte = max_tag_order).values('datasheet_id'))
-                newcondid = Q(id__in = matchtagqs)
-                tagcond = newcond if tagcond is None else (tagcond & newcond)
-                tagcondid = newcondid if tagcondid is None else (tagcondid | newcondid)
-            
-            contentqs = contentqs.filter(tagcond).distinct()
-            matchtagidsqs = list(Tag.objects.select_related("dbpedia_fields").only("id").filter(tagcondid))
-            matchtagids = [t.id for t in matchtagidsqs]
-            
-            if lang not in no_translate_langs:
-                masters = [t.dbpedia_fields for t in matchtagidsqs if t.dbpedia_fields is not None]
-                
-                translationqs = DbpediaFieldsTranslation.objects.select_related("master", "master__tag").filter(master__in = masters, language_code=lang)    
-                labeltranslations = [{'label':t.master.label, 'translated_label':t.label} for t in translationqs]
-            
-            tagqs = tagqs.filter(datasheet__in = contentqs)
-            countryqs = countryqs.filter(includes__tag__taggedsheet__datasheet__in = contentqs)
-            discqs = discqs.filter(datasheet__in = contentqs)
-            yearqs = yearqs.filter(tag__taggedsheet__datasheet__in = contentqs)
-            
-        if contentlist is None:
-            contentqs.order_by('?')
-                        
-        cont_count = contentqs.count()
-        
-        contenus = dict([(content.id, {'score' : 0, 'tags' : [], 'hda_id': content.hda_id, 'id':content.id, 'title': content.title, 'description': content.description, 'url': content.url}) for content in contentqs[0:content_count]])
-        contentids = contenus.keys()
-        
-        qs = DatasheetExtras.objects.select_related('insee').filter(datasheet__in = contentids)
-        for dse in qs:
-            contenus[dse.datasheet_id]['coords'] = {'city_name': dse.insee.city_name, 'latitude': dse.insee.latitude, 'longitude': dse.insee.longitude}
-        
-        qs = list(TaggedSheet.objects.select_related('tag', 'tag__dbpedia_fields').filter(datasheet__in = contentids, order__lte = max_tag_order).order_by('order'))
-        
-        translations = {}
-        
-        if lang not in no_translate_langs:
-            transqs = DbpediaFieldsTranslation.objects.filter(master__in = [ts.tag.dbpedia_fields for ts in qs], language_code = lang)
-            translations = dict([(trans.master_id,trans.label) for trans in transqs])
-        
-        for ts in qs:
-            match_tag = ts.tag.id in matchtagids
-            contenus[ts.datasheet_id]['tags'].append({'id': ts.tag.id, 'label':ts.tag.label, 'order':ts.order, 'match': match_tag , 'translated_label': translations.get(ts.tag.dbpedia_fields.id, ts.tag.label) if ts.tag.dbpedia_fields is not None else ts.tag.label})
-            
-            if match_tag:
-                contenus[ts.datasheet_id]['score'] += 2*max_tag_order - ts.order
-            
-        if contentlist is None:
-            contenus = sorted(contenus.values(),key=lambda e: -e['score'])
-        else:
-            contenus = contenus.values()
-    
-        #tagqs = tagqs.annotate(nb=Count('datasheet')).order_by('-nb')[:tag_count]
-        tagqs = tagqs.annotate(nb=Count('datasheet')).order_by('-nb').only('id','label')[:tag_count]
-        #.select_related('dbpedia_fields')
-        # hack to add only necessary fields in the group by
-        # contournement bug https://code.djangoproject.com/ticket/17144
-        tagqs.query.clear_select_fields()
-        tagqs.query.add_fields(['id','label'], False)
-        tagqs.query.set_group_by()
-    
-        tagqslist = list(tagqs)
-        
-        dbpediafields = dict([(df.tag_id, df) for df in DbpediaFields.objects.filter(tag__in = tagqslist)])
-
-        if lang not in no_translate_langs:
-            transqs = DbpediaFieldsTranslation.objects.filter(master__in = dbpediafields.values(), language_code = lang)
-            translations = dict([(trans.master_id,trans.label) for trans in transqs])
-    
-        tags = [{'id': tag.id, 'label': tag.label, 'score': tag.nb, 'translated_label': translations.get(dbpediafields[tag.id].id, tag.label) if tag.id in dbpediafields else tag.label} for tag in tagqslist]
-    
-        countryqs = countryqs.annotate(nb=Count('includes__tag__taggedsheet'))
-        countries = dict([(country.dbpedia_uri, country.nb) for country in countryqs])
-    
-        discqslist = list(discqs.annotate(nb=Count('taggedsheet')).order_by('-nb')[:10])
-
-        if lang not in no_translate_langs:
-            transqs = DbpediaFieldsTranslation.objects.filter(master__in = [tag.dbpedia_fields for tag in discqslist], language_code = lang)
-            translations = dict([(trans.master_id,trans.label) for trans in transqs])
-        
-        disciplines = [{'label':tag.label,'score':tag.nb, 'translated_label': translations.get(tag.dbpedia_fields.id, tag.label) if tag.dbpedia_fields is not None else tag.label} for tag in discqslist]
-        
-        years = {}
-        yearqs = yearqs.annotate(nb=Count('tag__taggedsheet'))
-        for ty in yearqs:
-            for year in range(ty.start_year, ty.end_year):
-                years[year] = ty.nb + (years[year] if year in years else 0)
-                
-        yearchange = []
-        for year in sorted(years.keys()):
-            score = years[year]
-            if year < 2011:
-                if (year-1 not in years and score != 0) or (year-1 in years and years[year-1] != score):
-                    yearchange.append({'year': year, 'score': score})
-                if year+1 not in years and year != -1 and score != 0:
-                    yearchange.append({'year': year+1, 'score': 0})
-    
-        tag_translations = {}
-        for t in itertools.chain(labeltranslations,disciplines,tags):
-            tag_translations[t['label']] = t['translated_label']
-        for c in contenus:
-            for t in c['tags']:
-                tag_translations[t['label']] = t['translated_label']
-        
-        output = {'count': cont_count, 'contents': contenus, 'tags':tags, 'sparkline':yearchange, 'countries':countries, 'disciplines':disciplines, 'tagtranslations': tag_translations}
-        outputstr = json.dumps(output)
-        cache.set(cache_key, outputstr)
-        
-    return HttpResponse(content=outputstr, mimetype='application/json')
-
-def subtree(tree):
-    MAX_TAG_ORDER = 16
-    label = tree['label']
-    sub = tree.get('contents',[])
-    
-    datasheets = Datasheet.objects.filter(validated = True, taggedsheet__tag__label__iexact = label, taggedsheet__order__lte = MAX_TAG_ORDER).annotate(tagorder=Min('taggedsheet__order')).select_related('organisation').distinct()
-    
-    contents = [{ 'description': ds.description, 'title': ds.title, 'url': ds.url, 'score': int((MAX_TAG_ORDER - ds.tagorder)/2), 'id': ds.id, 'hda_id': ds.hda_id, 'organization': ds.organisation.name, 'organization_url': ds.organisation.website } for ds in datasheets]
-    
-    contents = sorted(contents, key=lambda e: -e['score'])
-    
-    res = { 'label': label }
-    
-    if len(contents):
-        res['contents'] = contents
-    
-    if len(sub):
-        subcats = [subtree(st) for st in sub]
-        subcats = [sc for sc in subcats if len(sc.get('contents',[])) or len(sc.get('themes',[]))]
-        res['themes'] = subcats
-    
-    return res
-
-def filltree(request):
-    
-    tree = request.GET.get('tree','{}')
-    
-    treeobj = json.loads(tree)
-    
-    res = subtree(treeobj)
-        
-    return HttpResponse(content=json.dumps(res), mimetype='application/json')
--- a/web/hdalab/views/pages.py	Fri Nov 16 18:12:05 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from django.shortcuts import render_to_response, redirect
-from django.template import RequestContext
-from hdabo.models import Datasheet, TaggedSheet
-import re
-import django.utils.simplejson as json
-
-def datasheet(request, hda_id=None):
-    MAX_TAG = 15
-    MAX_RELATED = 50
-    
-    datasheet = Datasheet.objects.select_related("organisation").get(hda_id=hda_id)
-    
-    domain = re.findall(r"^https?://(www\.)?([^/]+)",datasheet.url)
-    ordered_tags = TaggedSheet.objects.filter(datasheet=datasheet,order__lte=MAX_TAG).select_related("tag").order_by('order')
-    tags = [t.tag.id for t in ordered_tags]
-    tagorders = dict([(t.tag.id,t.order) for t in ordered_tags])
-    tsqs = TaggedSheet.objects.exclude(datasheet=datasheet).filter(order__lte=MAX_TAG,tag_id__in=tags)
-    dsscores = {}
-    addtoscore = 2*MAX_TAG
-    
-    for ts in tsqs:
-        a_order = tagorders[ts.tag_id]
-        b_order = ts.order
-        score = addtoscore - a_order - b_order
-        dsscore = dsscores.get(ts.datasheet_id,0)
-        dsscores[ts.datasheet_id] = dsscore + score
-    relatedqs = Datasheet.objects.filter(id__in=dsscores.keys()).select_related("organisation")
-    relatedds = [{
-        'id': ds.id,
-        'hda_id': ds.hda_id,
-        'title': ds.title,
-        'description': ds.description,
-        'organisation_name': ds.organisation.name,
-        'organisation_url': ds.organisation.website,
-        'score': dsscores.get(ds.id,0),
-    } for ds in relatedqs]
-    relatedds = sorted(relatedds, key=lambda ds: -ds['score'])[:MAX_RELATED]
-    
-    for ds in relatedds:
-        otqs = TaggedSheet.objects.filter(datasheet_id=ds['id'],order__lte=MAX_TAG).select_related("tag").order_by('order')
-        ds['ordered_tags'] = [{
-            'id': t.tag.id,
-            'label': t.tag.label,
-            'order': t.order,
-            'common' : (t.tag.id in tags)
-        } for t in otqs]
-    
-    return render_to_response(
-        "notice.html",
-        {
-            'datasheet':datasheet,
-            'domain': domain[0][1] if domain else "",
-            'ordered_tags': ordered_tags,
-            'related': relatedds,
-        },
-        context_instance=RequestContext(request)
-    )