django-uwsgi-0.2.2/0000755000076600000240000000000013332715616015110 5ustar MechanisMstaff00000000000000django-uwsgi-0.2.2/PKG-INFO0000644000076600000240000000634313332715616016213 0ustar MechanisMstaff00000000000000Metadata-Version: 1.1 Name: django-uwsgi Version: 0.2.2 Summary: uWSGI stuff for Django projects Home-page: http://github.com/unbit/django-uwsgi Author: Eugene MechanisM Author-email: eugene@mechanism.pro License: MIT Description: django-uwsgi ~~~~~~~~~~~~ |release| |stats| |lic| .. |release| image:: https://img.shields.io/pypi/v/django-uwsgi.svg :target: https://pypi.python.org/pypi/django-uwsgi .. |stats| image:: https://img.shields.io/pypi/dm/django-uwsgi.svg :target: https://pypi.python.org/pypi/django-uwsgi .. |lic| image:: https://img.shields.io/pypi/l/django-uwsgi.svg :target: https://pypi.python.org/pypi/django-uwsgi Django related examples/tricks/modules for uWSGI Screenshots ~~~~~~~~~~~ `django-debug-toolbar `_ panel .. image:: https://github.com/unbit/django-uwsgi/raw/master/docs/screenshots/screenshot1.png `Wagtail `_ admin interface: .. image:: https://github.com/unbit/django-uwsgi/raw/master/docs/screenshots/screenshot2.png .. image:: https://github.com/unbit/django-uwsgi/raw/master/docs/screenshots/screenshot3.png Emperor's Vassal Admin Panel .. image:: https://github.com/unbit/django-uwsgi/raw/master/docs/screenshots/screenshot4.png `django.contrib.admin `_ interface .. image:: https://github.com/unbit/django-uwsgi/raw/master/docs/screenshots/screenshot5.png Documentation ~~~~~~~~~~~~~ `Read the documentation at rtfd.org `_ Contributors ~~~~~~~~~~~~ See `CONTRIBUTORS `_ License ~~~~~~~ `MIT `_ Keywords: uwsgi,django,mail,cache,template Platform: UNKNOWN Classifier: Development Status :: 4 - Beta Classifier: Framework :: Django Classifier: Intended Audience :: Developers Classifier: Intended Audience :: System Administrators Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3.5 Classifier: Framework :: Django Classifier: Framework :: Django :: 1.9 Classifier: Framework :: Django :: 1.10 Classifier: Topic :: Software Development :: Libraries :: Python Modules Classifier: Topic :: Internet :: WWW/HTTP :: WSGI Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content Classifier: Topic :: Internet :: WWW/HTTP :: Site Management Classifier: Topic :: Software Development :: Build Tools Classifier: Topic :: Software Development :: Code Generators Classifier: Topic :: Communications :: Email Classifier: Framework :: Django django-uwsgi-0.2.2/django_uwsgi/0000755000076600000240000000000013332715616017570 5ustar MechanisMstaff00000000000000django-uwsgi-0.2.2/django_uwsgi/mail.py0000755000076600000240000000102413332714254021061 0ustar MechanisMstaff00000000000000from django.core.mail.backends.base import BaseEmailBackend from . import pickle class EmailBackend(BaseEmailBackend): def send_messages(self, email_messages): num_sent = 0 if not email_messages: return for email_message in email_messages: if self._send(email_message): num_sent += 1 return num_sent def _send(self, email_message): from .tasks import send_mail send_mail.spool(body=pickle.dumps(email_message, 2)) return Truedjango-uwsgi-0.2.2/django_uwsgi/tasks.py0000755000076600000240000000064713332714254021276 0ustar MechanisMstaff00000000000000from __future__ import unicode_literals from django.core.mail import get_connection from django.conf import settings from .decorators import spool from . import pickle BACKEND = getattr(settings, 'UWSGI_EMAIL_BACKEND', 'django.core.mail.backends.smtp.EmailBackend') @spool def send_mail(arguments): conn = get_connection(backend=BACKEND) conn.send_messages([pickle.loads(arguments['body'])]) django-uwsgi-0.2.2/django_uwsgi/compat.py0000644000076600000240000000036113332714254021422 0ustar MechanisMstaff00000000000000import django if django.VERSION >= (2, 0): from django.urls import reverse_lazy, include, re_path as url elif django.VERSION < (2, 0): from django.core.urlresolvers import reverse_lazy from django.conf.urls import include, url django-uwsgi-0.2.2/django_uwsgi/management/0000755000076600000240000000000013332715616021704 5ustar MechanisMstaff00000000000000django-uwsgi-0.2.2/django_uwsgi/management/__init__.py0000755000076600000240000000000013332714254024003 0ustar MechanisMstaff00000000000000django-uwsgi-0.2.2/django_uwsgi/management/commands/0000755000076600000240000000000013332715616023505 5ustar MechanisMstaff00000000000000django-uwsgi-0.2.2/django_uwsgi/management/commands/runuwsgi.py0000755000076600000240000001113513332714254025743 0ustar MechanisMstaff00000000000000from django.core.management.base import BaseCommand from django.conf import settings from django.apps import apps import os import sys import multiprocessing root = os.getcwd() django_project = os.path.basename(root) class Command(BaseCommand): help = "Runs this project as a uWSGI application. Requires the uwsgi binary in system path." http_port = os.getenv('PORT', '8000') # for heroku socket_addr = None def handle(self, *args, **options): for arg in args: k, v = arg.split('=') if k == 'http': if self.http_port: self.http_port = v elif k == 'socket': self.http_port = None self.socket_addr = v # load the Django WSGI handler os.environ.setdefault('UWSGI_MODULE', '%s.wsgi' % django_project) # DJANGO settings if options['settings']: os.environ['DJANGO_SETTINGS_MODULE'] = options['settings'] else: os.environ.setdefault('DJANGO_SETTINGS_MODULE', '%s.settings' % django_project) # set protocol as uwsgi os.environ.setdefault('UWSGI_PROTOCOL', 'uwsgi') # bind the http server to the default port if self.http_port: os.environ['UWSGI_HTTP_SOCKET'] = ':%s' % self.http_port elif self.socket_addr: os.environ['UWSGI_UWSGI_SOCKET'] = self.socket_addr os.environ.setdefault('UWSGI_CHMOD_SOCKET', '664') # by default set 12 workers and cheaper. cheaper must not # exceed workers. user supplied overrides default. worker_count = int(os.environ.get('UWSGI_WORKERS', 12)) cpu_count = multiprocessing.cpu_count() os.environ.setdefault('UWSGI_WORKERS', str(worker_count)) # If there is just one worker, cheaper is unnecessary. if worker_count > 1: os.environ.setdefault( 'UWSGI_CHEAPER', str(min(worker_count, cpu_count))) # set process names os.environ.setdefault('UWSGI_AUTO_PROCNAME', 'true') os.environ.setdefault('UWSGI_PROCNAME_PREFIX_SPACED', '[uWSGI %s]' % django_project) # remove sockets/pidfile at exit os.environ.setdefault('UWSGI_VACUUM', 'true') # retrieve/set the PythonHome os.environ.setdefault('UWSGI_VIRTUALENV', sys.prefix) # add project to python path os.environ.setdefault('UWSGI_PP', root) os.environ.setdefault('UWSGI_POST_BUFFERING', '1048576') os.environ.setdefault('UWSGI_RELOAD_ON_RSS', '300') # increase buffer size a bit os.environ.setdefault('UWSGI_BUFFER_SIZE', '65535') # some additions required by newrelic os.environ.setdefault('UWSGI_ENABLE_THREADS', 'true') os.environ.setdefault('UWSGI_LAZY_APPS', 'true') os.environ.setdefault('UWSGI_SINGLE_INTERPRETER', 'true') os.environ.setdefault('UWSGI_AUTOLOAD', 'true') # enable the master process os.environ.setdefault('UWSGI_MASTER', 'true') os.environ.setdefault('UWSGI_NO_ORPHANS', 'true') os.environ.setdefault('UWSGI_MEMORY_REPORT', 'true') os.environ.setdefault('UWSGI_DISABLE_LOGGING', 'true') # set harakiri os.environ.setdefault('UWSGI_HARAKIRI', '60') os.environ.setdefault('UWSGI_HARAKIRI_VERBOSE', 'true') # set uid and gid os.environ.setdefault('UWSGI_UID', str(os.getuid())) os.environ.setdefault('UWSGI_GID', str(os.getgid())) # TODO: Figure out cache os.environ.setdefault('UWSGI_CACHE2', 'name=%s,items=20000,keysize=128,blocksize=4096' % django_project) if settings.DEBUG: if apps.is_installed('configurations'): os.environ.setdefault('DJANGO_CONFIGURATION', 'Development') import configurations configurations.setup() # map and serve static files os.environ.setdefault('UWSGI_STATIC_MAP', '%s=%s' % (settings.STATIC_URL, settings.STATIC_ROOT)) os.environ.setdefault('UWSGI_PY_AUTORELOAD', '2') # run spooler for mail task if 'django_uwsgi' in settings.EMAIL_BACKEND: os.environ.setdefault('UWSGI_SPOOLER', '/tmp') os.environ.setdefault('UWSGI_SPOOLER_IMPORT', 'django_uwsgi.tasks') # exec the uwsgi binary if apps.ready: os.execvp('uwsgi', ('uwsgi',)) def usage(self, subcomand): return r""" run this project on the uWSGI server http=PORT run the embedded http server on port PORT socket=ADDR bind the uwsgi server on address ADDR (this will disable the http server) """ django-uwsgi-0.2.2/django_uwsgi/management/commands/__init__.py0000755000076600000240000000000013332714254025604 0ustar MechanisMstaff00000000000000django-uwsgi-0.2.2/django_uwsgi/cache.py0000755000076600000240000000527113332714254021212 0ustar MechanisMstaff00000000000000try: from django.utils.encoding import force_bytes as stringify except ImportError: from django.utils.encoding import smart_str as stringify from django.core.cache.backends.base import BaseCache, InvalidCacheBackendError from django.conf import settings try: from . import uwsgi, pickle except ImportError: if getattr(settings, "UWSGI_CACHE_FALLBACK", True): uwsgi = None else: raise InvalidCacheBackendError( "You're not running under uWSGI ! " "Set UWSGI_CACHE_FALLBACK=True in settings if you want to fallback " "to LocMemCache." ) if uwsgi: class UwsgiCache(BaseCache): """uWSGI cache backend""" def __init__(self, server, params): BaseCache.__init__(self, params) self._cache = uwsgi self._server = server def exists(self, key): return self._cache.cache_exists(stringify(key), self._server) def add(self, key, value, timeout=True, version=None): full_key = self.make_key(key, version=version) if self.exists(full_key): return False self._set(full_key, value, timeout) return True def get(self, key, default=None, version=None): full_key = self.make_key(key, version=version) val = self._cache.cache_get(stringify(full_key), self._server) if val is None: return default val = stringify(val) return pickle.loads(val) def _set(self, full_key, value, timeout): if timeout is True: uwsgi_timeout = self.default_timeout elif timeout is None or timeout is False: # Django 1.6+: Explicitly passing in timeout=None will set a non-expiring timeout. uwsgi_timeout = 0 elif timeout == 0: # Django 1.6+: Passing in timeout=0 will set-and-expire-immediately the value. uwsgi_timeout = -1 else: uwsgi_timeout = timeout self._cache.cache_update(stringify(full_key), pickle.dumps(value), uwsgi_timeout, self._server) def set(self, key, value, timeout=True, version=None): full_key = self.make_key(key, version=version) self._set(full_key, value, timeout) def delete(self, key, version=None): full_key = self.make_key(key, version=version) self._cache.cache_del(stringify(full_key), self._server) def close(self, **kwargs): pass def clear(self): self._cache.cache_clear(self._server) else: from django.core.cache.backends.locmem import LocMemCache as UwsgiCache django-uwsgi-0.2.2/django_uwsgi/__init__.py0000755000076600000240000000034713332714517021707 0ustar MechanisMstaff00000000000000__version__ = '0.2.2' try: import uwsgi except ImportError: uwsgi = None try: from six.moves import cPickle as pickle except ImportError: import pickle default_app_config = 'django_uwsgi.apps.DjangoUwsgiConfig' django-uwsgi-0.2.2/django_uwsgi/apps.py0000755000076600000240000000024313332714254021104 0ustar MechanisMstaff00000000000000from django.apps import AppConfig class DjangoUwsgiConfig(AppConfig): name = 'django_uwsgi' label = 'django_uwsgi' verbose_name = 'uWSGI for Django' django-uwsgi-0.2.2/django_uwsgi/wagtail_hooks.py0000755000076600000240000000172013332714611022772 0ustar MechanisMstaff00000000000000from django.utils.translation import ugettext_lazy as _ from . import uwsgi, urls from .compat import include, url, reverse_lazy from .wagtail_compat import hooks, MenuItem, SummaryItem class UwsgiSummaryItem(SummaryItem): order = 800 template = 'uwsgi/wagtail_dashboard_item.html' def get_context(self): workers = int(uwsgi.numproc) if uwsgi else 0 return {'workers': workers} @hooks.register('construct_homepage_summary_items') def add_uwsgi_summary_item(request, items): items.append(UwsgiSummaryItem(request)) @hooks.register('register_admin_urls') def register_admin_urls(): return [ url(r'^uwsgi/', include(urls)), ] class UwsgiMenuItem(MenuItem): def is_shown(self, request): return request.user.is_staff @hooks.register('register_settings_menu_item') def register_uwsgi_menu_item(): return UwsgiMenuItem(_('uWSGI Status'), reverse_lazy('uwsgi_index'), classnames='icon icon-cogs', order=800) django-uwsgi-0.2.2/django_uwsgi/stats.py0000755000076600000240000000276713332714254021314 0ustar MechanisMstaff00000000000000import os import time from datetime import datetime from django.utils.translation import ugettext_lazy as _ from . import uwsgi def get_uwsgi_stats(): uwsgi_stats = {} workers = uwsgi.workers() total_load = time.time() - uwsgi.started_on for w in workers: w['running_time'] = w['running_time'] / 1000 w['avg_rt'] = w['avg_rt'] / 1000 w['load'] = w['running_time'] / total_load / 10 / len(workers) w['last_spawn'] = datetime.fromtimestamp(w['last_spawn']) jobs = [] if uwsgi.opt.get('spooler'): spooler_jobs = uwsgi.spooler_jobs() for j in spooler_jobs: jobs.append({'file': j, 'env': uwsgi.parsefile(str(j))}) uwsgi_stats.update({ 'uwsgi': uwsgi, 'stats': [ ('loop', uwsgi.loop), ('masterpid', str(uwsgi.masterpid())), ('started_on', datetime.fromtimestamp(uwsgi.started_on)), ('now', datetime.now()), ('buffer_size', uwsgi.buffer_size), ('total_requests', uwsgi.total_requests()), ('numproc', uwsgi.numproc), ('cores', uwsgi.cores), ('cwd', os.getcwd()), ('logsize', uwsgi.logsize()), ('cache_exists', uwsgi.cache_exists), ('spooler_pid', uwsgi.spooler_pid() if uwsgi.opt.get('spooler') else _('disabled')), ('threads', _('enabled') if uwsgi.has_threads else _('disabled')) ], 'workers': workers, 'jobs': jobs }) return uwsgi_stats django-uwsgi-0.2.2/django_uwsgi/template.py0000755000076600000240000000140313332714254021753 0ustar MechanisMstaff00000000000000from django.template.base import TemplateDoesNotExist from django.template.loader import BaseLoader from django.conf import settings from . import uwsgi class Loader(BaseLoader): """uWSGI Template Loader""" is_usable = uwsgi def symbolize(self, name): return name.replace('.', '_').replace('/', '_').replace('-', '_') def load_template_source(self, template_name, template_dirs=None): filename = 'templates_' + self.symbolize(template_name) for app in settings.INSTALLED_APPS: try: symbol = '%s_%s' % (self.symbolize(app), filename) return (uwsgi.embedded_data(symbol), 'sym://%s' % symbol) except: pass raise TemplateDoesNotExist(template_name) django-uwsgi-0.2.2/django_uwsgi/templates/0000755000076600000240000000000013332715616021566 5ustar MechanisMstaff00000000000000django-uwsgi-0.2.2/django_uwsgi/templates/uwsgi/0000755000076600000240000000000013332715616022724 5ustar MechanisMstaff00000000000000django-uwsgi-0.2.2/django_uwsgi/templates/uwsgi/wagtail_uwsgi.html0000755000076600000240000002456113332714254026470 0ustar MechanisMstaff00000000000000{% extends "wagtailadmin/base.html" %} {% load i18n %} {% block titletag %}{% trans "uWSGI Status" %}{% endblock %} {% block bodyclass %}uwsgi{% endblock %} {% block content %} {% if unavailable %} {% trans 'ERROR: uWSGI is not available!' as uwsgi_header %} {% include "wagtailadmin/shared/header.html" with title=uwsgi_header icon="cogs" %} {% else %} {% trans "uWSGI Status" as uwsgi_header %} {% include "wagtailadmin/shared/header.html" with title=uwsgi_header subtitle=version icon="cogs" tabbed="true" merged="true" %}

{% trans 'Information' %}

{% for key, value in stats %} {% endfor %}
{% trans "Option" %} {% trans "Value" %}
{{ key }} {{ value }}

{% trans 'Options' %} (read docs)

{% for key, value in uwsgi.opt.items %} {# uWSGI allows to use options without values if value = true #} {% endfor %}
{% trans "Option" %} {% trans "Value" %}

{{ key }}

{% if value %}{{ value }}{% else %}true{% endif %}

{% trans 'Magic table' %} (read docs)

{% for key, value in uwsgi.magic_table.items %} {% endfor %}
{% trans "Option" %} {% trans "Value" %}

{{ key }}

{{ value }}

{% trans 'Workers' %}

{% if 'memory-report' in uwsgi.opt %} {% endif %} {% for w in workers %} {% if 'memory-report' in uwsgi.opt %} {% endif %} {% endfor %}
{% trans "id" %} {% trans "pid" %} {% trans "status" %} {% trans "requests" %} {% trans "exceptions" %} {% trans "signals" %} {% trans "running time(ms)" %} {% trans "avg response time(ms)" %} {% trans "load" %} {% trans "last spawn" %} {% trans "respawn count" %}{% trans "address space (vsz)" %} {% trans "resident memory (rss)" %}
{{ w.id }} {{ w.pid }} {{ w.status }} {{ w.requests }} {{ w.exceptions }} {{ w.signals }} {{ w.running_time }} {{ w.avg_rt }} {{ w.load|floatformat:2 }} % {{ w.last_spawn }} {{ w.respawn_count }}{{ w.vsz|filesizeformat }} {{ w.rss|filesizeformat }}

{% trans 'Applications' %}

{% for w in uwsgi.workers %} {% for app in w.apps %} {% endfor %} {% endfor %}
{% trans "#" %} {% trans "modifier1" %} {% trans "mountpoint" %} {% trans "interpreter" %} {% trans "callable" %} {% trans "chdir" %} {% trans "requests" %} {% trans "exceptions" %}
{{ app.id }} {{ app.modifier1 }} {{ app.mountpoint }} {{ app.interpreter }} {{ app.callable }} {{ app.chdir }} {{ app.requests }} {{ app.exceptions }}
{% if uwsgi.spooler_jobs %}

{% trans 'Spooler' %}

{% for job in jobs %} {% endfor %}
{% trans "job filename" %} {% trans "environment" %}
{{ job.file }} {{ job.env }}
{% endif %}

{% trans 'Actions' %}

{% csrf_token %}
  • {% trans 'Signal number' %}

{% csrf_token %}
  • {% trans 'Log message' %}

{% endif %} {% endblock %}django-uwsgi-0.2.2/django_uwsgi/templates/uwsgi/uwsgi.html0000755000076600000240000000137313332714254024754 0ustar MechanisMstaff00000000000000{% extends "admin/base_site.html" %} {% load i18n admin_urls admin_static admin_list %} {% block title %}{% trans "uWSGI Stats" %}{% endblock %} {% block extrastyle %} {{ block.super }} {% endblock %} {% if not is_popup %} {% block breadcrumbs %} {% endblock %} {% endif %} {% block bodyclass %}{{ block.super }} app-django_uwsgi model-status change-list{% endblock %} {% block coltype %}flex{% endblock %} {% block content %} {% include "uwsgi/panel.html" %} {% endblock %} django-uwsgi-0.2.2/django_uwsgi/templates/uwsgi/panel.html0000755000076600000240000002013313332714254024710 0ustar MechanisMstaff00000000000000{% load i18n %} {% if unavailable %}

{% trans 'ERROR: uWSGI is not available!' %}

{% else %} {% endif %} django-uwsgi-0.2.2/django_uwsgi/templates/uwsgi/wagtail_dashboard_item.html0000755000076600000240000000050313332714254030265 0ustar MechanisMstaff00000000000000{% load i18n wagtailadmin_tags %}
  • {% blocktrans count counter=workers with workers|intcomma as total %} {{ total }} uWSGI Worker {% plural %} {{ total }} uWSGI Workers {% endblocktrans %}
  • django-uwsgi-0.2.2/django_uwsgi/wagtail_compat.py0000644000076600000240000000055713332714254023141 0ustar MechanisMstaff00000000000000import wagtail if wagtail.VERSION >= (2, 0): from wagtail.admin.menu import MenuItem from wagtail.admin.site_summary import SummaryItem from wagtail.core import hooks elif wagtail.VERSION < (2, 0): from wagtail.wagtailadmin.menu import MenuItem from wagtail.wagtailadmin.site_summary import SummaryItem from wagtail.wagtailcore import hooks django-uwsgi-0.2.2/django_uwsgi/urls.py0000644000076600000240000000115713332714254021130 0ustar MechanisMstaff00000000000000from django.conf.urls import url from django.contrib import admin from . import views urlpatterns = [ url(r'^$', admin.site.admin_view(views.UwsgiStatus.as_view()), name='uwsgi_index'), url(r'^reload/$', admin.site.admin_view(views.UwsgiReload.as_view()), name='uwsgi_reload'), url(r'^cache_clear/$', admin.site.admin_view( views.UwsgiCacheClear.as_view()), name='uwsgi_cache_clear'), url(r'^log/$', admin.site.admin_view(views.UwsgiLog.as_view()), name='uwsgi_log'), url(r'^signal/$', admin.site.admin_view(views.UwsgiSignal.as_view()), name='uwsgi_signal'), ] django-uwsgi-0.2.2/django_uwsgi/views.py0000644000076600000240000000705313332714254021301 0ustar MechanisMstaff00000000000000from __future__ import unicode_literals from django.http import HttpResponseRedirect from django.utils.translation import ugettext_lazy as _ from django.contrib import messages try: from django.urls import reverse_lazy except ImportError: from django.core.urlresolvers import reverse_lazy from django.views.generic import View, TemplateView from django.core.exceptions import PermissionDenied from django.apps import apps from . import uwsgi class UwsgiStatus(TemplateView): ''' uWSGI Status View ''' if apps.is_installed('wagtail.wagtailadmin'): template_name = 'uwsgi/wagtail_uwsgi.html' else: template_name = 'uwsgi/uwsgi.html' def get (self, request, *args, **kwargs): if not request.user.is_superuser: raise PermissionDenied return super(UwsgiStatus, self).get(request, *args, **kwargs) def get_context_data(self, **kwargs): context = super(UwsgiStatus, self).get_context_data(**kwargs) if uwsgi is None: context['unavailable'] = True return context else: from .stats import get_uwsgi_stats context.update(get_uwsgi_stats()) return context class UwsgiCacheClear(View): ''' Clear uWSGI Cache View ''' def get(self, request): if not request.user.is_superuser: raise PermissionDenied if uwsgi is not None and uwsgi.masterpid() > 0: uwsgi.cache_clear() messages.add_message(request, messages.SUCCESS, _( 'uWSGI Cache cleared!'), fail_silently=True) else: messages.add_message(request, messages.ERROR, _( 'The uWSGI master process is not active'), fail_silently=True) return HttpResponseRedirect(reverse_lazy('uwsgi_index')) class UwsgiReload(View): ''' Reload uWSGI View ''' def get(self, request): if not request.user.is_superuser: raise PermissionDenied if uwsgi is not None and uwsgi.masterpid() > 0: uwsgi.reload() messages.add_message( request, messages.SUCCESS, _('uWSGI reloaded!'), fail_silently=True) else: messages.add_message(request, messages.ERROR, _( 'The uWSGI master process is not active'), fail_silently=True) return HttpResponseRedirect(reverse_lazy('uwsgi_index')) class UwsgiLog(View): ''' uWSGI Log View ''' def post(self, request): if not request.user.is_superuser: raise PermissionDenied if uwsgi is not None: uwsgi.log(request.POST.get('log_message')) messages.add_message(request, messages.SUCCESS, _( 'uWSGI Log message has been sent!'), fail_silently=True) else: messages.add_message(request, messages.ERROR, _( 'uWSGI is not available!'), fail_silently=True) return HttpResponseRedirect(reverse_lazy('uwsgi_index')) class UwsgiSignal(View): ''' uWSGI Signal View ''' def post(self, request): if not request.user.is_superuser: raise PermissionDenied if uwsgi is not None: uwsgi.signal(int(request.POST.get('signal_number'))) messages.add_message(request, messages.SUCCESS, _( 'uWSGI signal has been sent!'), fail_silently=True) else: messages.add_message(request, messages.ERROR, _( 'uWSGI is not available!'), fail_silently=True) return HttpResponseRedirect(reverse_lazy('uwsgi_index')) django-uwsgi-0.2.2/django_uwsgi/panels.py0000644000076600000240000000144013332714254021420 0ustar MechanisMstaff00000000000000from debug_toolbar.panels import Panel from django.utils.translation import ugettext_lazy as _ from . import uwsgi class UwsgiPanel(Panel): ''' uWSGI Debug Toolbar Panel ''' title = _('uWSGI Status') nav_title = _('uWSGI Status') template = 'uwsgi/panel.html' @property def nav_subtitle(self): if uwsgi is not None: status = _('Version %s, %d Workers') % ( str(uwsgi.version.decode()), int(uwsgi.numproc)) else: status = _('uWSGI is missing =(') return status def process_response(self, request, response): if uwsgi is None: self.record_stats({'unavailable': True}) else: from .stats import get_uwsgi_stats self.record_stats(get_uwsgi_stats()) django-uwsgi-0.2.2/django_uwsgi/emperor/0000755000076600000240000000000013332715616021241 5ustar MechanisMstaff00000000000000django-uwsgi-0.2.2/django_uwsgi/emperor/migrations/0000755000076600000240000000000013332715616023415 5ustar MechanisMstaff00000000000000django-uwsgi-0.2.2/django_uwsgi/emperor/migrations/__init__.py0000644000076600000240000000000013332714254025511 0ustar MechanisMstaff00000000000000django-uwsgi-0.2.2/django_uwsgi/emperor/migrations/0001_initial.py0000644000076600000240000000420213332714254026053 0ustar MechanisMstaff00000000000000# -*- coding: utf-8 -*- # Generated by Django 1.10.2 on 2016-10-17 20:17 from __future__ import unicode_literals from django.db import migrations, models class Migration(migrations.Migration): initial = True dependencies = [ ] operations = [ migrations.CreateModel( name='Vassal', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('title', models.CharField(max_length=250, verbose_name='Name')), ('name', models.CharField(db_column='name', editable=False, help_text='Name of uwsgi config file', max_length=255, verbose_name='Filename')), ('extension', models.CharField(choices=[('.ini', 'INI file'), ('.yml', 'YAML file'), ('.xml', 'XML file'), ('.json', 'JSON file')], default=('.ini', 'INI file'), max_length=4, verbose_name='Extension')), ('config', models.TextField(db_column='config', help_text='Config file blob', verbose_name='Config')), ('ts', models.FloatField(db_column='ts', editable=False, help_text='A number representing the modification time of this row in UNIX format', verbose_name='Unix Timestamp')), ('uid', models.PositiveSmallIntegerField(blank=True, db_column='uid', help_text='Required in Tyrant mode (secure multi-user hosting) mode only.', null=True, verbose_name='The UID of the vassal instance')), ('gid', models.PositiveSmallIntegerField(blank=True, db_column='gid', help_text='Required in Tyrant mode (secure multi-user hosting) mode only.', null=True, verbose_name='The GID of the vassal instance')), ('created', models.DateTimeField(auto_now_add=True, verbose_name='Created at')), ('updated', models.DateTimeField(auto_now=True, null=True, verbose_name='Updated')), ('enabled', models.BooleanField(default=True, verbose_name='Enabled')), ], options={ 'verbose_name': "Emperor's Vassal", 'verbose_name_plural': "Emperor's Vassals", 'db_table': 'vassals', }, ), ] django-uwsgi-0.2.2/django_uwsgi/emperor/models.py0000755000076600000240000000453513332714254023105 0ustar MechanisMstaff00000000000000import time from django.db import models from django.utils.translation import ugettext_lazy as _ from django.utils.text import get_valid_filename, slugify from django.utils.encoding import python_2_unicode_compatible EXTENSION_CHOICES = ( ('.ini', _('INI file')), ('.yml', _('YAML file')), ('.xml', _('XML file')), ('.json', _('JSON file')), ) @python_2_unicode_compatible class Vassal(models.Model): """ Model for uWSGI Vassals """ title = models.CharField( _('Name'), max_length=250 ) name = models.CharField( _('Filename'), help_text=_('Name of uwsgi config file'), max_length=255, db_column='name', editable=False ) extension = models.CharField( _('Extension'), max_length=4, default=EXTENSION_CHOICES[0], choices=EXTENSION_CHOICES ) config = models.TextField( _('Config'), help_text=_('Config file blob'), db_column='config' ) ts = models.FloatField( _('Unix Timestamp'), help_text=_('A number representing the modification time of this row in UNIX format'), db_column='ts', editable=False ) uid = models.PositiveSmallIntegerField( _('The UID of the vassal instance'), help_text=_('Required in Tyrant mode (secure multi-user hosting) mode only.'), db_column='uid', blank=True, null=True ) gid = models.PositiveSmallIntegerField( _('The GID of the vassal instance'), help_text=_('Required in Tyrant mode (secure multi-user hosting) mode only.'), db_column='gid', blank=True, null=True ) created = models.DateTimeField( _('Created at'), auto_now_add=True ) updated = models.DateTimeField( _('Updated'), auto_now=True, blank=True, null=True ) enabled = models.BooleanField( _('Enabled'), default=True ) def __str__(self): return self.title def save(self, *args, **kwargs): self.name = get_valid_filename(slugify(self.title) + self.extension) self.ts = time.time() super(Vassal, self).save(*args, **kwargs) class Meta: verbose_name = _("Emperor's Vassal") verbose_name_plural = _("Emperor's Vassals") db_table = 'vassals' django-uwsgi-0.2.2/django_uwsgi/emperor/__init__.py0000755000076600000240000000010013332714254023341 0ustar MechanisMstaff00000000000000 default_app_config = 'django_uwsgi.emperor.apps.EmperorConfig' django-uwsgi-0.2.2/django_uwsgi/emperor/apps.py0000755000076600000240000000023713332714254022560 0ustar MechanisMstaff00000000000000from django.apps import AppConfig class EmperorConfig(AppConfig): name = 'django_uwsgi.emperor' label = 'emperor' verbose_name = 'uWSGI Emperor' django-uwsgi-0.2.2/django_uwsgi/emperor/admin.py0000755000076600000240000000133713332714254022707 0ustar MechanisMstaff00000000000000from django.contrib import admin from django.utils.translation import ugettext_lazy as _ from .models import Vassal def enabled(modeladmin, request, queryset): queryset.update(enabled='1') enabled.short_description = _("Enable selected Emperor's Vassals") def disabled(modeladmin, request, queryset): queryset.update(enabled='0') disabled.short_description = _("Disable selected Emperor's Vassals") class VassalFields(object): list_display = ('title', 'extension', 'updated', 'created', 'enabled', 'ts') search_fields = ['title'] list_filter = ('enabled', 'created', 'extension') class VassalAdmin(VassalFields, admin.ModelAdmin): actions = [enabled, disabled] admin.site.register(Vassal, VassalAdmin) django-uwsgi-0.2.2/django_uwsgi/emperor/wagtail_hooks.py0000644000076600000240000000052013332714254024440 0ustar MechanisMstaff00000000000000from wagtail.contrib.modeladmin.options import ( ModelAdmin, modeladmin_register ) from .models import Vassal from .admin import VassalFields class VassalModelAdmin(VassalFields, ModelAdmin): model = Vassal menu_icon = 'cogs' menu_order = 800 add_to_settings_menu = True modeladmin_register(VassalModelAdmin) django-uwsgi-0.2.2/django_uwsgi/decorators.py0000755000076600000240000002460413332714254022315 0ustar MechanisMstaff00000000000000""" uWSGI decorators shipped with django-uwsgi in case if uWSGI installed system-wide, and django project runs in Emperor mode and using virtualenv, so uwsgidecorators module not importable. """ from functools import partial import sys from threading import Thread from . import uwsgi, pickle if uwsgi is None: raise ImportError("uWSGI is not available") if uwsgi.masterpid() == 0: raise Exception( "you have to enable the uWSGI master process to use this module") spooler_functions = {} mule_functions = {} postfork_chain = [] # Python3 compatibility def _encode1(val): if sys.version_info >= (3, 0) and isinstance(val, str): return val.encode('utf-8') else: return val def _decode1(val): if sys.version_info >= (3, 0) and isinstance(val, bytes): return val.decode('utf-8') else: return val def _encode_to_spooler(vars): return dict((_encode1(K), _encode1(V)) for (K, V) in vars.items()) def _decode_from_spooler(vars): return dict((_decode1(K), _decode1(V)) for (K, V) in vars.items()) def get_free_signal(): for signum in range(0, 256): if not uwsgi.signal_registered(signum): return signum raise Exception("No free uwsgi signal available") def manage_spool_request(vars): # To check whether 'args' is in vals or not - decode the keys first, # because in python3 all keys in 'vals' are have 'byte' types vars = dict((_decode1(K), V) for (K, V) in vars.items()) if 'args' in vars: for k in ('args', 'kwargs'): vars[k] = pickle.loads(vars.pop(k)) vars = _decode_from_spooler(vars) f = spooler_functions[vars['ud_spool_func']] if 'args' in vars: ret = f(*vars['args'], **vars['kwargs']) else: ret = f(vars) return int(vars.get('ud_spool_ret', ret)) def postfork_chain_hook(): for f in postfork_chain: f() uwsgi.spooler = manage_spool_request uwsgi.post_fork_hook = postfork_chain_hook class postfork(object): def __init__(self, f): if callable(f): self.wid = 0 self.f = f else: self.f = None self.wid = f postfork_chain.append(self) def __call__(self, *args, **kwargs): if self.f: if self.wid > 0 and self.wid != uwsgi.worker_id(): return return self.f() self.f = args[0] class _spoolraw(object): def __call__(self, *args, **kwargs): arguments = self.base_dict.copy() if not self.pass_arguments: if len(args) > 0: arguments.update(args[0]) if kwargs: arguments.update(kwargs) else: spooler_args = {} for key in ('message_dict', 'spooler', 'priority', 'at', 'body'): if key in kwargs: spooler_args.update({key: kwargs.pop(key)}) arguments.update(spooler_args) arguments.update( {'args': pickle.dumps(args), 'kwargs': pickle.dumps(kwargs)}) return uwsgi.spool(_encode_to_spooler(arguments)) # For backward compatibility (uWSGI < 1.9.13) def spool(self, *args, **kwargs): return self.__class__.__call__(self, *args, **kwargs) def __init__(self, f, pass_arguments): if not 'spooler' in uwsgi.opt: raise Exception( "you have to enable the uWSGI spooler to use @%s decorator" % self.__class__.__name__) self.f = f spooler_functions[self.f.__name__] = self.f # For backward compatibility (uWSGI < 1.9.13) self.f.spool = self.__call__ self.pass_arguments = pass_arguments self.base_dict = {'ud_spool_func': self.f.__name__} class _spool(_spoolraw): def __call__(self, *args, **kwargs): self.base_dict['ud_spool_ret'] = str(uwsgi.SPOOL_OK) return _spoolraw.__call__(self, *args, **kwargs) class _spoolforever(_spoolraw): def __call__(self, *args, **kwargs): self.base_dict['ud_spool_ret'] = str(uwsgi.SPOOL_RETRY) return _spoolraw.__call__(self, *args, **kwargs) def spool_decorate(f=None, pass_arguments=False, _class=_spoolraw): if not f: return partial(_class, pass_arguments=pass_arguments) return _class(f, pass_arguments) def spoolraw(f=None, pass_arguments=False): return spool_decorate(f, pass_arguments) def spool(f=None, pass_arguments=False): return spool_decorate(f, pass_arguments, _spool) def spoolforever(f=None, pass_arguments=False): return spool_decorate(f, pass_arguments, _spoolforever) class mulefunc(object): def __init__(self, f): if callable(f): self.fname = f.__name__ self.mule = 0 mule_functions[f.__name__] = f else: self.mule = f self.fname = None def real_call(self, *args, **kwargs): uwsgi.mule_msg(pickle.dumps( { 'service': 'uwsgi_mulefunc', 'func': self.fname, 'args': args, 'kwargs': kwargs } ), self.mule) def __call__(self, *args, **kwargs): if not self.fname: self.fname = args[0].__name__ mule_functions[self.fname] = args[0] return self.real_call return self.real_call(*args, **kwargs) def mule_msg_dispatcher(message): msg = pickle.loads(message) if msg['service'] == 'uwsgi_mulefunc': return mule_functions[msg['func']](*msg['args'], **msg['kwargs']) uwsgi.mule_msg_hook = mule_msg_dispatcher class rpc(object): def __init__(self, name): self.name = name def __call__(self, f): uwsgi.register_rpc(self.name, f) return f class farm_loop(object): def __init__(self, f, farm): self.f = f self.farm = farm def __call__(self): if uwsgi.mule_id() == 0: return if not uwsgi.in_farm(self.farm): return while True: message = uwsgi.farm_get_msg() if message: self.f(message) class farm(object): def __init__(self, name=None, **kwargs): self.name = name def __call__(self, f): postfork_chain.append(farm_loop(f, self.name)) class mule_brain(object): def __init__(self, f, num): self.f = f self.num = num def __call__(self): if uwsgi.mule_id() == self.num: try: self.f() except: exc = sys.exc_info() sys.excepthook(exc[0], exc[1], exc[2]) sys.exit(1) class mule_brainloop(mule_brain): def __call__(self): if uwsgi.mule_id() == self.num: while True: try: self.f() except: exc = sys.exc_info() sys.excepthook(exc[0], exc[1], exc[2]) sys.exit(1) class mule(object): def __init__(self, num): self.num = num def __call__(self, f): postfork_chain.append(mule_brain(f, self.num)) class muleloop(mule): def __call__(self, f): postfork_chain.append(mule_brainloop(f, self.num)) class mulemsg_loop(object): def __init__(self, f, num): self.f = f self.num = num def __call__(self): if uwsgi.mule_id() == self.num: while True: message = uwsgi.mule_get_msg() if message: self.f(message) class mulemsg(object): def __init__(self, num): self.num = num def __call__(self, f): postfork_chain.append(mulemsg_loop(f, self.num)) class signal(object): def __init__(self, num, **kwargs): self.num = num self.target = kwargs.get('target', '') def __call__(self, f): uwsgi.register_signal(self.num, self.target, f) return f class timer(object): def __init__(self, secs, **kwargs): self.num = kwargs.get('signum', get_free_signal()) self.secs = secs self.target = kwargs.get('target', '') def __call__(self, f): uwsgi.register_signal(self.num, self.target, f) uwsgi.add_timer(self.num, self.secs) return f class cron(object): def __init__(self, minute, hour, day, month, dayweek, **kwargs): self.num = kwargs.get('signum', get_free_signal()) self.minute = minute self.hour = hour self.day = day self.month = month self.dayweek = dayweek self.target = kwargs.get('target', '') def __call__(self, f): uwsgi.register_signal(self.num, self.target, f) uwsgi.add_cron(self.num, self.minute, self.hour, self.day, self.month, self.dayweek) return f class rbtimer(object): def __init__(self, secs, **kwargs): self.num = kwargs.get('signum', get_free_signal()) self.secs = secs self.target = kwargs.get('target', '') def __call__(self, f): uwsgi.register_signal(self.num, self.target, f) uwsgi.add_rb_timer(self.num, self.secs) return f class filemon(object): def __init__(self, fsobj, **kwargs): self.num = kwargs.get('signum', get_free_signal()) self.fsobj = fsobj self.target = kwargs.get('target', '') def __call__(self, f): uwsgi.register_signal(self.num, self.target, f) uwsgi.add_file_monitor(self.num, self.fsobj) return f class erlang(object): def __init__(self, name): self.name = name def __call__(self, f): uwsgi.erlang_register_process(self.name, f) return f class lock(object): def __init__(self, f): self.f = f def __call__(self, *args, **kwargs): # ensure the spooler will not call it if uwsgi.i_am_the_spooler(): return uwsgi.lock() try: return self.f(*args, **kwargs) finally: uwsgi.unlock() class thread(object): def __init__(self, f): self.f = f def __call__(self, *args): t = Thread(target=self.f, args=args) t.daemon = True t.start() return self.f class harakiri(object): def __init__(self, seconds): self.s = seconds def real_call(self, *args, **kwargs): uwsgi.set_user_harakiri(self.s) r = self.f(*args, **kwargs) uwsgi.set_user_harakiri(0) return r def __call__(self, f): self.f = f return self.real_call django-uwsgi-0.2.2/LICENSE0000755000076600000240000000206013332714254016113 0ustar MechanisMstaff00000000000000The MIT License (MIT) Copyright (c) 2016 unbit Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. django-uwsgi-0.2.2/MANIFEST.in0000755000076600000240000000032113332714254016642 0ustar MechanisMstaff00000000000000include CONTRIBUTORS LICENSE *.rst recursive-include django_uwsgi *.html recursive-include docs Makefile conf.py requirements-docs.txt *.rst *.png recursive-exclude * __pycache__ recursive-exclude * *.py[cod] django-uwsgi-0.2.2/docs/0000755000076600000240000000000013332715616016040 5ustar MechanisMstaff00000000000000django-uwsgi-0.2.2/docs/index.rst0000755000076600000240000000077413332714254017711 0ustar MechanisMstaff00000000000000Welcome to Django-uWSGI's documentation! ======================================== You can view the code of this project or fork it (please, send pull requests), at `Github `_. .. toctree:: :maxdepth: 2 features installation configuration decorators email cache command emperor integrations screenshots todo changelog contributing Indices and tables ================== * :ref:`genindex` * :ref:`modindex` * :ref:`search`django-uwsgi-0.2.2/docs/email.rst0000644000076600000240000000211213332714254017652 0ustar MechanisMstaff00000000000000Email Backend ============= A Django backend for e-mail delivery using uWSGI Spool to queue deliveries. Usage ----- First, add uWSGI backend in your settings file. .. code-block:: py EMAIL_BACKEND = 'django_uwsgi.mail.EmailBackend' And send your e-mails normally. .. code-block:: py from django.core.mail import send_mail send_mail('Subject here', 'Here is the message.', 'from@example.com', ['to@example.com'], fail_silently=False) Note ---- You must setup uwsgi spooler. Example ini: .. code-block:: ini plugin = spooler spooler = /tmp spooler-import = django_uwsgi.tasks or use built in management command `runuwsgi` Changing the backend -------------------- By default the 'django.core.mail.backends.smtp.EmailBackend' is used for the real e-mail delivery. You can change that using: .. code-block:: py UWSGI_EMAIL_BACKEND = 'your.backend.EmailBackend' django-configurations --------------------- If you're using django-configurations in your project, you must setup importer as mentioned in django-configurations docs for celerydjango-uwsgi-0.2.2/docs/screenshots/0000755000076600000240000000000013332715616020400 5ustar MechanisMstaff00000000000000django-uwsgi-0.2.2/docs/screenshots/screenshot1.png0000644000076600000240000030455113332714254023351 0ustar MechanisMstaff00000000000000PNG  IHDR IDATxwTսOuv-{s[i}Q:ܘIC1@!ća@[ܡ\J3ҌEjTHs>0 `0 Ʈ` G 7 `0 { *0 `0 +{ *0 `0 +{ *0 `0 +{ *0 `0 +{ *0 `0 6md˗߽p=2:?:rAe`0 ]g:_MID(rAe`0 ?GŬk!g (@T&8`0 `0l؅ }Ŕ|ŝQ0L p`0 `0شsNW!JI 2`0 `o}';b``࣏RiПv.)$aP@`0 ` gn9s… c&$]aKrAe`0 *.\xϬS }b)mdtzwq{ *r#> i ppx>Z $_!➅l N Eg-oQ:^XGu7fgGFG :Hu `0 Y?=!B )I&C˗gK.5\ BtSK0PDJ!p$ó&BI|h%<26v$E9q[R/ G":V:\W#a ^zXht_Ifˮ`0 `0}Q74 v2*^z3g?^=sʕ 66n(z'ǟ}/1aBWs-ww+"EFHw$7$3騇;G_UDK'p:0 zU8 2xNڐ,ꕵH2;f t?\_ `0 3GoӃU78*dRU1muuuWWH6ݾ}Eg5~mJӧ~3gΚ5ǎ;́۷ʕ++W,b@)1?;jTĈnjRl MU!ITY\:HX1^0y?GLI24ۤj `0 `}MgwhpŠ;9sf&fxo>Jɓ'sw}ʕu7aQఞ L8uG҂DP[HA&$͍nS,K6JD=^%JlbCdIyvINCh &ÒRu$̄Hq$z5,1'/߬e[R,T$0 `0lؙ3IQ8sAd24gܹs}˗ U'k-SSO?p& ]xНo:P׭ >bttuΝtPWW{/`2LVHEq8wP婭.un1v]^vTUOIhbXP}z|BbWŎd21ɂf'ťP=rJCۿ-ӯnq*ARoܾy`0 `0XکS)O˚F:VsO'kUҙ_WdɒQ~ \ضmWs> +W|r{{{4KݡC$@|x JuX-Hy\X]2|*엷p$lb-QvY"(!(# cGy*i1"ޢtK9DGRBYbP@d*pXgi{M$j*?c8< `0lȻ]3R'CCCA>mAP bVa-8,W֨38f͚u9>˃ B{ァ 1]jnn?Wqrsĉ]vq7&@Q6!BL\I(PAhznf:oؗT*;+Lw`Z| UHUgmɑ//[ /!LѰ. |TE Wie8Ƥe&cn:"RrC!nnIթ~gV7e8mP=!5`C0o`0 `.\xO#,85SNY_Vam!{pKe?΄~G6LOķ)^nJGc|xd9[Y54%T8l `0lZ!KTꆪXjWꮮl6ܼh":|\Yf̙3{.]jhh^([nݵk˗~v#ϙz+ mRK.Uctoٲ\W*PrCl- =)JH#v8˻عhPLQ4'u\뇢>؈6ez-!٘ dd-|Eb%r`0 ` dtxxXwPnvn2K/)F3gT?ʥuͥK|9rQǏ޽[sz^$B#5%S>.-6\x m]׹揿wI)3$t,3贌۷1Uf*7^6dGʱ%s0~Dqm `0 *~&O?UՍq?󒖫3Gmnns:_U ~7m2 Z1!XIwPWX3!?hRѫ'ܬα(&oU}ll)48 }E%,2m `0 *ΜIę3/~嗃~:attt2w}h 'aPeyId3~ݥ^XڨV3L/T ֝gg_*|[ 3,m&C<"u nhrKdBᖿor$NVʯ.ᄕ{ *U'&nѽ2»JųpI8xb,UwH%>m/᭒ضF9- JO=pyj=&CfN'mK$G J6O 53RRfR]3\б+2Zd|ş `0 NG'EUOtzPɤaPG'Mp 5߆)/3I 'rtH" IoXH"½_h[J0كѐ(RGb)LQpv]0&%//j6_=:;&Rq?ĢZ/d^ Jӳr;`0 `Js7̼=47ȹs'&rAeR$C#ԫ䫩*[db٬#t#)9.IxDdO:E6s0q:n_<<ef˼xȒ#Y2-`0 aV7NpI*@T&E8`0 `0 vم D:=hr`X¡'rAe`0 *ΞY+A' LQdޟ|z=  `0 |3k8uoiПv.)$aP@`0 `iaqqQ=  `0 .v{ls4/enV0L p`0 `0?N"m3r\{ *0 `0 6…>ԩͺKŝ!L8`0 `0lZȻ.^ПS ) `0 Jj `0 Jj `0 Jj `0 Jj `0 Jj `0 Jj `0 Jj `0 Jj `0 JjD8 rw-[e˳]uIDr gRQ3XlyGǞ Fg9%4fpme˳oA p()0kN ;~wll,="9%4fpme+FGG[[wr; Ǐc`b8>05o7%/]V9bt)pgQ| Gz7WLf5 >F6:΢`Ue꽗ͣok3ަ侳_ypo KD4/j\IIka51לWݵr՝_8:(<9U,1J_ZD'(鰖6 9$gxӼdi,3,n;2707 nݺu߾}WW۷o@y2駧GGG~,A]jata0P i@iH$ɠ~*4 TGmt}c^< ,yD]ϜV5_7nSEhooK䵪{G* _̃] TG *iaW̫n96ǼJ։'!@Tj)UIqTse'Q%4tY*Yؼ_?OEAH5giw73Q=hTSFUuRrmF sp1+Wᑑ'|ݭ988r>L=s_] -f1?|ժU7nzr``󟪃/9qN믿IYqx;7sn> ӓjmʀ0a<588l>c?Vc¡ `M0 tlWC׹sl?y ?P.0D>V܂3`:RsVX;pMa/~gNg}>#Yo ~_'xPD$ofCCʕ+VJҟoƍ4xˌ^zx)_}UywA9tTdQ38!}ʙ3glWw@i譯Z?PӣW|JEux5o80`Psnh=::@.^666;x?f͚A~zV\atvj_8p[k3/:I^ g}dV\%MFC}-~r=(o2 (̀y_iz͛7?ϝ;Ggxr088866bE'^ƍGFFl}}=OK]>1ޕ+W+Vrc7_F"g}ԩS΅RD_~+B$B>L&Mٳ$Rwy{{{&'؎=]:vq)L,4fⷿ-#GRC=Db1/q1FN3ڂ {b]c֮]8 ;c\8<֭=Rԇ~yfoA _tԜ>}/W[buO?TM-WP <*-[ѱG8[opu.!@PRJ3`8qB,XgY>cӦM4/.]tȑW^y@Yj28'O塉E}}Co~:Xn^ Mo-/Q(;W@xq߰a*OBpBu(@PR̛7 f({vtR!:ޮ/΅܈_TП ;߽{ѣGH ^JH$eWpMFTuFg€,\pܹ~П\0r/Xx_|! 4.;oOk:5IWQ~)˯b1S)$U?f xxX-\~/qC %_ .tZݔ(1ɓ'.]zm}AgϞ3gܹsqpahhF|6mWt (ID1iCCòe?ПgΜ3>1 7\OƔ&/^իń X,dɒ7?).eˌR\qtt/ID IWGg#wC)Mҥ}o8ŋϜ9-ܢj*;kJJFO:~'oo||ǜ9s 8=v8(;lgS%D$^X/z7t7ٳg G!pԑIgrhդ$_#v"3ҁ&?| pkKH$ .[o6*r5T$ *. B&vǙ3g֬YW@㥈G6xg ACpYB 4j2vKKO뙘|J6#4M\Q`R$N0RBFo}_W?=8x)L-ƨ L;$]ʾ?Haedd"woބTrd3|iB%CGH/p$=R`0ӡ\?Ha-[̜9_7o~OWTx)i4@Ӑl:b3I8xp%G6tb~ 5 YiR,RӠm䑖G \uɓ'߸馛n8X+pd#g(fٻB8"!aD*곞r8Kio,[x"o2*,/Q&}O I_Vx\"-ꂫX쮻[nYf}[R qq P E8R~[$`?U7Ғ + 3"7N~*gΜٳgaП|WQ`@PR͛o{_bV7=^8;;*jp0qLJJ 2lĻ}Fsǎt`J]z]B3_}'v޽sΚå'lmm]pxG?Ѷmn޼yҥ<,ڎ:޳gϒ%K{gwy@I)堷-Z~wJc~gϞŋ{޽{ՉW.]USSvZ:0$fÆ mmmt'Cݻs W{1$N'~SIavttLuVJJ)˗/WիW~:x7mڴaÆgyӰlٲdɒOyuuu7o& , 7t@~ynCXD BrOWyC qWn|NA^:::~i:޸q޽{wsn E|]c nYGW72ȱuVRAouu5 ׮]K/@'wv.]O}' Ο|Iŋ[ZZ1[WW!/ţ8P ~ᮮ.UPDw}4~i|rϷu۷KpZN ^Yx|;|/BSSSmm-&ְg?s=G)V\k.J!]5?Of…fZ1*]85d]{4\884nonnVljjRw9\xgTc֭4_j9޽{  BbD%<^سg5 zwo߾UJ3GM%~k|Ni%KP\QI[p!m6¯YWb p() ܰsg 瞟4Jcu]\/Zh Buuu+Vce38jjj =?wK X~=]]jOXp~G}{ŤK[nʱl2u vTAE!<Ô9+͛}{޽ڐu|ZRq/vڥ裏Ҁغu+ /}-['|j) 䞮Rh4W5g\%]v yJR?hCO?~Ua5Lr d@nc|+OU*]mmm;vO(~x<31՚:LkiiQnRlB@PRJ?%KX ;#{7]paA=38r ޾9+Q>cL!Ԓ;J%,ʠ6Z\@PR=ٰa$ GGG}իWO2˗'h4:锂<?Е+W._|Σ87 YH4j 8b+I5!o:7Cp<] s)BF]."EuvQPCYő!s9kWԚͪ( );d߾}4B^tiq#S d4 E(&CGU&!,֐B^Iǽ 7fṚW 5D[! kZrDg,-;fT޽{{%UGj{d'}}ZP;05kx9uԙ3gԫ~!_BΚuNrqs2P?ѱ'ؾkWG0.9Z R_ѷġcm$esֳ'Im2BTYUcY/uH^AM53d\2t\Я()0jq% n2Ӟqi'N}722_zn;w.:tˣ˖-w ѣGĕ+W^z饍7^tihhh܍*pC]ZnÇxxxxΜ9)?O,rJe9P]GEثn DrP#HHۍG؝+}ʤ]R1QaG^}0zanŒfqDqUDQ'-7cㆆl6[]]_bttOz;Ý%oLnWʾ<9|[oK$//@^{5:~?W\ٶm]7μƦ.:$]"C(!n)Z~$=zaMXۗ6˜F_آG0~XV:c~͒ss &9 ^ m)S1<۱cS$ >7޸^ nݪr/^Tw]d y裏g1zS<>K\xBEHS+K_Ge; 𮕖֢ k;m_0QB.;\6H6jnt[x; Ѵ$Qa׎0 ZxԜ=;2K08S13N>=22??$_9k5 \Xnȯ~\9s(pǜ}cǎ]~aTd4X٣;t=|'Qq a(.4ٳV W"adTزԨ =ڗ;*0ꡔhώe*/tؘ |oκu.p=2g=z  ?ɓ'W~S3Ŏ_RGGdTd4hwCנG%1@!(e΅$SO3v #O52̭y-v/5Jy5{еmG!po'W;ٶm۱c8'O^r_vlo/Zܹs_~w޹k. app-?sNt%tL#G؅*~oջ畽^U:Jڱfc%T T͒=IsXS=M1f8$I/Kj@m,PSW,i{ួƫ7@fꆸ+W4ooAg7rPWWG6mڔ{G}Y2 8Rʖ}56 :XbܔsšJs"!9IgP%_1j94&ϷʌWnF 2)1)RɣJRCTrފECt#}$)+0)@T&W`zP0L p()R0L p()R0L p()R0L p()R0L&+pC 2)1L 2{ *JJ 2qLz2^xᅮ.{-bUVmڴ?? ?lܸA=tRJRkk9s ;vttt[8Z#%ғ !%P~D"TD<)Vz`j:P]wXvttp`{_ƍ;;;_x$q]wm޼b߰a?hѢ9s444*ձK+V۟zꩩHtG: œ`0KKqBD8 [ĠD0x:Aq$ C$ |n*bNHD) R ] ?zJD(19 KC(^<TNxZrd'9ty|p,>7fN8%2!$Ct"z F9)|/ r vRxFZʖ>#dOL2y\̃?Nf]7DOQS%d2)ME)W͆ YhC Q"vMȓ(rt 9L!g([kJ s%+̇Кa*!2#$+%ERrB-əh7Nm$ %%F$3() :US{6 RYQ:]^IQuE+F6htUqRv҅fh21? WHK^6AVlxլ˝o~)X,ߢl*E)'(.WYҹD< mzIY˝D0ν:9OŞME+C;.G0̦:b?1)tqO`J w"Z6^*-5!Es2@4S[`zlR~¿*vʟ-SrM[jD4uKōH$Rr ,"_sOD!=|K]Bnz^P-<*S-_v}$~\m/>鍖I%&C&wu~#RC=t,,`Gi1[<*oPޑmߗB/(s O"JN7pyggSeHwX` YU:::կ\rwqw}n'|re׾5rf͚M6?c=f2vm7bǎ7n۶m7xcWW}'?W:زe USq4tfxl}z[1('04~(݁O C&̗^XBa[]>v-2<| GT Jmr&dw񇨺p"cW"g+f/Pbi!(Dj| KdBA~( R,H) dnsU8$͏]d6St7+E\O$7=RFd2e %̶e.!~~J E1GmcRo J>zS], mvH3L&,'JH0e sBJIJr&T=B֔RΔ95BQ,n.p5S5"~#\% !j1ֲ9ʼTg2V( ΀VӬ'nWkbA厣m$=V`hv&SYKJ&Pb]y*/TɷVey ?*pn&νxBd<,<[%*+c[%¾9Hf/ A*:9bR,ͲꦠҬDx )($*xገ[OFqz (B+3KK{"!>w\䚔ݰʼn$24Vk ?TpjlW;-SrMصt/A^X9<7zLl:Q& m`hu\>eKNYcڠRx7fU\1ߠ#s/B/2!UGoJھ+{&Ƌ;/ Vꚛ`0k̙֬tR'}l޼;׳ @8Z[[ţf|k_)=ǏXIծ'V|Hvաe̲FD@(E:E vPI=u*wğ]O=Hj3̯N,-+5Ic,jyFzjsMIYfu˿L Xڬg9!O`.9p喥rRlXFagPT y7IQy,B Z`JNٙ6]}kj*𝎐V%`EBaS-K+ jd!I}LJ]/Vxh&cuz堕sVK{bTAfzUeT4 !f9ʒme]%7905aZqu+çL\S}.e,+eJD< 1G4o]x-K.mdhh=[0a*v9RC_$RB&%YSi/" (\RsVfI樝Ƒ-SrM mR(oxs@l$an&zy*ul4rdyR_|-m`'~$A*; ,.N\f|GW@PrlGBcb62wl2U\ޠBF.ߔ;^+{&|+VpcѢE< [W\ Nl_7677k_xŃɻ ,p,\C^̘YHՁ[m}^oE Tr8hfV~[GW`](\&|*[HR.+F9t~6-P"\w#=>(E+q^#L4nqR,62'U oT K1 \ ^[=Mɺkm+>- %;]UѩSªf2eWhNʳ,)2&L+obWz_ !ȭ6K15pkt9q[0,Qٺu+#C8fܹ/O¡jU 4*oPA# z_rU_eԂm̽S{&@ L*v7~p= k׮{~-[ПK,!ǷzkWWW]]wܡ ;wZZZ~ПsYVZiJZ[[}>zTxGw馛( ,t~߾- |?0J-pEBueeS^Pߥ`-RB#9(JwlzI|IKzފ7)馛MZF%y!US} du&+Lƴg oX$\kg1ٗ7]8p S86`eZ%s &L/zKt W 9#;K"p]Q9RڕN ZܷfZ!,B׭OE|e1,s,p`D:#8EI&|iSPy_᯶KN=-G+]x*q;Je?W#wYlDC(PgHy,D :[ ;H! CSfط-X6vJ"!>7 gB]Y7-1 OK_T@꟣v*0[4rM:4 LN*KTl-`sa[rr3Y:,z}vM7ܬZ뮻ԸΝ{nUZ ?7ٹ}|+uuut_jХP(Dg~ӟ^V1ED͔]vcGd( ݒ5vvlΧjk8ė>Nw7ke9Q3}4_ AUI:}؜:eF|)6;u/dѐ[HzޮM'~Cf{<|zmmV6C۩f_ j/pa_f8uJI 4T ZYytߴͧ{d}Icʲk+I1-ϴT[8XiI əɴ<@Wu pF|D}R*L38 =_K ڱdԞW]kt*{or܎)t6v)Mr1*+g($`NfZYRt͍.7UaUVC k&4#G9ނij_hs@D"pyC~Ԓ ߱RjmkkBe*_]o8'fB8r\2 \~:YdSlH6otA38,90BJvFډc~VIۯJ |U\1ߠF.v8(p*Ss!ߝC{38$QAK0}ꩧ{ ~ƌa ;fΜia¹?o&oV3e lyuÂj0l8KKC@P¦;gqeu-]Q{ꨕa?u}QʵDTeͺ-h< .:72;cHX:w9}PQtm(49rru}٬>oNԖ-dUf(>t:ƺIڏEAӥ;2r z_r/Qc!hӋc6pygs7%qwJz(]tL3,f!S*01G*đʤJ}Mx,eq!qRu/I5$ɕ` LBx"&oѼ3ռB)JeWHlY"w˿Z);J]!W)$ԛ{g%m0vcSg ?$f32Q/Q</0aZfMnheYoCu+ |KelqɤR|Tsp6)d:U[~SDʀ]5%I|ޗ:IldFQG&o(r1VIiL˞{(õ(V._(.vWRII9JY5渵1s5E^l2Ji˟po aΪ̋b2JBf,#%阼/\oT PHh9 U5&L*褧,WrU?S"*/DB FtMxLi潱\eɶʲM,S+͌5}wUTz\OE53:ii^6gsB9[bt)(rEV[$gEIdL1PBکlkw&mӕ qu- ~V$g3!/w"sV9 VRw܌KilHB}5H9B\B -CNGXCtyYAϵ~/RM(Rb< TqE~\/}Y}iopuLkZV5pzmt7.]G 2)TW›$ĿZ E C4 <2EӅġܑ\x8¿LN JFt)&C#dmc[!?dGr͒ fyۤPPLIw#}2Di-\[p$.zku׃x{:0wϮYnj, v9־bSSQ.Inv_"+XHAڏ`̮]Vy۽G*RQ]ʝZ]R6a12ǭeՔczc/=m:&ouu8NV!l&n}m*gUizBn*N?.5ZaNM"mY־y,Ox1NŻuB'Zn+lm>wy`7jˉVq|\ơPׯ//᪛3;+} 9]GlBwߪ 3$ZrAeR%*.l&V)#1;賖Z{{9Rh1,%=[q{ ҭH".l(I-Ҕ׭.Ea$˙Y$>[pS.qa ~ U Yd 2|+*XI|􅥤Uք0f|NYܖH%zlLHLҗX䮪lw8tHP@)yqq 8O+kÚ'wUU]eaP@~ݾPʝ ڄE΄HU% N& V"()*aP@dSpyVC>JMk-ʙLl&?ડȭrAe@I)@T&8rAe@I)@T&8rAe@I)@T&o`n` ~P@PR= %aP@PR= b)گ;mixarT:ÃpC 2)1?T|mGT)CyUU՝ а^3:`( @MTGux*VOz/ rUU DwwwSTR%|_\9( v7jBv}os˙j~RZWm.-ڦnp[@uTѲ3聦Wau P 6)p^rtzJBm}cյR ƃnp0:{'\{ΦZmaڔ#TCBac0MG큁bJj#!^hHK*U[/iLժtZ~AMAmzNiWvwWy=IqΦYhĖN 4b=(UUagѥXZ z-0'ym6_r𾌔OnT늦'8ͨlK}^jS *<ht=9l|eflPs{*Wt`'y[SA:6U;\P-+**{omGOy lMUzGW[vZJZx%Al^{QM7"j E)6 c"WFF\;X{[)rG:WD&e ѿVmWP$êR Fʅ8U6LR0LDzU8.  |h,W;A*!61)-䀁R|i^vJzundc?Z[%Q] P[G!OpRA٢+vUeñU @Fl Ei:rx|Vz't\-L.c}jY:S,U8~VAԬ6TŦZמV [XӖWwH.Hd8֦M,y:clIm}}uu}7R[-DEeXtWǽl憘(fR݂6Z"gOս?& z~4CIlFS ;08p@=PQ-lw_ZŪr"vxw?~jT߉c[m/mܨOPkӤ땄cIn͖InYCY1^Ֆ\k][mZ IDATs % i+3ssFk^҆ؠwo}T2+nS1iã8Q6F>ʩ43ݡQYh2g(`2,Hx!f(H'8 YC̯<MHQbG*J3b&t>ݪFMy*l56zp8cdLѕ"tYо^b Ov%-Rnc~BQ\ϒ aЧEȪv6%PQU[4e*yobɿFxr1kGD|}B@ɦ_xin.9ZhU^*ʰDuqXLXMW-"q^SueR*>;OhaYz\3|;4*gĖ$RGQvf3q|vf1Q3_}Y64op'fPzSkGyWTVEArwMqJjL󢔆KCT8&]i>81uQn-5FE:$ ){l[bSyC3i,nbt=k޽{G4VQ9,@g.7G1-a퉩4!ED,VZ2Ί/hUSxO-'4bq;|GZۃKґ\siOTc19ӳX(d}&ZԅK`]0F=%f-΀P_ 66s#_㓍<~4Y5=o!s7ˊ &ͨO틑9AyP$>&FWHxؤ±-[YգDi&~1IL?4}]#FjB%j2jlRunNU5:wnWb bI p D2⑤ e۵ eڻGGF9|8GKshi#^ȦKEg4ܯVqHw?(##P9,b=uKk%e$- ql::@K(AhN2 .HdDt4IOO5ynCljG0xt|W>;;;;Z,:jd|oׯ_O-dz+Ma###Ϝ8*ފF~Ӂ,.jLNN;wn޽PhffFQGdY4'NxlҪ7"zp0vޫ<,.j([nff2[hW_}׿Uom &  zbrnn)<ˮ@ڧg}v߾}`j=vؓO>PSyǎ0dp8L<߶mۻKii:/'˗/׊.-lL۽aׯstޟZ8}y\XVEC$Pg;(^ZƣΝǏ`vvvݺu ]{h1qXzCD7h%h@[-D:!LLL=8Dbzztӻ^fKBP>3w*7 *X ^۳vݻwAD/H i%hV <xwGOOO.SE/9sHe˖YŘv=S,Э&dD,>yjeVuX 88g/Mh^t㣏>)4կī/8f͚rh8;M%IONM%e$cYʘ$t"IQZ$y< [h_hӧO/+8{=5aÆ *p@&sF)IOtj*f$y%F>O$['#i1L/._5!,c$I6X,]37W[7n<|쬢(WWZJ=ݴi?oٲ۷^Nm6==q!+V`=M$O=ԛoICP˷Z^ I1T6f*Ƃdfc6I0Im#롅>6'IN,l[kd:N'6")p1Z۬U-E/W, BꯨSӰW`9\ ZygECx[rp@bQ9'I m̢#YX"$MڑM'qd*#Ċٚ |&2%4 f`.tlӐmT֟8bl:Y yM28ɘPȲ/Hn>!])4IROH%815XL1/!aZ<SIG6VE SxXF21D"SKo MtC NX$l&I28x-*(rO * hf149,}N%_ƒSN1x,YLc&96QМN7A.MelMf:?`ɪK߈0Vn>!m0Vn>!m0Vn>!m0Vn> hZ Op@[u! U Op@[-DZru]/w|>_ az5ktz+ mm__Ç_=KGFFᆱ-[\~崊 p 6l/b7߼gϞ'۷_vebW^vc+?}'x"׻\~-ٸqMW\w^=a{ݷoo|Og?y7o/h4^Y p\ewGReN)0 eCT8ahmZ6Lkַ!N ÇZJ z">ʙ^xw%W?v<-/)Y0iq#!Vh E3xħ"XCExW"la&Cn;^ؤY$kX(pв@Bg.Zm ,M.v96D v9,":Zj Kl?׼EAyֹBgFkwi,wwvEk#\],҄U{J#S,]ݽ Wʅeg6`782z Ad_bW6vI\(qGGBn[N/VK_Qy-\׈nDSs1`Fz5]S.lFA tn֬h+b'O6J*ldsR-l~{ߣɂ(<"6AO+jbp zxx'\PMf͚ 6Tq:{Uc k:8暃۷O|P]KoC]ve.vZ~6+z!"">}e|Hoo/=zk~i)UW]Uj@gڷ۴im}W<mCUS>滴_+ƸBKBL'y&b53PK۷DRVV@FMoR]%˰Yd8BQW[9%]|-է0?a v† 'lEFuqz/?yO "*OUr)'HQ]Bwu&t^"~bәIwT&\ 5J 'Bdش7~ LϚ$fV&q[3R͛wީ/諣w+iսKAjnUg2$"B:jeɈ {мFfY#^,\_0ﬣ8Xsq'SMIiNg޽{OE=O9;+Sk`0l߾;ߡ?я~"mGYrmM7$n{~[P"n:zz{]wÇ?7s qQJmoY2C*رc})~axژ+b!"G6X988X|ɡh/ՙ;?VY}`ޭ 6)a7e/;#v%%KvCP2aV;|4:}W[+BKξN;Mq;9NT0xuW ~>%uK7Ě-ZZ;y=U3Ks)컺KÚ+2tL O:*Y` \*d4{Y@:!у,+drn/^S! >Gl+RH{-\g׈STq1ҬPk9=SB587+Lz[ݡ~cL9̮Pid Vmobw!_=8T3<<8QnVgM-z#چj7C8lGo|oq{챇zH̗'Ԩu]W1͇6 LЫhK֬YCKo,#k6W}X1TG=8 񒆿2JTRiȜUKj8ۤhmmTQ)^[wjnVխ-,K(J.nO[KF[hOL!nu0x'VSEAIk,Վ@|D?.W媫 /}p@VK}--nHiD(VMpį&eG2Z1kG`7cSqM܆*R} :|6[+UF 2Q[]f{)DB_M32Q~VKYCaj|Օ]%4QAʹ0tl7Rls %l7ٻ(/,73 r,zp4Q^.Σe]]5]"1JS|GsfEVG1{o7ljY3e)hm+|'q=<(/ƿk/٪xa DFsT8C|}MIn>!II8$lw% H[Tra.ΦyCZ`v|~в98dOaw DSKL)*'^>(4!RW8UМN7A.r`RgS%WJE]F4N7AtC hN7AtCkYݻ?4h4]{3h Uqp@[ eэW^qp@[ ]VD7#oF;;;;Z,:m{<EQ!?/:BO>iF¼gNxGbo>$t K [k֬9;_PCK֭[733 /Kb(rx:<<|iyL?}w3"K [GͳI(etxxܹKlBi^|Eu7EQVX %&  zbrnn)O2SI [>l>&􌌌YF<=z:z%xo/1OYO>ٵkכo933#&;v8sh.R{N~GИ? O81;;K[JQ{^_;h;~&ӧƥK9mD٢qMdaT:Ƴ:лlA׭[7==ϝ;/j{a ?xD-tҽ/_M;DB垞IuvzI*Yhg}&[n3w={~%'O|fff,K ?.]{h1qXzCD7h%hCf"_y"Tg,&$XaSdu<x,]b&I,cE_/-ŲSɈV|zyloZ=k{t5lcOQ} 'c@8(Re^ rL<7 u7i{ v+Bvd+-NV6FEPI]I'3XuJ*[gB]Xl&wxrObWpx1/Ƣrp90^:hcց6S>u*Im;r j_NfHe`^@JfFGI22PXE4+bb'6ƲcN6-چ盙1Ǐ›n믿>U"0qС!*\N;D{ywѣGE>]f3͊dNw߸q#=8q{ӧOc˼gڻw~_*J88&tn'Y pIՋYe*" T:Ur `߀la!Xul^ƂbU5Am" p7=k'loAq8> $Yع?7PQLj:Sr kr6w W hF^w&X*_=nxE`6Nȶ%X4*O4 Bx|LN26{%=iB ?6Yb|%\YY:Y˓# <5nQ]-\׈SVidޱ!qJ'nM<+ۨܬnthR@c09čb9!FYYѫ{zz^y"A7m$_}=>bC,V$xw7oO'&&Ν;/_Mhy2˗SN:F{G6gex%q* Ket0Ѕ:UG /AVCMUIFª;&bW( ٹYV2/o3{p ג XD>=FNӜR#sj洵DY+BKZiB#0KEMm6"ֱ&˪%H4(5N<6.:h$K/,$c{kwN%|Gll2HwZ,r,Y؃:oE%ڀc:7o~f v554An: tm*/y0Wӏ8W8X3vZѹYht%_~ff;v,ںu벪Eʧ髯4уӧO[xΞ=+G ?598A_hQjv2>U+M7 xSeU즌_{#veb\p#RuƐc59[/^J3{p 7sy'k>Ei>o)1a z}l[Yh#D'BZG`JkD4v"!cKb6ku`[fff>#ŪeK/.p9r7O+b(xF-^|~Xݪp8,ZO>Q{vjy#cWN3~hѪފ%4k&LhTw|Ȝwge^ݺdmd6~kr.5zZ^S1X!uO%_U:,bLk p#P JlX0M^+B6F>z]qfbиwE=Mˢ`2,Hx!fP'@@0GA)8(KUbG8~G u55;ըh2gkwH |V>6 %1Ge Y([c)UQ)N8cɩKMiRwr3׳4hM_VuƍoAt<󣣣\OOSN;vV4|UVwGPgΜspZ+@^x9zF?D V?(M"G`x:3+2Xh4hj nbymG3:[c֎6 cSqhn.9:Z:sʎM2,uԹEM p__/cP`xD+Gq1%H4{m՜tQZ b6Cp>`M>Mb0flhRO̠Vރ-&zp4W(;jkD7u cg䯚oMqL"|pbZ"]Wzfe(H+!aMg3bljI3e)haVCU˗/O哓֭;wT'%}iӧS̙3KN8blk/7;;aÆ'OlGzZwH1 {5]{Ǣdr"+d9Վi،wn٢Rk֋Ofb@[Cl2xgN6iY6}-b˜ڧ9j|t 솭FXLN>=۸`/)4R2՛ @T+b|I1cOX4jӐ+;yfgvu=9f+S{pHR휠URT f)xlU#&͸Xäl14]ОGS8kD7q 8/[z&S;!mITS.othh+ITb bE1D<#<288OTO)V7T===d꒍7nڴޔ^rt:Oo144$)ǎe׮]oMK{pdc9 8gUVbxH+/ Wrf([ȺY|_3ao@^KLNA:S0] T/݃K.6Zb{) ;Iyb -)XVb/I7xtCB#o98j\J{*d+{mlee3K`:J;ꤋ]3op Ygs5߅U0Pxt lfל)ܱ5JX B(B.kSՏZQ՜}WVܥ5: 4ZRwR:6f‹ { *& QveT״+ڝ[je+S܉,Yvv=)j~&VdmlNl­!hn^%>[|)>~5}˲f/(yޕ QYműmr{pbvu͖y-XYkWK`8ԝ{'B7&h=]);G&uk\Ȉl piW^Ѱ.X­O8>>.8{,~SZЩ챨^Z+){$oi% yg_|A\./tz.8x 4R  a'8:}Bڪ a'8:}Bڪ a'8:}Bڪ a'8:}BՄ쳙'OT60 gEڼu=@DPTR6HR0ծL)J-4%٘Ol"Itl2):ga z`DbIkXb Du2d0Ur206>`1Hdɑ15syu! txk$]Gd*3tdcAI2ES1$z6ґB$\H-5H2z_NAd`n>!+E`$'1Rdax,[6iG6LY>x +fk*< ʔФN7A.McMS2US'K!!Ig4Y< a'8+ł&III'9Ƃ!$lQPc*)F٪ha HF<ST8b|}MIn>!)$$ItEq0eSnAżQ-0L|~в98Ɲ>92c1+Xrjb)E=|Q6ilė:&0Ųt,X-_[)l:]T,YuI|R`:}Bڪ a'8:}Bڪ aXgڻw~_*J88`vã##>%VQ9 m՞3tݻjF7^y%2:P9 mՖ2t?XV,g(AjO?Rwرt:=4tP9 hZ{̭>Cji7pG쳳"N [>6_~grrR]277s΋Οr?!zgZPyĉW~oD>pVbf̌({]z5-ܸq믿Notgב#G6o܊MDӟҷ===w3"Kk===\NQ[nE]xz3g\b:t;vܠ1h pdp18XIF;}j@7imøfѣFTJ҈ [ǽ׿U,ꫯ:_~%-4=PǭO,Z_: p ?xS5Ǐ=:33355%$O=TkOEc͔rzz˲L7ި7|Sl؞={B-~v=Yb:n*J8 pd"pT$`7k R*!Vh E34\P$S рK@8rѰn˙ $"Hˉ\eגIᎨqjom(Y 2&\2vwͅT!ۤ=SsT%J&*+reGūP"n;!ra4deh-j– .YRavA'+x$v唺( FuTK[>]g:'^;U/v~V GȗYCzy)5qV 'Bloa%6jw6EM7_?~ժU"䤢(I+hFX,JpYzy o?Y p|ǴjppPzU.jnڴiffܹs?y~v=ڞk޽{#AZH(A 34=L yM%"WU\> 9+ $T/)d.q{ۍ-PT%nf@NIĮF'_KVV^3UuvVM)7e`N309?/bѫSy%`{tVcTe9FB.kypYSBW4% 6Ŭ(Ia8D)qڃ,eU26ZéL!"|AkRO%/nѸ%ASFޚYרl(j}i t554SP)Ir\%#"b!Įls5N*ѭ9f*\WE8+"k2zچqushA(sssb~-[:uBу2Nk=+".:Tr_- A=X?XpK88=}- >Wo#x "vc(2QzC힢]*pe_kY\W4)fGˢW~H)(r9v7d+&tR!?n:Y@:!у#7@[Y)VQɒ($q!@7U-K/mzFtuN:!0v\Yk_ohRs1JۭPxJfW(`;EB©ukmvŊ_~e_Q_ٳbPn"b U:uJL:& SOA."ի?~"< G}Z p^\FvvK&IITRi+άR:MWQVYc6؎W2\"Cx5K@To_3~4і:=}-e?﷡dxRjR|\R~ttt{G_} / Ǐ _zJis1ѣV5f{ҫ6l@Μ9C˟{9zLt:+B)8T+@[P]Ӗpa.,TF(V֫*+`T{k=kY퐒|m+l.娍H*<߃M]JT8?|'~oCQɚllU+m4h*`b)T^ *˳jUv9" Qح. bHu)g>;Ga|qb|Sy#e"!CeUF=8KzRY`Ws=]#L:g&*U%6&[ӥ!*b.T)t][<ꝛJVtHyv=[SO¬̲MjseY;EG"~˗'uQT*%|U?/զDBŏ˦iuHf͚_LNg ?;TX_QaK-OjZOx&I%!R;VJl7/TXDXXG#8/N6v8 ViBjIjl][x:ZX5BQ9k|UL~^ud,*@g敀=0 mn/ Y_j)!*( 7/Wɫٹb gsӘWL^%407ymվ[V;'(?#" RHiGM.v~d2$echK:Ku5ϸfohݤc1YMv8 3d"Ra NMQs]VXFm#R'DfȒѩ#<ξڲe -hlܸqݺuxVCkjgh~SX Pt\<%AA~rI )DS[:MWU`=5!&V;_J) %wyEX \>셋zoYMk7.JvzŸӊ̉_¤m"~CKmR(rM Rxb-ob\_aYQ䐉r% <ū[ڹX;V&NY uڢª͌MUaHe;&hɌ* 0}) ]֚%UeTī܊zFtZ(%5z'a^4[duф0F#ݞVؕS]Ӯ{vnUq'dv=/j~&Vd=~' aЧ pxYOQir 3a#Z+r:KQЇm^\ҞRwы E.4VUlOat{!{o!<ɼplBC_|wI-똩kDwii\i;tCiQ8e/X+ҥDVuKke"^ X2:}B㢥x3kӿd].h@& NKG Op@[u! U Op@[u! U Op@[u! U Op@[u! tT$`7k ZDZgw9 u9W -2,8;B$ə|>1JR(hW&fs!$DI$ x^;@'uN?ХLFtȹ$)z`U<=QNFl6x|U*oòj$DeĘÉ\`^n>!+'$YKh#R( IHY"5h&z?eBv")p1:}BH#~I2)m̢#YX^$9Re2́D{`D1[sQlV&u! t)%WiDT֟8|SgJ!!KFW< pJB@0Е!$$9$YC|>㵚]aCHl0X#PlU0ed^_DH* ݍ!ФN7A$d;̒dty-*9d0gSnAż-0;f>?h'XP"~|E g)%q/gb|+*{ShN Op@Sr\YB)_[)XRZS|.i~#O L Op@[u! U Op@[u! ѵ]{~ BZE U{]֮{xxtdÇC*J88`{@+DFGJ88^.+ފ#GFs@ڪ= f.~HEߍcgggZB Ђ@`"_GG?ha;g}{܇~x] gNxv[ox#J^}wO?}H@- 5gffEٳg_j?~ժU-|ӓnF=8?N:777==w3"Kk"(-ܢ>>ot/__9s-$A_L18XIF.Hkjb,8FGGEGZ1%S<|bT?sY_ǎ4?z㏋Wر}'8qbvvNOOկ~E~W~jQ&vxx{9? pAZ0qرYnÆ ^{GO:E˟z)xN> 3gBzo-r֮{xx8N!4h6.*EQhM7_qPIZٳ2Ld" q!19u܎;LŪ_'N^+V뮻fff0DI^۳vݻwAD/H i%hVm=8_y啹IћcӦM333bqիW;wNcQwQ z#z"> ;wZxԩ+V ׯ_OGB=p@[Y[1D??bqǎE[n p =bR#zʚ5kh38Z۬]bŗ_~F+{|>JH344$b"rȑNj/(V% 5!„B!ݟz)ڀp8,үZO>:ĻcJ m6bUe޽Wv:󃃃>r<󣣣\OO {9pɢ pr?bѹ91[G8O{?Pf>(g5 "|[&8Zئ^~垞O?T<}W/_' &''׭[w8}\^pX~mu Z[ov3N<)/Ē?jBڪ mݍ7>bv #7*=|bP폹P\zjڵ7Bi5koeRU5K/ U•;ӧO?Hp@[u!\ٳ_}O>-U Op@[u! U Op@[u! U Op@[u! U Op@[u! U Op@[u! U Op@[u! U Op@[u! U ۴wqnzi&ZbŊm۶ђڼy#xjpgeq/7oI8Zئs=6mڷol öm?{D?HH>dVݲqqY. ejJj,%j͂-:)nj՛>lz7]4^F]mQūQ̜əIC΄z>|9d̜۷﷿ڵkpgggkkk0Q]DC^15TώAQ?\N$5: 1 /ScЈ|ѓf.X1^$tgMphcZ`/OLLHo<c\tSw JLA F3QR:QU'84b`2{G]*}x77Iy{F'ܧ v{s?;$3BJۭWrIOVw'6::VCys|k;{A$h]Px: /`nNdU[еFdt pkr}>)VݦT7v14M41kK-Zs5?`a(OfLjz:51&Sq IDAT)^ڐ^fU4מ&+m`Cy``)X@`)a(OHpVZXӏ&|;Fb$evʦȁv9Œ쁑2Ȟ"TYTRt'#곕 VQ-(h/$B?≴2HzcG|y Ƿ+⹄㛜L`S=Fi|<󸝤=/(~pW 5w&O^F+X/hAK>[œ:i S=rg①, bbMlrĉkڽ-מPh@sTo RB*nG2@Av9']X dTT3G*$?p?8e_״ \ҢWl, 9=أ,Ff\)SeEO*l2+A\'&&KXT~<@i8`4#O]{LޘP4+"IZq[$taGs~|%to<>2ɀ#0pʙH,Z= ҧGNJUCkI^o/3zg0$1R޳/ }8a_he'ԕ؁2zc3ɘO>N<2#c_RlRlEޝ<w:d$Gēq+BOVLޡ oO@H<Fs dde>[ŠcCr>:/n -~DҀM&^4JRx'hΝůUUU5==w| G҂t<[yur9>QU*GL"orgRT oʡPylu+`= l>E01*>s̼0 eOK' PUU?(Ehnn&w3|w%.nIF9#_}GoNN2Jqqx}ҽ%xFn?%s+F?$& |XT}/rHp\ƃ;_RG3j2T.(Ȫ/fk }s:oTCzhdv$8"|hPj@ݮt}5< ӯ9B:0M ^pAmdHOkʤ8q\;@-}(_#h.ѾyIf&87U"]òȏoOD$}y ?3 $h^)^;o4>N`7_y֘Hs$88_͘ھ};-WfggIK?]+?_DC8(r2dn.)R ݢb<A/sypep͠<ߊGc,\Vax0k>qn#C{:Vx(k;L>xء-* aFN5MǙ MެG%=.Ly.^x|ɦMw}G?w}Ѵ3g._LSh?o&2( _|矷f7  NMM͋ي <\T&8ZZZHdC@TVVP}QSWWgtMhhZq *SoyT(܂ (+nGryJFu^H8fy. /pHI71FM=?Wm\{J}xz^}^RT3b0OI s)wA|]>}pWtC6? ܢb9q 7s+N}wTrJ}iwZ}ɀS+(7wu&t"-\GO 䟑R10SƤ>VQ |FG#j_jIvTf&?}}&^sy#Wi_uen`weܹshoܢvl6{d2ODx4+u6m? 6,YN:E~? 4Mzϟ'导21c{]?4jUeCήP( 0I!yT(܂ɷS]TK& } K)7䃾x$_'x:H_MH_ ,lSUL,~T -/9{l*)ji$3 0 GYC"tCrM%:$!obU*2%͓1_cf6A1g0=dRd9c|3dYf߻,T{ȵ4}SзHn֓&g¡ψCN9cV>Zj<ᎌqN:)_$zfI& J?jJfر* x%£,g%Rޑ.VfSBJ:t B߹_#uœ KL&i, ҄`7p_{iI b`= S !'lPBY-(6\4'UOgt`Y^Hj_J<**{ȑoz* M+++_}U%Y^f4gkkoMo]Qhll|7) ޽0DK[#-WM(Լ+t0a sY7b%<5͖?>ș|)k A .&:\IvsIʍrr4*uPWdY:0(>gWIk }b``QDUz#=͉j M诜1KՊz8 _`FHB<s蠿=Eؘj-fL^Zī43FӻZn~:4++(T69U{3[y#mrR2@vmJcA_:;:N/(FyPdh< 2 T{M&08Kq\LF}P./t%%3бBR>,UFzy'^TЭ*ɝp+0i?yKٳI:įxv9+Uʅ9?L~P9j0㏖QĘA ?x.1666/200->/^ܴiu+8J8x]Qt}(8ң ͚pkw찓]Ԩ33f^?E95 "3W.t:]WEpZ|PNaX\Scڗ^zu)) hiiY&f1fgg?3ZYzb(idņƍGFF4ϒ'/YhH${QhaÆO>^at^oXuw8o)Ӿ^zv755?_u? ~>RN'֩닝ϷGHO5gދK_ݳM'orJ1F~ C ;djc&QpǧfGEb&pzVPdpԄUɳBY߸;dM]G>n3k}ؔ&SBt(%8څƻڻ@y1 /{iQ\UWgwXˊ]Gb#DV:ʨ63y Ci;T u%8/ !YPn8;)\5K.:o{tQS_#ČL_-me2VDXT.npͮ91s//>c`_q5FJbrff*Q/WFHl:6ڽ1T8&a(Of'8*,ê&8}u$oN9d _t;Li[`$Xqr^3%L1/!('iܑ)Q_$["ޟ\7^\_F{V+tTT!"vTGH`9֍%4>`Ν S' 'Yҫ `!B(ߛs>\#E&<ΔlbrrԌp<)5C_2GG%·‰] 88u3":h_b[zB}KLz9jiD7ĻNiFO}wzF~ ,VCI21ݾ}ӧ׬Ye˖Zk?d[,}5P9\ Yp:px֭C?pKK޽{[[[kkkښ|rR߷ou~o׬YC{1BMMƍI6 IDAT5˵sΎƵkגZG%M4&'833Qke_WCJfft%[6~p(.3 h#JׂF(8nJ{y'ž={nLPiޛoyƍ;w$UUU;vx衇vlɎ˗/'+**hkzk{{8.B>Kv<[H_ZR]].P]]]UUU7xcoo#Xreww 6m:t]~GȿկHR|rF:Z]]]>S( 1w100Ҳnݺ﮻Rjmm]&f:ȿ#%!n۷o۶mxO?sUV߿t~P(twH9mnP?z(͆eK6772ػB].YítСC[lطo- B{}ӟtww[>3)wIZ#?ɣ555p8K1ae_#p"CQ:*q;d HpGuj:OZHrxF8'M&2Bt(%YpcHXZP }E/ޡcOWb0楱$2y1^K]`T!-ȇ$Cy23xFT O\ `AAMp^B$ᢾNGS$\ ,ObKxfADX˩Oֳ4-vt[H)Z,b2l{"E.ߎZ}QҨ3B`-eCi;dfOcKfXR.%R|:vtp &7M|rty$%\BޤL,y$،f # Sb pYҗ{֨D*tKKZ(xY bF#tXGm]cXH: }D%Yi|H:${_It<.!f2}"d:$=)j|uQ=!~۽ET8&dviV 6^MbAM9d _t;m LlĊG~2 q$)Q89&["ޟ˨w~p_M:HA3QoZ?B =GKCi;d$œa.k?q"R! `!‰toN*΢Yido4NS;70P$8Rpm 4n NMM %BK-Qv;::Z[[}E^YY$;pG8|fxE{~6;;{ Rc7~<.]:~5cY7nذB^y5 zkdp)zMPZ oߞfI0<55ѱaÆ!q"Z{wu֙ zDZc'.]Qf:13!ǧ-ae_L']b3XWtYsȚJmnnWc:p_}]MEE]8>IKȊN8$͒.zc}b|[8>|TQSV%P =/я+Tz2&g ҏ"};Qd8`dn`GRr]w]|9H,56QWWgVB$lw077 q9a$3#<>53v8*K1ae_LGMXu(<+ ˺Cd}ɷ3}5v.!J>zṹ9Xn˗M6d4s.4!L]T|Ǥ/Aﭘhժʆ]P8` BPJp.},Mpa^MxrjrX`pIlC.uf}%v8YvZ/2c2XT.npͮ91(/>c`_q5FJbrff*Q/Ssss lyKKˣ>ZUU'мƙ3gH5hllTРWpٳgQ<-;tnQ)N2*FV#~a#N䳤yp+Xp,ߛs>\#ϪhxȚlv8ߕיvMLNN"2KHHJd]NrR8sw2Gܐ}o /1儫ٳݸ1>ZH]E"8/0#J1meeg}6??-$LMMXx R(Wmٸq21xIpeZ$Q::zh+Gb&LlBB?oɳVTB*\cF@Țr=9V&."f5=!uG/jKkk[*r%gٙ@-&Mp4s?XD_%Pر)1WƏ?rR'ǾIvtȨ(2FC 27ݽ{7a۳gφ ˗?c:s=GXz3֭[?w}em۶}7sss-(%^xFm)G}4;;sNs, L*%ge_WCJfft%[6~p(.3 o=E0*1G۶m#S󌹹^{m| -uC=r u…~~˗/+ҹ6(/Ȃ ŷnN{nCD[[[7nܨ#3?}nከEP²ND qYId>i!ɑ!%M&2Bt(%Yppƞ" :biS"B/// z=]Ɔ7ix-uQor#dw G*&#qS%/%6{nG 2~:Y>*O $tgfidKսl:M 2>f#.c&hz۩ƞD?Hcq_4|kEP8&a(Of&8xY:v6ne_ JGJER q+\' :4}#|MQty$%\BޤL,y$،f # Sb pYҗ{֨D*tKKZ(xY .̈4?=qɓ'myvIwڵGɣWT ۺR 6!$ \t&nKb^uIpy\BeyJ:fJO#~R)&\BFKN88;b2c0 W|D)t6Iz1SZ0z^7B`Ո4z 6l8}tuu_7Yvmsss8,'O|Gf'8^aU_ b x$tԩSWp?~5(R緿m۔K$%8_WRn?Y$8~aؽ{r21qeFWpt{WIp%k֬ٳgc=ٹe˖;vʕ+Iכҕ%HpgbLKoXf lڴIyq 7l߾v777_رcwy')ꩧCWnhh_w}۶mr(5}ь mӧy1~_sGڤzw}7iԤٹL[4 ._\_g`___  M"۳L4駟6+?Hp k{遁zbʕ>pɓ'wA ` /IVyǏ=m۶'N?~43ϴҙ8hktNPRx;v^~﶐9$}-' {!˷~;y4B뮻%OOCy, ׮]kn__I/-_h#>3<"=O?#/c'H!Pr 9fe.\8|0)yy庺:/h_XĖssyazkdp)zMc" IDATPZL7mtK.n׉Ǡ2nH- 270|2MR͝;w777rؽ{7Y~Wyd2l6Kj9M5^u|a Mj[TFgϟ'+d9 {n`ժʆ]P8` BP$8Rƕ* ˤQII477dڵk"z ҦhCId3xML|P$ӦĘ^Sdo$ٱcriFeeg}FF?<\EoY~j쯷6_xaÆO>l?z$8Rc#m9+6{M~ۦ 0JFB+rmUonul\33v5BvcۈHOa1udbL1nwSSΠqĉ٩u,w}ܹsx|xxKCѬǿ͑?ɣ'Zfff{9d… dֿ?ϕӋ/nذ,< ~MI065نOԎY\bӛmHD0u:ʟmCq!#/Ckm>`bL{̙l6;H&|ppP)t|j3334 ӧٵo߮1===55E1믕j?3::6;66f]}cLIIt!~ZGH1ف/'Fr Gr1.םR.Шu;1"=JCۻ:j%!ͥTj{N'Fr% 2=ݻwowwCMqo-p={lCD[[[7nܨSWWGꐖ1:1\P}NG;Ťx Gsh4ܒr:EJߠT!+:S{13"f\{GUV6o3TX/sDfgg('WP߱GdSJo>H(1ırCUqhag;ד| ><'\$89ևW_}ꫯKOP6 QvrQ!F1M[h{=]*՝]*+)zTuGrwȷ\qC5(~ 8h;w#зW_%]|qo,)&ic~DIs~Ml`t"BXދ2ԹᶗPmD}NGNmGFocn1 P a(OLljkpx l`E#4*dTQuڋ;:GU;8QqsmuFh Cy2%!Hxuak#VsthnQI.ʡe.Jw\i^c2&ܢNPVbCytJ H#s14?:=$8zRGzGƾ,xXOѓm:7f0Occj[sp#mJIX݁0}hŸǗ_sRBR|n*L6D}!ƴ0;mVF#ҟk,]Q&86ӫSTS`QCy`P;J|ėk(ŏ*`&hb.lBw`Hp:)ڋr gTw,CyXͨn97::ڬ\yPq3;iޞ\gph0e~uB]yMyZۭVx5oΊƶNJ ULpi\֪m/S+͍=#Qa(OW} gb;G!̓fMV=d8Hnusa BJƿ#+\^Ky{ |, ~Eez'DcOʊ+طoMg===gӦM;w\~=yg"4Oz{{ItT%˗/vM^G> M[ :ur)$8Z[[I~IӹLb8ۻd-իW,2O'in֭J6GuH zܟy"wqy֭.G׬YLL466r-ebhdKnܸcJ^Io,B;*w5LHpĘ$V%  QzuuSPICmmm$;:::ڪyK'$;vH4蟿/ݤ#RnCH}Ν;<duOy\3BV B{}ӟ*z=8qw!GMHׇaɊ~KK r3!I=p?8e__=I]#d*BkN.͔{bvz;)w}BA>1B;&h&fEW"WQr[>5E(#˜;yΠ+#4K$&8*"cMK.)LJ )FmJ4Oݬ3;^9Eifc A6`<'l孕c<}J*BߩWќAHIo<7 SO2OWtiUR#o?.+'owWQc4A#R_.'[=I*g$$~r^$8J&y|4^ղiH.KaqDh%$ eMMHqML( i %RoL+d|7-|K,8)a4MCy29nὙMw[#qWtĝF Ul&r:5.r8Ӿg`q "0"JY0ZPf;s@P8F 2%{F4qzKc=ioH^H|EqbuWUwWK-͌G#y;驮j}]r.#גŎ"pxiZº*u>.*#E-S/3,Q+ʰbpu 8Lt܎E2b0fBE d i2rŶ*vprfTUCŗEȉYޮƅD29iuTӮkdE5'428m=$m8 *ٚCz^j1+/tma Ͷ' gr@h3O~,P4 {K7b2BrLH(::VaeDm+L_6G4_l#-p4tGhv8I^!rj.! W%F kGdbE-qBk>nCL&k*p84KY"fO=HgPZnӻ;OJ쥝ϓ/ )ax|t0/WB,dڸ&xZYy)oFA?+ Ŷi$x"O1m٢㞐WEÚ8+'CE7D!K3) ZZ;,/ǤD Ÿ a0ƒ#X*%PٱSq2B63F>fo4bŚ6TU%l/E=h]t^R0^&mkuH\T2 3VWGxIũj.q C%슓QVו8]C.w jP sx6 jg C:w`)i|'rnZz*`lZ"ȫߏcz $sMխHҗkWA.gѩT&3IiX[*IhM۵\d9^C)8ֶ qdHG B?;*t{39 'qse\H Jp;`fҚ*cmdHeO(L96d2%*f\.Wr `܆0L0q`2` #e܆0L p)6dH! &!e3nCL&8qB+/ޝT˳@vE#e43X_s8t ,NS``ݻSƏ:D, p)#:cv6ߥnr}⢦=x{,Bh zc;Di'ӨDl:Kpxf8j0γ,2[];Z2!>9kTR>NikTb)Jh50bk58`43X_8|xٳ*ݻw? aGcIb ƘqRzC2j aO)/ASOJyrҳT%3k~U潼K2@UB4OcUPz~72Lӿa<6gk2CⵄW^͡Te[ü(5C[HMM-TU2|*Z)i3~y+ 3 /^sdbVtzCj$iiY25fV'wQ<+C0կ&OMH5-|,yfy/NE8)E,jt̐^zZeK"GQ2Ur<\Jfi;w._Br=pdzg>~89Rb7oOB 26D3^e_忝^LihhuoJcT2ڪ%<,O6^py?m7Y)14~j9-녽gLUcFZ)nYyRh7&$ v.&F5lʬd) a<*y\kA>TJ~ۜP#mIxK)V3c7{43 *!)5~xMS,<"z4uqx[Dϰs݉ecdYHºyy JQ昪񸔩[Yo^`Y[m*@M'Ru6KN/BMc얹ĩГc?A^T"EotKo^(K{7J?^TY9<Ї!Z92Uvmŏ5#2k^+_ٷE1zz]&p[+7/60iПDp*35_idͅ6̴ [ IDAT* te˯aӴ47Z?(BȰ8tjZf l;cUL˽)l1{$JWz$A{gX_v[qAhlPX(kj^f,<ϧŬ`86 OoО.j|<ȧ6k8|AM1b3p8ZR*o?& =K)Lt*gi+pj&4 fJxb"20hd?L 2wA)f*y*,@o^KY9ߛ;wS}}*Ԁj+MpI^Y^!W*5\EI!ʪq{YNy-!uDb2Le8-9U Y|̙NgϞ;cw?z衵⣌xΝ~笝GG.p44GNyzk f4"Y4;DqCnִR >Y3G =MHq$fSr٘3`fhI Mͱj I*BTPf^i4"Ŋ(qgS/6 ' CZ?ͪ#QZ4]_SY"I՜au  Kd٘ko8(lNy:knH2Qhr%AZϠ Rap1czIaW Zl*_k4,]7Þ1%7ICa?01&@7ŲzJ0Wy:Ƶ0='ҡ4JbvI3JQ۰rQ07ycKM25&Ea|t&mNhmQk);BO%}0xygBb16eSYaؓ't!K%TK4 m&EC+j̈iIOYRBNّb.%pt֥cqJ1̟y嚗3&4eF``;WK \ Ÿ)9GYWH6:gdJrXq ă61[,'ĕYžzu׽okXF B#c18,|+ʌ>]([/ѨȬƂ7Шv> 7Oٚy *J"w)tՋov-IZ;_km@m+aԼa.Rt6 .(c,;H7jya T87rys 3[X_y{C߻ZϜUVP 0:[{۟,RZ UuڜKO֠Co 7;5nΈKɔ͜w]."3+U6/U%*n1+Э9pMK (4z6Lʼ9~aw1g#M!<̲|ֽb,ծNah RXGQ.TZ&#_ueZ+tl) cw%yR^zuXn[K梭>#99J7_C4Sm+Է!/Q/Q q:3.QljJݕ%*ae4 TmAf686ac_ {>EU3nm7Z{yimU&WD*Y``t)D8+HӚiSVyyKLkҼM-en_4,Vփ~G\hAKb~TÚ`7y ՙ_g\\f\am`oho {VQdUeM<8zDbm\ymD8쇎 c,S= ӟQ@ z6!HkaSKSm {Q9Q Rj|7cѕJ[}Z219`θ\Fk%``)k8zsαS{;sٳgw.N?ַŊ?qvv0 k۷oP+_v,;v?~߰ko)/V|¸/8p8欭7NSưg #pozq@+a`ޙ% bs͚,k,(,߉bNY8bKAs-J)RJ%;$ =ζ/ꮗ(Dx =w-v J H7 I6ͫU:OkК*S05M=h4{5H2.CMT6uod멭h@YӤ(eњZKPc^ }7Ԕ;Z53Uj8~z龜@ZKFdJZWT%Ƣ(={[Vy!Pn!n>|_$5=sߖya87㜎TS}Z̰=Tz8`RbcUzy|7儸'唰OHoC,#C{3.5Qʒc05 ,wY\\ܿя~կ~N:uE~s78{l8f/"K/hJشiӻb1]wu̙'O|%pWsvNgg*Y ;" NapAA5{f'9Ȩ飋 jV + <iĊ/JڂXZ[!f Z4wsNawE~**K4"ĂKZ/%aIdsq!&koXme՟j`LM @HfRIL~%UtF"mJXc. m$LܞÿP2Dy3FiApio6+_en=oij'%7 f+ZX' Mlh_,IwD1cYyY!S U|_a*m:T f\.>#6֧&x{yAϰ|D#-c%Bwj*lO;<*uw5Q+&LS..&o\mO&"H׆݂1pO,OJ_8ڗo1V_|c 5X̻|<UtZxz8R ,CAϭtI%nQ !'J$qr70|Yn? j8jƘ1.];NO͋6lWtq}y-n!u`I奫=5SVp ǻvm"Dx^XŽ 8zߝ;w^U sB^~W^y'dv[^gr9|xm$8q?K/;{oibs?]}lv(`HC,,,׿fܺuώx __gϞV_7pÚU8qF?v__T*/2Lk ]Wm2nCL&8q`2` #e܆0LB^ѩz}ɴB2^vj!ɬVmyeY<#bn\K6'gY-$#i}oQ/x.xf]X}sXmIRK/.6埾L$>T 3rs#V\KЩCq*|ԝ)]LI/uGOGUv#ueV-t<!^ ]/fP]Y.JNoWÐZ:^$̫Y0Ӎ˚.VLWuЬB:# 6tHiFFx҅r_qB9,6H -OW^Sv-QH' (TuVZ2E;$7` ȑv('^@zX X6d2|^9Re`OBsd,mg|ʼ0AC;|Luhtu_ڰcVsT2ڪ'=OaheUaєorҶhScx3~5ʍ?3>+Ox*6ErT6!asqa;6YiՐ'*DsnPls{C%=,U |]̊Bz}Ҥڤ$ EtiB {q,j675D2i&z+u*Pм$f.Y@u;Qα"&Yt…rABC)Sy4 ;JWeԍ5QGY*4 ɴ(3;I rSDF8Z0:\'~7HM٥<vC$-+TN)Io`z[SJ'?ddha܆0L.ptr>b7U-M3U>_`3h 6YHڞhީj|jBfZO\{qgݴX/r5b M|S!B}P#YO$'i9ahǪhXDܛNS/C>*U/ӑ$d,n+5ϐ<"*5'BCmiWtʺ^o%Gj6۝f_% -bZ;u= :+v($܃F3 W-s h.ȜhdO B |2wAf/̒f(-Xf7za$ *ٸSmf!$8R0)nl#\1cmfvG`Д>q]i˂aY]'IE\X&ՀbU}b lW>]06Ai*ʍ6uOh8,$iʇB ˩#u:ah*+#ȗQ ]\!ΡQ[媢PN:#K4nH24yFo {>fXW "j]&"cΎ6HavU Z,ZhF˰'YJ{q4n2$ ~S,mE sc\ /sB+?Wz۟Ǥ[31U=ٿ .p7&y41ܾh. fm&rmNwhB8Lk);BO%}(GBi(gBb1)oXuBRZI1\H/S'..tQ#3fP˔mꋞ[ԣ\ًXzͩK̗ƥhd#BځNG}F8{dF] VwSB7äd:85af~9]4M "z8Z!f#k#{yegrWy9#r#+2+&y)Sժr:?8ɭO|tc ٭"VeYŤ< s/g]]Miܤub] CU\tNʄaD3t`R.\ #Z,7Ea Tࠠf9 ;WfݭZ, 6(voyO("3gs5T V'Լc~cl@$yq;Ykn :9s%̕xe IDAT܌LIyW+F^9Hv!Erգ{<[ tA\<)6wbVp[2Ӯ^4/.lwd)7VfYb>_/kuSZ.IR5+ε<4fRN 6'RbroV/8x @>f'sϯ"sNCʚ0Fg D< rYG4vJ]^.M;myc`[w4//gnH׾'h.DWŭNIh덩jېIA@Rp7uX]" n6*3KTղW.[Y {"ۆ8uM!vo0PZ!p(j[f ^byRzڪ8/()pl[IQ-DGWpAw#.t!Eb~TÚ`7y ̙^72..3.Զv֬ [ѽ+=QY㤥%4,xdep\\6l&Klz&ʉ֧cH RBr/]P#I @TĚȃd&yK6 $c'v[~y9Kyʣ<][|bK !hu ,Ÿ a0 U[cX4_SP_n|+z1"4 @>kɯ蹜yaϲC¢#wZ8`!pSrFGaB2NQpZ_U9u/|I4ezڗXyuKX_"<`mդdt J H7 ÜsQkRWgJ˴漽C&,x= h^oD5.CMT/ƥuD{ΒJ搢)6E{*eafYLzf"bܧ4R*FvhLvqi}96iuE2yH+X^(ӣ[>y9'e:4muD T4_eeJ#|}9M(vh|?sƥw:JYr `fg? px)0ႂ{24EVZAmÊ!{]~4vAUg" UX%Z!Ԥ/^s/1Kѫ eCTT(.h"٤V%!YNW7,ɱwn"jqre&V^ɺtj`sZO yͨBҏ4ҍ糾+_r"S  ̅2l'Mܞ#Uˢx}J~8ڗo1V_|Y*U#"ł|`z5FרQTI7y>$s'QvW ' =e?2w)0q)V2c,~18_g7zŝnhuwPq:X:_(ZȄ̪/mq)Ow^.}7n%RfD mΝkmy*&Fh}kŀ1Dꫯ>x=sm:thCL/)pCǝޯo;,嫱IVЧXnrYKHNjytJw,uRƲYt$+n(ZgT#NYPg;Z<I4l:.tz-lXw^LEu%}Eo.qD)Zq~MP4ygޒ(,y]nʲZo8|Lr/Wer%4+Y=ϲGfU^hb\r%x߾}<߸q>OOVx _wd1o뮻v"cqΝ;/bq|wRp rC=zۇX5R(pTo^/~r[Iu;C^|p՜k8W,9аI_ЈUOdRb6m<gϞ:uփ^yӟt>߸qۻw_~ΝxӦM۷o򗿬Kn湹9!v|K_ڷoof!O=Ԗ-[D"n۶dCX)L,  zGGxF_ ~ώ}QvVDKR6mڱcƍ{}3؅<׾o-"/R>x7n߾k7Ҽ+6l0ĪHM_|EW;k_ھ}nX,H$^/ O?ݻe]6==}[oU=f ~;ٶm/bȦM6n.|.r]+~衇v9ĪHM{7ÉD'e?3wqu|= ۷o2L:{ڵ'dq6oRc?C?O?Ͳ~r0. p)ClM6ߵ^{k.W~Ȁ``j`E #e܆0L p)6dH! &Fʸ a0@0Rm2nCL&8q`2` #FʸgdH! &Fʸ a0@0Rm2nCL&8q`2` #e܆0L p)6dH! &Fʸ ap!rW~_> dX)@0RFc0 x뭷zNS``=Ν[S, p)1B4Wu8X)@0RFc0ĹˬK/t%Y&G,pS`y|5l2"u^裏8pK.a!=wE[kaݻwK~q~SZoeH$DȾ}؟>లX`1tXO2K{]NX,vAϷFY&kQ;]w%Y_<ר pXg 00~]@oذ! }3/i5[naѮ 5|˖-,,;qFxUW4o馮b\wu,ZW'?Iw饗v]Z '> vJV7xp5e׮]ȮWwΊme޼y3V`3̆gVs='\vܹ'x+bO?=#-[X?8cpvu쬐Ti+'dgEsŠԯV]R d >3H^{7,򕯈7ofjj{K|;VUǵ۷~>O^BoN'pS,,p<9ϟuZl8ox{e`_ve>08p]w}K_>ϳ,[n+Ѩ؆//a 'ػwM73:tH,ym۶ -d2Ɏ]v۷yM6MOOSŰsNq;s=ӟf+rƍ/ /p%\wug?_{9sKQV vJe˖~qE||J2;;+Ĕ|wx7O:uNSq\}7N  WT5ht?UD]{Ps9~dvǖ ,Su#{vEw3fZ?2kGAq6qf`s2^{-3˭}7.ԁ!OS"' ܹEf??Ͼ7tS2dvn#_ES[jX5#j1Wbz8]v쬸VxXY _S6`- V_EZo߾}۷o*W_Y:u,x%xN-q! wHq'ڬ([wٳ{ >vYϒl=[=ͻwmuBF:9۝ĮkLڲk.K<+m~nq뭷2_S۶m\biַzDe̼gvؕ ٸqSu]<3juBNOOD,%"yDlqWT*Z~uPT]efrt:}/^!C8NS^#l{lψi%plᢁbpAݰ[|L1(#s[ǥp"ꢃÈ"x6:b9:MQY3fL-fqnvmUG}rPŎC>?~k"XLu .ˮeؿioV5w ,fW1TĂV+==m]">(++WU%x]wVǵ"\}4jC(Tx5"k&p(lݵDF>e%\=cs-O0#bGNVƸ aZ^ѵ#>)/<>s饗'¯i&+DxvJ٩ޏc0]wk:"\c*,~uw W̚aMv8|u-`sNJʎC?V.pG ذkw@9g!<"Cmٲe0$~pcóQe㼖;mlqYOYgdDvG1nCxB}:th۶mW\qŸ`8Gpo2{WzpnIԫ'NԻ5 '?:+Pu(Yꄽ^eƭl1nCx͹[U+*`MeՓ'O=?-WM:älvnq<ԲX]IecyNY^d뜽iS0+a܆0L!pԏp_݋V nE;P{dyNlӵ"plVT"mz3Jܨɨ#ÊswnWd X6dZcOtfc!eTgwr[wgG՝<{?~!nGںձ;4lte=Ɇ-[{'XT6sQӵairEX1.=f&yzȱcv X6dZC0]0.]!չ;z{6l\=ub@ᖅc{vtoyqelW;+W,rGgw}&vݻ̸ a0 3+dzDg{eb,}`! &q > #e܆0L p)6dH52~0@0Rm2nCL&8q`2`j0nCL&C8e3nCL&8q`2` #e܆0L p)6d2l]-!#OfjsqYd _\,SXAoҵM#Lh6"C^V(j_P2VeSfAev;kf٩936+BS z! X6LY4 P875i>rj%Z_.HBݪH,SG("E Y_Z:4HfYJ)%qWܠ~u- &u̸ a0 SJ)7i]rAUr.c:whЕ U- )ƿ#\N[DDΓ9n{ӡS&b( ?vgv&0AM=D EXJ{MݪH]ZL9KhΊ~ӕndwXڥ%$U}n{{>%cS/3,Q:f܆0LDE1 B񜲺g6RLd6ؽYpĤ},hIb%,E^jqdW4٩(frg)nV\,1sK9{ GNUkׅ$K 7)#)Y$a*}JXgs}TAD6>O p*@ٮd r{BTfDɗ(UŒѬQV! &!o2Z.D= тc smC_4r},1ۢSEN/١.̯HAg%4<wBҮvD:d-vغ1^/=>3HTYe$O'~8&t+H B]PEz|Q5yZB+ DZ;JpQK~..=>|\ .CnǸ a0 3f91v:w_V%&IkcDۦ̙ҴS0%u+[bfYPV68v褤Z.dMT\nE1Y^ASD%hAvZTuPngU1[-+p(rsZ!Zݑt5m]ib)%*Őv\hn[z"ź]>EUn¾H6d2L%=dw=n#ϐ?|`Zblnwi.8?iFanX b|S*K'\ ф˵M"bvˣfIܶ圫U[[O˄QbWSӆqK1Vvk:=ՂC.Y׆67J6Zw hA)]6j4k>7藮ugQO(#Tԙ%ڭ4sQlcmdY17?In.h!N$j-frdZb=- ғ=z9C~'};ZSD./3N;Y #so>_A-ifeVLg5uZX&`neVϘn]bZShJ /+n/gMMđ1K*@_H:zuoLgShAE%cPrgY6d2LòLBE6jI%t*ᦳ: ;MM 8^XM܂ŗ#3d:W.(,}G ^2 H+z=~,cqt9a}kS̄ȫ"Aѩf"jbBKJ%B[͔9ZiqAnuoڵE=ʊ^Ԯf@e܆0L`NlC3ye[p~Wۼ%i/^+[Э(i:C%u׀zٚB`܆0L/p! &Fʸ a0@0Rm2nCL&8q`2` #e܆0L p͸ a0@0Rm2nCL&8q`21!͌Ʒ_BVqb a0@oWX51nCL&8&W+ :k +b܆0L p w}woH`XV}c_B`ĽNz`x! &W*F{-ˎej ~2^wxszp c܆0L pwx)Za?1^Gޜ^#1! &7,4˔e-0sWpoN[Xw Z`\sXc5.pԱ؇+v #R p>" #R p>" #R p>" #R p>" #R p>"ZF2(ꉴ-J͗V*Bb*U:"Bxw1~\8GW'~ kĸ a0 Yg h8\Yţ_) vZ~7>b7y~p{~_œOkBm!J98cUǫߞ{lx~8:o oX#mdG4$j8$L͠* {gθ+=N}= ON?z7_x=6xF8?Oԩt>hL8,~p kŸ a0 Sh gJh*Vȧ<e`J%ž`Q`j~a&xX <~hœN+qZC뙡R{?a!5V.UB\0:Zd,nd!uFJ$Kd\T@?#$o+%{[]$ϯtx7{ZCR  z=1hgj]8c5 ۉ7~G/j۷No'A 8߀;3@*ɉ!p06N ɀ{s]ZgvjtI%S)_RYX҃C HFKLc^bLDtX.S5:b׀](9*SCox{stb{v«NdtᛌʇMybL\i;=/вq~jJHԗSFe>&ܗc+,Ą*sGps6C^G^8zS$@-8$d+. ,%aMsqXF:H#HtB%c!A\b<Z˪2֖'__{{N~Yp~'8z_SXd{" ƴ p m_2M\}koz`ReTS#}E8ǖm-lɟd`k>bcٗne/Q˶I;͏vmʭl5/֪kܲm8Y Jk*\/wpd#E_R*qI$8,x=! |9^Qed/+b<_%iؚڲ22т$?u~zzfV9q {jo0y:#o[(k$_F:B\/gNpį/.zQͽ/EK%8GxDix(%{QF[-Vy`?U2,?d5'ܙ5٥`ri aoR/ KvLpΐT; 3AO2g[x/~2][pV?s+fדgP3'8q+ j+kߢ")Ɩ83-a2^Aʩ#*Sɇ'?l?u%ێ'%? sDilmmujDm&8i_\~ 9]WNcT5bѬU2Z (58zK^5awqWya0KpU '8tw@_Hp@9(.oja0&$8RHp@9HplzOJ! I=cBZHp *&D j?|p_ij *׳^p7j GVD jI(_JiZt9TDg /o5G0].}=ްHӊhuRZ_qg V^<+_[ja0&$8}%$i~~~vCЊhu5+g V^<+^Uja0&$8@s\r7Ϗa0&$8@J>ƦwE .o'`LHp9_+ ;f𢫭+\TD0F`uQM3x.o*D7/F@Ό}MWh#kTW8xzO D PzO D PzO!vzOMpTD01!J01!J0S d2t:^*FGqcE`{" TmũN3 nk6HQx<G] =c61;;Kgd2Jᶆncn8mMN0$8BE[姗f :ř<~nxgn|~SEt%b"c|qRӎ XXq$JݿyIh*%gs\jqI[xqpBǏYZM_$81C#DR޷Mf3lV>Jȅ%v$;d:R{dS/|1U錣QI3=b_j%i!nBH%~TN'DS<̈́h^w`zilYcyddpږͤej,Jp6X%VUm!"-NtKgTT"ʰ0eG4<3kdE;mS٪i[,Qm{" ƴ Y%IZy+Nt93E؂"{ҼseZ?;EHCyvɝۙkŝuLAVf1^ }u~r==ab`g'L,!^8}v6ܹ}fRE*Qmb«{/u^UY q^{!|78xl/="˳ɴ $!Zq5o|b$(ˋ+֣pL{hq:{gEA{mF%8:фtE)8F%,/`5CrYkh85xGJ CʹA1iL#xq*uu94.Y&8K{oѾ&.ݤ%a0uHpʘLgSC<֏,;mMG&eo Z%TrʌwZ WjMvǓpbTRp+"Nէ%8Op Fanڦ^G*r#xyŭr]+1 ZTC O% LoC+z13f!D09ѱX!)9A7,@Ao&VZ\(p\0QBcϮ!%*yXOBe%8(5EkvhxGZX0 y ylͼmC/_-tb040tXCa`(OF-~~ءcKy{4TLpn|p,;OD8sw=Ty]޵D`{" ƴ @X2a϶ݓ;<<Pf"Kd"EUYtmCgٺ cnBꧣqzEQvbogo|rn FayR/r82z-NUf΀'8Έjk'B;8g6]ֆ#ZeYQc@SSڛZ]#."zBI+z1~¦R ,ݣscӄ$8m,SLj HhIDATuv@ ѣ[dZv7\gXlc;붲{-~E c!іk؊ёUEtlC=<@$?mM&Ti8DK`U6qs=4QswIWWvC=gsʰ =)󲪦V:juu d!FloeZN^2`,ksaJJV7ViEjuE6 /6Y ÚD,VnKVmdM0O˒_ļu\vGRtFu wz-p"q$<ŧmQc-^l,%c8qufgGy;YjE{Jǁa7CɁw ̇ǡsiGMۖ")^9IȎsw+h]{ƗbV=:Ļ]mMN0:$8^YyT|=GS#st{?;ܭO dta|1Qw-!~.IoQz]DByCtZK oe/B }G ߪ\Eit! (sĂtGxuh.ʎrݠ_ۃe;G3O w<۞3SbtmQcqd #sڞ+=>JutG,gYd;OǠV|2qPxlQ< V]<RPo+ygϖl%d,HhJZ;7>ϺGmMN0K/WpLd䁣lrF}|{!ۡ}sB!ih>sݐ,"Jr}Ҏwn:?+/ǎ[>hЛ|k[>(O»Rŭ*s[N%)+NbjT//Q<ڵ%]}<:E%n/ щ[Y4NUl'z{n\ΎZ=NWiE UQ̏#pbfV`]IйO^:}a1ˈoɻr9kqQOVW@-A>gCEex`8Ъ㏄bn%X.Hp=cz6dUUT5I+aOV3L*E|tVeޛfeVYSfJpaþ`_9 "jZk@:a^USD,H&Rfշ /7mP2cSXm=sZլ٤sH#*-L;Ih)T\.:w8HiUse Rc_4͇!Ziip^qyIZo2,=#ayl{" ƴ ͭv[G .y\n?=~RNCwyKŲnB)m^C[~SzgirEg'yضޛx k. Dϊ"zX%8Xy|KOmU8 crέo|~@*LRG`{" r p8j~ɉ//B/@{t-Jpc"DWKpɛWcs %wKt633355Egݵ95fe69'`L&84܄B't0(a0j{" +A6a0߾ϧ6 '`@ګW7lzυ~y巯?:<22,tEXtSoftwareYandex.Disk (http://disk.yandex.ru)\ IENDB`django-uwsgi-0.2.2/docs/screenshots/screenshot2.png0000644000076600000240000017001413332714254023345 0ustar MechanisMstaff00000000000000PNG  IHDR O IDATx P׺O:[V*+竼z9#8%f0F3hIb4&I4#8!<2+( 2( ؝vޛ7Mׯޫ^g:AAAAp7mU NYU NYU NYUuS̽GJ۷{ Ȫ#m~Ŝٯlq9* Mo.e)0j ? nNۅ}Y;RRkkî\~v~^8dmˌSԄ}}byXScOxanپŁ_N;ԀY}Cc++ϔĆ6VVyѿy裾v0R\<~Njnza&ŎXNr<;,>Gdes񥥓v;<¯^wzѕysqۍ›}x tm]Οukwz0/ cȮ gJKs®\/N.%R%K/kcc2?$0P9ё#tRSXx,?łx#LO;\|yKr2, ξpp-ƺX oqqxx5l$]M#^]4$ҹIzusTIfF|rr\BB,7n_X^[{a.]N]H'~7m<[Q=zmWr4=. 8.6 5:ژ/EE/KchzdUO^T:[mr.djj{/i٬}-y>TLK庙*!?GFGss0пXʉ[&w*_/(}v=;ul0T :B^@?î\yu{ԵkgT:ɻv^UtjO-ϫfJ۾i eefVտ܏)@7kשb'#=¼ٔcXX+/kHcOp^_$ٓQS}i_''옱A%%;RSםsx~>:Zlœ/1,bED87y57e>8q1FˀT>–]◗i_X^[LOg\޼ivmu;ܽta/Ũ1? {  ȪdfΞ5/'7//O=iȝ5!Fmj_By.Z%w7/ˎ޶3yp'kYcLy΀Y̎͋c_=S==>LFm}E/af U+lzƆ^Ye;/QVFFx7&yP@gʎq}ۤ;%7W9ets}~7/=w9I_]cm/uSdU£`_@V%<:dU£`_tNCbM>0`_?_~ 6lôG'!COն0UD%<:U 0@sڽ{`Й!<: f=mڴW^yeٿ -YDMN s0/?O6ƍ{1cD}$<:_N>mù$$# 'dm̋?ϑZ E$$pdBuSc2d/֬Yc۰(**ڶuk[[ܼy賱 1۷y1p@EssgsS233E$$pd_5XhmѣGgsrJaa %WڱSYQQC9=xӦnE dͼ uh^Xj#- %#jذa}1}gs01ٿ}~]T5p@)??_yt)& ٿ4tPۍ/Hwh^( g>l튄 gyƶyA6mFbUEvEKGSСC;4/H__|!Co_5f̘3fxyyݾ}[_̞=[9SKGSR~h"Xds !C3{JxIv髯}fпe]AA{BC<;iРAa^;}tg7 /  ߤ$yݻ_tBÆ ӧO7!C>EIxIF 8̋?I"}v]WyTg 8PYMKGSG@&_ygy ҪU_8&)ߑ?f=ě`9-uIVSS#Eݿ߿aÆYl1XХK z(_Ő!Ce^]fm !L 21+!|˞EÇSqs|`r={l݀N[tׯ]}Z!ܤ@*N̠i[sgFėfLLv:3Bgeql 5-\rkk*+'NV ee͛%wݻGw=˗%,@,/쬾}ѿ6}v`Obc>4 e_%&dTfDUcwg]f04||jܟRy Ϝ^8Y5iͰ6i-V%>|hŒ|kqq6?jnmmʫ̏-˃63C^^s3z.FJL?[qYFLG9NԲ+x^܈F ЭlGOfGSK5fFH^=|h^L;a睦=;rMS?3y?*k%f C@OB:_]U 6O>v4/I6_~؞^^dݦ&EKk+5X|&rkC k~ŗ癊~NM =Sd# kO#hIZֶq]+/Fķ.S,^6Bkdփt_yX ]y'/H }`ggQPW^z=Gm99J̍U].)-;^^&ZܲvJ)k2yżZJٞk<)'+ u~"ְ_K}jވ _ 줌7*n4J~czмAp:_:P\\\i c~ڿ{E͘1G'mO / 6u&ȘXL_H]Vx~Jp꺇ԾSngq㤁?G&VI=D>R.il Xr ِ5?4u,Kl6Ȳ݄ "@:Th,VsݻϜx%l9\ҒȂ<º&#}ekkĪ4~+ߗS(HQ;u%INMnm6#p|;s7S}𒠊+qNukמ#7׬Mqh=yRȣR_jɲy}M ږmiKxIPl--A՚=110|l>BJOS&>T𠛷h_!:1d1imWWyDO߲7L ʚj@\PɶW4c@v:`  ynzE&__e:tT^VEE~\}DqHxIP߳2#ofO=+ٕͭ"5eB`QF *Ӵv|JJ[Xzz1ԕ+7Z]0Txspa4fG"#uŞп "JԬ33DB ىQj{.\I%M6OswXsرg{acƌYjUP  KK #I-{uv4xI+"5eٹrxB}ק!%Bkϟsl^\{)k<9+ɒ?xlQx3GƿHxnaÆGѿh\}OIKmɟDupA6#G- 2<ߋOBE@fFg 4 z)ςկ_!C>˧*%A; e3Bu]yyhnVu{%WTO*4D=qEEboxCv\#f^:,0 t {g톾}vC:t&%.,qWP_tNC}g 4dIڷof^K};;2nS-+~`CtKo+ Ku+0`{sk K / vgs.g7II+SS\:_N$Vҩȭa>˿4hI8k!%#c/BHVpo/̾:`Gԃ%$pd_m.{9Gԃ%$pd_DU&ELl"I_J пao߾gKxItٿ:Laub P/ IDAT <^82/JY/Gܿ0k|#O.%#Y7};vD吧, _ ҹa/#^82/ټe-ߺʉ?znw 8yû_ :k }P=^KGS*OGG+F -?1oӿxgC>/%#ѿn@۟M=QEe t[7 &$滭nz/,_]$$pdk1/gNֿl|A6l҃Lm_NM7#2VѧaJ'^82do""q8 -Ut_+#%#ӡTîDxy[ ڇ+BE>}D$$pd:/"<9U/yǥ+ / |?#&LIb?F4A?)f ?<Cb O>0`A(EAPKz"= kx_0t_ :tп8|gζm^0>̆:C#׿(Slя= / YtBϾJ1x:/ Ȗ >fU:xB癥ۺ0Gr / Ax_j^/ hWM0>?IXs9lĨCzlv=d.2}<Ҽv\[Lտcr/z(䯃?#\fuZY/@: GȟJURsRᭃU ZeQc 5xp7_u1\e<Ҽ짶>}Dտ F8<O!B/@: GpR9㧴ܹSXuuk_9|8< 䯃rٸM H sAA胰1o-W<6IF15xp7_u1\e<}Joc f}#]xerms?A o ! c x+UJX0xrp7_u1\e<`mo°dO^>'}up_@!PwO ]Fxaoh1/9^ău@x,/֮]w)6lؠ\W^Ī*u떓JJJx;vL>}Ĉt&LkkkM*/k6o<&4U^6KYcۼy3_~S=jy9sȻ7nr#aaa3g|h;tϿx1cTTT^^^ouG7eC1hyUQM1|1c+?=yBΩM)[|y٫uuR k599ÖZ%PV (cÇo/,q;ϚwY(Wd(ϛʼsSp]@J).eVKkQr MMnߦC9Xuxef:)"YCZh5]9rV@GE*ݴ̹럝:VeLOs9򮱥F}}Lqxqtܝc}>.((H^NRby70PQݻ>FCrH#@@fFÇktٽ:(Wkk[JVy\=Gc!t;o5t`w烙. x 9 ?e3ҰPפ$b[X]da; `i9#%S KUc3[_@cWco?I?˗'%VVV4Uy6ڵk4>Ǐ>}:O;7,._+V%eff$魭&MQF<0(#GҬ#Fٳg˻lذLo&EcccyI˖-Wܻw/v̑a@x(^ۍu؛%&RnPP@#1?IJv3]ū [bɐ =7ElpUh7o̎|Ң|G})eeMݻ*8/`ʽP,U߻G_4(cD53'zP]*yS!X}h(_g~.\B)SuT&GM/HrWݞ|S,/q$ӊrE]hztm W'Śo2BTG@٘ =iiYr=lii-ͳ|}l>Kvrwfw 7otWJotƫ J118/dlzؑ{O/A)WٛW޽:%]+0c9r"OAV{(- Vdz*- wr~II\N9g)g_X4:9CniQS~}C8 zAx`y1Uʕ+f[;rp-/N0aگh?pb'Cx.yfy˫VӕEjj*̚5/pxyyQoL4/~GM?Sr>^zO\6V_=Az2Ưc_AӓӅ9TUfo%W'=W1+)]$CQeU07QL?tE^C\KBrC+⟟OvʦT0Hڜ߅X5ئӫ7ƏQ䫞츠mH0R8f_2FNŋhvAz_Xⶻ_}ҿ`3`ۑ* YrPٟ$V~:h/B.]< N¶q7 Ε^ f{ r{1HqߜFe ?O#*-dlQ{فx@1Cְvߠf|'ŏIl|Cg7= 9F+':H;g|kjR>6&&3>h 1IYu-0 <0o76PV%`F/> -Io l*;~\w{><րٛbdyqDbkAM: e z(+;]U!zpR!-Nտqh,~ltl_MO;/hw_f3NKn53*_IEx"eS=:P*n6HM⹴W8Cs$SɹƟ"3ޒ N"xskRRG3-FG^SHW#@*0@;--rɲt_|T5û_P:I&7[]G}y+~tQީ{ b}BiggS ~G44ҿ999Y^gZEĩ/&N,/#mF`􁒍7¿w %x&_0h+пx4$2^(D_ "Wu̯fm7n\qG}s̕/&Dz{. 5/-Xȍ5M&R/R}@+Z@fjqֵt_кGښ :3N&#ǬJ;|^\Kܿ7Lg9f8O_i,/cOֶ6>hv<( ;۲lAʞ\-[_@ұAJNNfG`ԨQZ __RۊF},_Sbʹ_޽{ ^IǏD/W-ťKxt7oL6#J[[/ U\$gϦ73z08LT|$^z\S 2rww$9D,O8l*/&V!7/xښuqq /(ݓmR}rSxatx<ʘ|Q Zo  ə*VTZjmm{Z _jAe}SeKz\vkP qNUVCi,ƥaaA&ޅŏR,7ƢCnIaQ>~'0Q~#c`w'm\RpOz`k4~'c(rv*ˁr/ҿP(ˉ\{y&*e %gCdl:l:utߠ0Ľ)A9dBK<J pec~@}/,4X|q.} ʧСAb4B}ܸq.nxܿ(,,'O&e_[{?$nFoȑ#K+y3;b^ *<$7M z# iaZ6 `AOf-0w^q1J!@9'2Ao ;:GI1?/ǷIoo_ݳW7H-HrU4a/2[O_(3N"fۜwc IDAT8 e"?)Nj8i/?_ @M\*ϋFi+ZGР]sh#rPerP uT_- җӄQZ̿p:,-K9^tm3]\r¿ڥ{ڵk`L2'Kjry[ (Ν< ؐrJɫ%c毖ԄJm-#=52ʔ]}5ƃAI-, &n/Qŗ吨w Hz}~l=E͕֣1@ӽ{ nwQn5*EuoOur׋cA/WZ`GgCﲯ:=6tY^w/JuE<WZg=/6~b{]Ǽ_-P>ʟZt2 y(X ]{@^qoI/ H sAAנ;@\.i H1\e<5WK_@+'L+V`S^luJtpKxI}#ڧ.UNu /oDW*.%j_@V%:8%$]S ȪDd7}YT FtO]/ ^@߈ dUS]K2>uJtpKxI}#ڧ.UNu /oDW*.%j_@V%:8%$]S ȪDd7}YT FtO]/ ^@߈ dUS]K2>uԿ?utg%:8%$]S#F?~ĉf>hovjvuKtpKxI}#ڧ.{F:qDI/rW64-ONNNHI>vN6xrZέYHtpKxI}#ڧ.{gN{\+W|ߤwygĈ64}crZ鏥]p2~¥ > f;`uVȍ49߸[qݲriE\ZiAƍk]挷L/T FtO]/>4ڶm 1^4;68F.o LNKKcI T@6thB{C7o< %}ST FtO]OտHNNִ!xHhQ锸:p|)eƑ.JDA b`q CssSB<sFI~gexzDdQL ~ ]f|`Ђj˿pssq[Nӆؿ 3Z92gQxռY?0L7|RWژnӸEEf2n!*Nnģ̎lE+LN}Fߍk%҆ZnS$ޏK955FhwR"Uʭ[tTܿ?7&Z^ns3˹c(ct=g+S_ 6z̘1ֆUtmǛH8}x WR ك0)FI/ךTl UCyy1UE R%?ȉ_'&ijj3JLPq|ވ#MHiCCecIy3,r¿ϣW*l2'<ҿ(-[KSbj-y|ݛh6Qi#GL0!""šy:6$5v]jjbꅳSO7~]5ABCTD͙>8E&bKKM挟j܂b kjs]{x_`LoTl UbKvMMoqv\1KgsAK06ؐ?nlkk;xAajtlkqƖ![ZhGE ͭ3M7)AMM&nssVuU|y%.,(4ȞŴiƏ Cx._ Mhx#-8D_aG"-9}܈O$ɛh_Fw9H1_ItpKxIr_eQz0),HJy@uh3#vjo޿C9?)%#6rFSj ̨uEL+?5*.%iS*q$gſjOQ#o4M 0L ťÅn6H6ٿ\T__AT hP^R(@#/~ZIN 867_s&OBu5ÿ@OQv/Ǝ|ѣGw_ţ%:8%$[CտXF64L i3BV(f/ JXnpar / 3vDeHz>x& P !u,UNu /пPr-2[Z[+*._N(/A1=D,)j S_ft( >Ŏ\㠛I(}G^._|fMiCCe*MMɋį|_ W_@V%:8%$[CbqA1Niq}}skA22.3~wI-&Ŏ{ܿ ++ڌ( qD/r?5!aׯJ.\<-+{Ԏ/YeuJtpKxI}#ڧ.UNu /oDW*.%j_@V%:8%$]S ȪDd7}YT FtO]/ ^@߈ dUS]K2>uJtpKxI}#ڧ.UNu /oDW*.%j_@V%:8%$]S ȪDd7}YT FtO]/FbŊ޲=A]T FtO]/fϞ}yiɒ%G!4v<4+AAA.{~;H ŦLgkC7&%1w9ÇYnuKf/XvݺU.Ί5g/pY*ZmZt ~`*zƍk](]Vjo   v߿X`A_Yf9;[/% =Ǐ1eot"uD _ fwC7vAD'AAAŤI%k{?L&dg3{Ι3dY3g0wHD`.f -WA. xVlcD^@*ʥOQ (`>C]>o*]/e&IF_de ic-|=&ɹ.~y)kj46-!%1.(N@1\<Y岔Pnһ9PLI~&lyXyy?Y /cOIbmiI1"/L!ku M- 7s/޿sTO_XF/< ?[~S>|\n\j ]Wl_5v _OpQECB|k@l ws⣏>Ԗ8׏nNa 凯 X҂\mw=|ǁRSvNs4yRlGJSC' nN_xxxdgg(yFF$Wpqsuu{paHhr M}j;q:]9/7>L@1/~%**/$w\R:/4b1ͨK@14`,+MWݜ(BU!OJ@L4ݜ(/I@A~Mz7' hһ9P_@ nNФws &4ݜ(/I@A~Mz7' hһ9P_@ nNФws &4ݜ(/I@A~Mz7' hһ9P_@ nNФwsNTwwwSSݻwm];::ݻ'E~aԾ$O/{WWb>%{{{g38 1 IDATH鸷)| hһ9\GGǦMBBB߿/nݼyuϦ&qe bNPo &$$Z[[Zܽ{w^^ɤ>u;w:.+?/^TݻXιrʨawܙl__bERRR~~~FFFddKS^3F|rFHN m߾j/֭['GݺuHfffMMP/ġCk544ȇ1W^MMM)Z_8 b…Ֆ_q p5 &9-5w8d=u5U@|B/vtFg@H!|8<<\rD1Ζ-[䴚_iiik֬!1b C׫Oիv~90~_W]a6_HoUW_}5@"t-(1Bhr e^_x,fS1(e[,5&5szܹ.H_QݜO/==}͚5Aܽ{2 ڿ@c`q0f(C sܹKʽΝ;lTTT}}/_8bwް?~\/\=L̩K$G/!8 ü1KuOiy%`[STY]]i/|ȃwEp&5R[B~1&sLP%x8d4Ps\mX9_B\^̖_X Ͽ_NR4XnNSxεkN>Q&Q]l_Zn4nc;"9XXx =(OFs ̶pţݜ(>/\l`T;/ 7T۫>ijthsl3KLcӻ9PLr~!,]T&>>>o׬YSYi;e^uF)j.3dm3M@1pjTSA@1%믯X")))???###22Zz7'/ л9P_@ nNФws &sta/I.*TPge:l*TPB4L+Фws &4ݜ(/I@A~Mz7' hһ9P_@ nNФws &4ݜ(/I@A~Mz7' hһ9P_@ nNФws &4ݜR[[;44V&FALLo.L)sB߿V{qJ~~^l6[qG^QIii_rTˤo%A ֦V֯_<Ϟ^~Gmje0siod./ u{+9!j~144TQQ!Brss;::ģGʊ8D9tPmmm۲tӆu8p %%E8/_޻wܸqCVϞ=gϞӧO߻wOŎ+--C|T a|nl<7V"|]<|CC !Z/ 4$4Wֽ||\p=B rL6>>:zΔ5T-[;vL^DQPL啖ʙٳsNQݽ{.`{ůC(נ41T~-J06hz^szDLՔ!\,eR&(5U>x. ѪsG8 Oj uwxlLWݜ"󋡡!oowW_}k.1Q\\*/^|wĜ o 8??F]64f0 \j~s .ÇgddXEll,vuuEFF-[ ;ڸq#wxS_/xG 1"*5{6t-ViR H[+ʮ>^n΃x ODmRCE/޶>Yl6)/{Tj_0Us쫞k7LQ[kQVe[>nj/Z7m$&֬Ys1YϿuVCCòeԙM&Slӊ/`B&2 Uo"-b6 aڵk <0My~1ҪU1(Ep=aVo6oi(4[j]y80L5_ 8,b["^pndp^Ѽ`.ɑm̤wsN/>m61?A!֭;rrӇ_=CBBɓ' |JL[Eyy_'b͐h-(kP/B kțhIS~ _#Upa$j=m χ'&#s]K5$'y sBG.\(/\}ŋO8!{zz V/---z 瓚_7nذaCDD|XPPP^^.!VByiY}Y1UŊ+\]]KJJƟ_|DYmQ8&OAP/,>!A.r{Wѻ9PL~~qQF(_[ÖEbql{_0Pe([Ŵ-$qc &|lOr-smN[QS"szfC=lKlIFvm! u+F%yx_hһ9PL~~mm/;D#?d.BCSL:Jc7[̅ʃpxWӾHyɑtlz7'{ rFn Fp2P 1YjLƴ/2wwpvLHi!>x8700PWWV0ENNNݻwNB #R eB1'MlKɡݜ)++w*vttǏS۱cl0o\Q ˨:[@r1Xh~pFл9իWO|qr5"0ݾ}{Ϟ=WbOOO^^^sss{{{aaaEEŋ/_w^ooEGGÇxjӦMuuunڱcٳgu|3x)))_bRoyB 5pMs僇 sʉaNФwsNdqFֶsά,5GG$!!a߾}DHNNfsvv\pĉD18Cq$# .yΝ;'e۶mL!~111rZL|;t}}؟oLdj2Exxb_hwĘWN88sB}o&33;00pϞ=|~xZZڱcǒDmٲe?:;00PUU%=yŋ O<(+Z`urrr,ϟzrq"~(ڵ+55UL\zUl@AAݻ/Ν;yyyj:g޺uK>+!qqqbq͔o'g٦#n qwwo~XZZ*3g8y޽RjiiYx0,,L˗755M=* j~. 9CشiSPPw|ݻ[nt;w<|pVVVnn͛_}ڵkeۛ7opBkk?&&;σ/^]#!'q"z7焸wvvi???O!""l6`zK|q||;wa}Ѿ}VСC!!!Vbǎ~%~l٢V#%%モdӦM.Aq֭Weddo˗/GFF>0sMf~g9!txxloݻw?Yw8Ąc~!_*"3bt nX>}8y@ ?wﯬHgc`2'/^;xɓvVO8?q?}[gp}/N5$Cq FUҧ_Y[ܱZV2gаo|WY] IDAT,5뭀iI[Va6$&=75i+V V͢ iiIQ~o.\8C@5~9n___WWo~d1*~]V{I;[9/ϚR~O]ԃjC˃ݧ}>R?XTo۠϶}6`@}TuS;g0oۢ FcLgnZ|߾}b\qꫯΝ??SRRϟ?h__.ƣE.9ut sf86BW3-JZs^Kٳg?jao~VvXlo_Ƿۖ:;4E=xe_lCu7\m_S\*t۷Ʈ32/vttx~;0ɼO={A_|~z񰮮ocǎٳg'$$9f˯cggRT7wN@lDοSyd~ҬZ}w%!E>ub~qWb&K^NnQqQ^R+s^~P8mEo- #Ëg O^B~6&3:O=uTkk۷LsVTTh}ra NzXi/H4 vɒrSmK_ytL2]}־E}Nʨ}'RܷvXWt0{Hx `ژB?Аmܹsrr^x!88XLWUU5ЛKܗ.q绋^, (Ɯ/͚g;mQV1w /^!L_>CGK/߿7 W_5>9Kl\ٿ~EIVk_m4&ݜ(*iݺu===qqqSGrFt\>xז<x7~No.ߒ:nNO/ws &s&iii}[, hһ9'N)?..1twǏ;V'>`ee3gԊ߿?%%e׮]Z m߾JMkّkzzz۷cǎL466o޼9rgϦgee]tIVn߾k|c &s^z'IW;<+b&&N>-'F%vqk{VgvԩݻwˑkkkhΝSV A|rmmm˖-X,O(((8vؚ5kEE|[jվ}^4bbbXX ײqƠ h~Al:;Y u14)..3%%ѣ{˖-b7"ɣA8ɑvuuEDDq-R=Te"l޼U޽k6]v}wbB_.W\IMMbOXRRrҥC{H񎉷+22<ZľW pnLϧ=nmФws>'O~g`,^x䜧N׉nnnbڟ|ɽ{c?PTaɂ dQXppb u"=Psoܸq2^7I& CGG!عs 8G_V#;& wܑaTSSd9NEHHXPbcc=Hk׮tvv:=%Vq[ZK{侾>SRR^X1͉rرc6lӍ2/I朐?ǏÒ5k|aٲe ս;ˇ-X@|Q7rsso߮>ꫯ*++B|dSNNk0Yd~acgddXPyվشi0L~\Zw TTT޽{ dzZ6ߔTTT$v>c… aaaNW޺uKNzxΛo`NNx֪$Rϟʒb-2/I木{|p#Z[[?#yűc/Pu/Nx,\P}4j~!C??#GXX,_Ӗ_=@BBɓ'հ@LrGVRRRā8{d3#ճ!ĎK\e|=:%==]2)-yyyű%#o{ȉ' B{BIII# y!T!N/I|rp/~.YDc{'Xzy@DDĨۻZMlٲsY_>j~qUV\C.N~j~!ܸqcÆ j"YPP nAcxyje˖by{֎:S|`2jjj;nܸQ^&0Nwk),,tSG]vԵ1-11֭[GuDLGooxKR\" ˒،;v={VLˋk۷ow:BBo#x_@N8bŊ@lYܶm۲e聁g}ٳgq~1]__dɒ z{{1 .&&FzuqM %U3 `Fp/[w~ff͛ C~~z-Ɂ1XJM߿>Um7FGG?rYǵX{ֆGw椤$P;k׮9 ׯ_W\IMMuJldiix)w*Z'foxM&7m6 hһ9']k4'c1Q\\~x;#>F^tipp?w-]fECp`0tttX;w^pANMFF8JRRR2Ȏ;wd!Ԉ7,//СC\)  bQQQll{ʵk׊y:;;G)۠r[j,vW^uD9}ر 6FxJ\Ο?%ŀc 9D~Mz7焸j~.Oӟsu%$$TUU y{{wk֬kLj~!vb/qI5,Qw||~+q-wR3Ӣ"r*++/cYCF>%//b;YYY rӹ3III#r9-I n 5(++  DQ|w߼y_~mL/7nlذ!""B>,((Gbg"8>-[vԑTSScƍ9ϝ;tKwrĨˎ1;=&&&޺ukppѣi5W~+W)8u͊m۱cٳgFy͈xd~bhѢEzvիGj9mXܚ6n jݺurZaľe!??_8p@#Pq/G2TdwyDDD8~i[[SG ۣkۼuVSV{ 17&&F̐$UOHNNv)#FlIISrTbbbzzzaa/_6 4ݜSE| ς6}}}t{{{\\ܓ-;65j?]h#1ލ! g@;m`%nNx~ݸq>SnNФws &4ݜ(/I@A~Mz7' hһ9P_@ nNФws &4ݜ(/I@A~Mz7' hһ9P_@ nNФwsqZB ǭLmB *TPinNФws &4ݜ(/I@A~Mz7' hһ9P_@ nNФws &4ݜ(/I@A~Mz7' hһ9P_@ nNФws &sBjkk?3gn߾-łb7nL4ݜ~qظdɒ޹sGLݻwOʖĜ9sfR%''WUUhsrr?>88(Sx `F"&sB+Gr">>~{\x166m۶={ɮMxÇ߹s͛)))24 M94ݜҒĉh$//OLf~100.G۷O٩`???p1G5+V񫫫{w,X 0455mڴI-[Ȥ;wlذ⯑]v9)f`  IDAT?CBB.]*rf=((S퍝_VZ_?&f1… ŖT͛7cccĞA -%%%))I)Zˣł(*KUϝ;Nե A/IkPݻwﱾT1 =#W:n Ӑ< р#vD~Mz7t'TxXEE& hһ9P_@ nNФws &4ݜ(/I@A~Mz7' hһ9P_@ nNФws &4ݜ(/I@A~Mz7' hһ9P_@9fi *T2 *TPBeW hһ9P_@ nNФws &4ݜ(/I@A~Mz7' hһ9P_@ nNФws &4ݜ(/I@A~Mz7' hһ9P_@ nNݽ{ҥKzon < _|m$ϋ0~ ///--b軅 hһ9'$::myV^=Ƴ-o 9ӓ^XX(~e}۶mgϞm{~n'w!LY9u8رcGccx888陞^^^.*---555߷_TUUuvvى鸸}GUGTw׻Ͻgw}gݪru^VEA"E  ޻bJ !Hh)QB()O2o7y C ~= g~so&~8eZáF>gΜ۷HƍRHWe###UKaaaXX،3V^}ĉݻ:T6833+2Μ93qD5.#X  29k.!!M6;v숍vܹƍWX9rp$%%9]DPPPttt~֬Y62iҤ(y8sÇGFF1bƌN׉:t6ml,P6_ũܹSR|ɂ EFdkE3o{{U+W0`uEǎgUT_3FKӹsbk׮ȼ{VdffǎׯjT_~ehhuF})ScVZz˗O4iϞ=f A~[;gplR읔ԡCW~o߾iӦׯw_|RExxm۶& ݺuԩ4Zz(BJKKΝ3Pl}( 29kzE6mFDDyq~q̙KGGG_dj<>>^qyhhرcո PT~ѫWÇ_H T劒ˠ  3Ū4n8+LwZݻ0رc͛WVVV\\ѣgϞ;wY#00ɓ7zA~[;gm9}h BuMQPPP \p:?oUV *7FmZ4uVg_ ~]G~\es^;znz+*F~[;'nesF~[;'nesF~[;'nesF~[;'nesF~[;'nesF~[;'nesF~[;'nesF~[;'nesF~[;gӭ -B4mZhZhi- l_ l_ l_ l_ l_ l_ l_ l_ l_ l_ ByyyPPP\\ _ ֭['M{np]#-ӝVVZtŋPiLLLѣG>}6mڤRWҽ{ p?22RX())1csM~`l[oڵKO Je8 29k孷U/^lBOܣG$5>rp+ЧȔӕ_tU_~j\ ;wOWLBB8qes[oURRu~`5"Gj|Ĉ: TIII2ӕ_|z2x^^+m۶ѣG_p̛7O>ף]:|p}^lRe~ݯ_?ٳg_V~ѷo²3g.X_~wN;epǞ6oiz+kesJ2dG-]{bb۷СCϞ=^2,>SXzoݽ{;_=ppqes^)ŗ{(Ā/\Peee2c^^m%LwD_es6 F1p"-ӝ7 29p#-ӝ7 29p#-ӝ7 29p#-ӝ7 29p#-ӝ7 29p#-ӝ7 29p#-ӝ7 29p#-ӝ7 29p#-ӝjqZhr[6B -B -4LwN/`tLwN/`tLwN/`tLwN/`tLwN/`tLwN/`tLwN/`tLwN/`tLwN/`tLwN/`tW\yip#-ӝ ;~ԩS'Mjz[wesJyyyHHȴi͛4???((HZ6lp8dR,2͊+OgϞs.[СCfv!;w8qT#\d\&MY`L##vr߿?$$DfppB /`t笹v薴/B?۪UD+3fj?vX~xddÝeʔ)x ! LwΚO-}~8x-[8]Exxj l۶mOnݺuILҡC+WNh(/ 29kܹs~~~֖u֍9R?ѣŀUc`` <Ix6@E~_Y+8~ߩSabbbVrssR;2u ??_={.]0! -ӝV8о}Ν;wA7dǎ~a׮]tfa/DHHȻ+y9]e믿/7%p h/`tyyy֖ .\rbk> `l_ l_ l_ l_ l_ l_ l_ l_ l_ lUKOO+B -ZhZh4(esF~[;'nesF~[;'nesF~[;'nesF~[;'nesF~[;'nesF~[;'nesF~[;'nesF~[;'nesF~[;'nessq[uԩSn_iƎ;Fiz+4 7o>{lRRݻ!!!Ou9}-[lTTҥKevYff{+ߊU>9rtK``-[Ο?ݸq4._|ڵ Xdɜ9s֬Ys}UmF~@X^&ɑ2~_/{ZڥWK\XX(6v풇RNppÇ/G:]M{I...N@RRLkoYT^fU~!%***//OM&!ee##[n g;vLQ\\+^ޗ-JQQСC(ӕ_Wj;]![_jyΝ;=ޯٳgٳʷ yO977W֛&+R9lz%&2 1 29keƌ{GKK.̐ysS??ex;v$&9sΗ_R._<>>^dUQF-YDN8!)Sd#Gl߾]MPKeN:UG ut@f/Cךe]U{I)._hR)edij2i 9zN8lذ nʼjGt|#KuKnXvJ< &&9//U_ΫWz RT_2DF<}͞=zڈ6˫$oqqq*ɫpBly)%u7 -ӝvکUUVɈl2PXb22`+\M)_P9s/fB&MvHѣGHBJ{ {Rq)ΥPG^^2uzxYWqquMN8QUl>^Zm/T,b[p8d{>G###.]*z}Mvڰ ,ZH]B8^ȗ…56lJR_ywwPeFy%3۬^=z={YYYj#FO7ml5駟Z[ $@f۶mOoVD?(z-u1eݺuƫ9ѣSN]d|É':ҨQT;dkk׮*R)YȲe<8ydUt@&uiyyy~/NX^^.8p/y|UΙ3GŋZԌhYŒ3ԑ R"(Rj 먭Ve~ylՓ헷[Oo #o!-ӝV>sR_Osy8h 5$˗/M_BÇw|DDDH.R3S!+8H.njπU5 1iҤ\uOݨӁYڲeTEZ,ų>>B6BG k߿/>H-&&f͚5 .ky8}/橯h},j@߹cǎ)S_94*ɪ=aH~E~[;gHо}Ν;wСCNץ~ml^^kvZ5w?\hḓ-)))'NZ9s3(u޼yҢP[eRiKa/$''٭[YpZuU %:b{…%" ''GSSSZziiiv_lڴiL:՗BBeNYl]dzվN_u"ٳgeEFʾXo)b/dQsNy&L`=}#W^i.26_2x}#-ӝI$)|uKR+ErcdKoqYP/r"C/ ;XɌ>NVs|D~[;'?Le -ӝ[\/`tLwN/`tLwN/`tLwNcp IDAT/`tLwN/`tLwN/`tLwN/`tLwN/`tLwN/`tZzzu\Zhܖ B -B - A!-ӝ7 29p#-ӝ7 29p#-ӝ7 29p#-ӝ7 29pkT^wBe\,--u8DN&?DP?]K/jҢ"Y(:˓G={Ql6vضm&&&yMWP@B 2,dO>kڴ7efzXsȔN򋆡N{ZIKKڵskJm%"WuvӕYCtȳAAA.*5iD~6n׿{7q;v䘮QL +Ra.|Up8ԑ%%%2^VVM7pM7thU?P'dd߾}onƍ7kL~x*ȸ馛:PM65]Bvb Ej Bg:hҤ4ʈ:(C=EQ.;Z1k"WuyT}Ǐꩧt0 u>DHJ1Oӕ;*vLbUE~ouuJ:Be:BU'QG^HcU0Q+wTm.|J)tHb RRRbԅ>D)e 6qW5Ҽ?l<@?u<#xy|@3JϬjX⛯vN@.|Hq͋ʫozUaPjYy6m4j[n!z]ɎWs[=$ 5FzH./ҁ4 kvBg!NWH'FUZO*Ҳcǎ_5>Nxy?lsC_BZyA~qO,79@a#Tj,C8Y(4tSÆ SWZ=Ey- `Pz //` "WJ( .\عs.]>>}̝;711Q=[ZZÎp r7L~qCF~P`st+G1NׁQQQ=~3uӛnI~6k':u:XYyEi/^Fz%y/P4 4<_5iubȡC^xF4nX~I&;?~Lgr-_\^>CF~P`stFsZERZZZ\\||qUOѸR֭׮]{tC ntQeQj.PU,B~ѠU_04 i ;'h Lysjrr /dc%tG.++ѣ)6mBEjDC5_4( CF~P`stYRRҦM1Ts2HƍUNqΟ?_?O3]/b}0LW`sVF~%_0T?0]wz7p.*Ű0S7tS^6o,3MZ, 8b\#?}'w}/ѓ:=n.&ҍӟ$-օkk44&;=CF~P`st+[uŊjf͚0??}YjI&:gx㍪׿jW~w[KC=$ӓ 8PZd_-Z,\PϵiӦ{NW*b(8m4YfI]w%2v:3-a#`hC.+xtv}t ~0 vN_յ^)W۶m[W[bm~q`U`ĩRj~_~N^Br Y[;vN8K/i.7?~gy۶m<0a_^f̘"88s{j+jȑ#,zE7M f4-abs.>u{˷~c |/*mаotm^}?q=?wȋ#C5:p%lgbOjR@$[?nqSݽw5x0j^}^^ƣBo )ĵ vNO?O=ܰaCNxG-O?>**jϞ=gVOIСCF8|͛̑W_}u…um]v;wn f|l-w#<{V-񅬱[n5瞓nժUW2dH-vZkK~/{/^`;$:Gy$22rРAu^=!!fz3U].S }} q뭷@" Xd'MMLn˛Leb}U~!X}~!_L2>f̘*|yn5kt~ᄈBwƍOr5'/cr/޻{׾fAW7~zYuƂ”T0&'|E{~<{bb} 1|Em۶B?v ^n~lٲ./V\)㯽J﬌*BBB>3(K6ltΪɓ'r3+Jb׮]50 K^~;k6ˈjq?["Rːd ux\T)_O9ttRsRueRZO:6lTbOήYh*O/_! kuk )e:PG~q2qN.y)d;eĘ g~X1gNIcE~QVvb$NN";vY"$Y$v?Ffoc8r\ERrLJoe̋x@ w~JL<3ўKctYY\+Nx1sniN;ɽʋ&ۯߑDy}\4{ێ*_k#ٕ"Cڹs%WC~qqFNIe~!u ٵkc+j|keBEEcrÇFRˏ&:]<\<166<#C>1g._6;&3~!Qm<{ܒQvCTxQoa];ebΜi%yczYlՖ'dIb#3O}J^V$W?29+deKd-(?ի / {xȑ22dȐ &6--駟=z1c ٳG~!uԩS/({Hǎcbbÿy(Ŷ-ƍ;rHVt颎XfީS'G:thDDա 20 .I1,|ol߾ڲ`>}qYG}RY̧~_H)$&5cgϞY3gN6mddݺuR1۷O{"{$%lv@@c=&ǏWǼxO/_~L~!eƴk׮k׮ӦMnK{$tIK;v\yǥE&AV' `ŪʋL s-]TS垪=N"# jiO ٞ3fkٞ={2>ҁ_EQQ /=SE^^7u>D]šSOP]EZn-ڼy~+yQlҤ'9 ׿~s O>Qted֭aaa{t,_eW /֮]+;o 01y.^,9)hg ~*WRv2?tXCA|.u bDtQj]$;U'ʻ1uj{ Sdtau£ICoXEIǑ]K.>q:MJKe 2~l( kxu*8K~Y`ex!@!ռ9;#+";_ ck5߲%1tҙ3s""fΞcGm UuK_eG4'C N.((r8vgfZ{EX>'J~}$ϝs~ (!*32e[{Dt*wDE6+ޗŮ=[TT?$'W )CN/@RdW_}URBCCeD~Æ ~~~/ԇСCϗ5TR-qu\SO=+hѢ&MR!TG}TV- faaԟj2Y:|@)??%KȀ-Z$sk2(d殣-rBQ5&={~1G~!ڸqd$55:ǖ^s))4R=?|\\ڣyd< /hnս饗RS/ɓ' 7B&7UVW#ou2)YxR~ڵTŚ5kd9R͙3G^d"<+ڶ={yyw8RêIʇ~hxO\R5+D4h]~!ۣBnݺ]{Wbbb{sOBde<))Nb5KKKR:BelCEtPYٳg_|ݻgCfկ~TKb. ѓ9RZUVɸ=z8qG~f(ƈ#d\z{E֭\^Deu?l/"RvTj_TҹQ;7j>@A삣I~8ZW Z*$j_DWđu syoR%YY*gQ{6) {%Ӝ]Kd]jvUQVvf՚*<_V\͗b₂fFFgRR-<$ocD"4t_ȰqG]gϮԔZ?N+M~Mj:,BEcd9hvK1olX/#qϫY3 4g U+3> x˳s/ uF U))j ۠Zzj}Z>3/xǓa߾}Νۯ_NM)!C.Y=%u,D珬\R.!>+Ձ]"""ƍ'f͒8t m6qT&]t巢YCwV-)=͛7j\ //^uY* Fym[h!{e"e__xL/cySOInx???yy{!oTd2iLV'{|rY,Ҩ !oz;o.5cZZ6}E@@]M6R CBSy*׿ұS.WGG}'MRduKw護޺N Yx1TPPC*Ǝ[>?6qQc{{_xuU5}ǎT'Kx۔T^+=ܣZ֭['IoVCv<*7qWIwxy]2-3ܶã=ᅔ+69;v  泷nWI!]r*3Z[ 5T}j|zcU4;bR;r*6c%aANnEY\\Mpd̜u v{ְ@]BzzYjh'l}d-G +w!R)_8pPX}~yeOe#ń=;e+WذῦMB̒?N縘i:,SX贃oH=_zr{ O](){bҁذ'ezćϝSq…[B^tH"V@cALkST;6nb\(U^`ɚ_Hm !m/jsK+\yG4gg~R5t+xoƚ5k>rL&/3{*5> KSXBkb۶m[n pUBz_DRRz.wj/R{ST~ѦMٗ`T~!e跣uҒfze˖I(#҅~˳:fO/k+[{СGy.x'322t?dա"=zTVZ\uJJJ!+WlԨO]JZlO[tJOQ!K(((ҝH0 ǃ]+>~xiM8ptkOzꡇ^ZVZէO9sx+E>UĚ_̚5KҮ];+Ld= 7ߔ%]2(͓ ~jϪ/>Bݬ(6xֲzMxvͺsN[6tD58<򋥗_pfu1"/ 񨺼PHW}_5/ʋKQ;+ ɍحsQJ6GXB·ny6lRyN,}.ݻ7$!ɓa$UGs=Nyc3\ܛuZ<{L5'_ȼѧOKڷW~F:=ˎr=ba|TuO򐊣})t]nbu ]>U`+Gjcǎ`2e/MIIQR3%{1)S?uꔾ@C5EsWe+Eǧ~RܪMQj?pԥ?ա.)be/:wnk]!lܸQv瞓]娋2)m+[jGIDATRj"Uϯ YL<9$$K.:K5+S'Gd>@]IV֭ūzA{=,V˸/yDm/gydb7ozGBe)v [^}TuHSazwqGfnvhaرj?::Eppj{ cuqYuYhJ1 #_z#g/4q_jak]2t(wTƊ+_p\ !zahau(fn#KKOL\qˡ#JNe|e%g_Xe&w3۳WUvPPqH &*/BW,LJ.+*:ܺmsi0䤩+Px XRq8=C?̘5W+zGxɺWI^4 D/j_[k=\n~0>r}CSؗUDENawfdX+|judgeRq/*IU7DGG7wU+VHNNR/ϖ#-eknݺG}4..NV~b_z%F)=e4_˫u~!ƍe9*iӦMXXt+mۤoZB Qy7B)/孷*f͚Yo醌\C { YܹsTRL\'ﬞlg?O5u`풡CLW:PSVaB)_//)^'ԂEdžef|bD>d<1ar''N9)05M]"g~X-qzk3=N,SZ]/.^Gޡ.nPsH>KYNѕ3AZdQU,#qԁCbz̀յ*CiـG^gޞP 3̓9crC]pE ]g珏'Jj<1;{C I<}ӆ͗!̨=!?ZK{0']w WP4&NzsӦܸaְgLA ;'\9VF~QL8_U_qjyyřׯ/&M4mTe *}?ZjӟTa=/ &;=/<~23vE.! +7/!E`s> hJJJRSSx/KZ{V_h⡇/ P%hux|zŽWyiǬK85dI% u;/!͗azxor ؿZ vN@*.WrQZZڣGƍ=g_/~!#O?tffΟ?;4mT꒟" Y5^s˯o֮=׽{zY/ҡ i>S&ML:saWj ӧ_\ E*pݻ[oUY:JB!wujO~򓈈Pש<RA Y5 WP4_r 5 vN@.|ը0.թ 1*zt#Fo߾'?qZ:G ;gռ?l _BC E*9}tppO-ŗC0LW`sVF~%_0T?0]Qn?Ww(q cwС*PuP+EasVF~%_0T?Vz%_5V3/B^]wON'ECfsVöKH{hX j4<_5[Uq~!sPyz{A~q529a_04!h~) v vN@.|TDԀJ+'W)ӝjч`_\LwΪh5tFƍ7fW. lڴ)t笚6\SLyj[u⠏A~a=vC򋫗Y5m.|fͬ)7߬ȸ,*hr% !zU3k"Wn[5qpQt笚6\SLyE:#,tEXtSoftwareYandex.Disk (http://disk.yandex.ru)\ IENDB`django-uwsgi-0.2.2/docs/screenshots/screenshot3.png0000644000076600000240000022404513332714254023352 0ustar MechanisMstaff00000000000000PNG  IHDR $ IDATx pO:*n^% dI "(Ȏ( "(" [&'@ Ⱦ}' a03=ӓ陞tLz}<C'/z6B!տI] E/λv:yW%}KB!кExx@m/8qWB!Bhl^^.B!BhJ^^.B!BhJ^^.B!BhJ^^.B!BhJ^^.B!BhJ^^.B!BhJ^^.B!BhJ^^.B!BhJ^^.B!BhJ^^.B!BhJ^^.B!BhJ^^.B!BhJ^^.B!BhJ^^.B!BhJ^^.B!BhJ^^.-;;;777[[[άczzz?F}B!BS"ulawwwvHakkprrp?EB!Д"H] ['N|?&M?~{k8/ B!Eْ?~js>Q]6B!BS"ulI;V={@x!B!4//R!|XsB!BhJ^臃~Rq6DvvvRﬡ B!RRsĈ?aÆ5Y dS'''N )'L0ydtKb !BiEx *҆ 1pر={H"#ult:pssq9:::;;0ydZjԗ@m, B!BS#F-~嗧OZY~!ult4BWK{{{H,qTB!BSB|70 >ޙ3gR:rȿLxAlܸQ d~*}8b 6|O_'NL !B)ExEKr}̙Oinn2e!RȢ4qD} |NOO0_xץ=/ B!p"—\}B!R⠺ˋ+w= ZDk B!КE?"$`5kԇ"R"0egg^L4ޞZ7Rxxx0_xA˪ _{B!B ߩ5/d|\۷O{Zw>,шuiYl,M8ݝL899qvT]\\oQ1^모Ƚ)hw(7JB!l^HСC5&#GԞ\twwkyGz 3%--M d?~b`L<3)& &8::;ݝ=KPf }=]j 85_oR9?cg ހ\Krj0M#tkB{ }f>z4- ^Mjdz@?r3C-xs;[44dKB +##^>BԌ=ﲋk/zzz/eJ}@" u܎^qlE8ɟ^!( Sw=x-ɟU?VVV?^c2 dT,8×3:|ÑX^JJRk00ұCoPIѩuZƹ;{z09>[*SjM'5|%{NdO7x/;dcESWËr3 /ܹR]Mjosr^^hiywthu-aZM͚޾9 >c$m#\xx1ϷQs,)e‹"#[}྾ 5":3BGcȑZ “[0EgK/.E@cf„ fܸq666.../pwwWĉ9<==-Ǝڊɟ 1qߵso oei4ȷؙk T-")$]]nXn gQ!'iWY^kDO(j&ZķQ:"gsD+iՅӔJs#WE/Lg[HxFU /.s=Q4f7 轪17iCO8'h+?_v!Bh"0Tj_&W._f', dptt <==9~lfĉ899q7nj3{ɓu&͛EEjJ"#ގ(+k_OKZZOU@e۵Tv2>T9g.;-~? 'E:zzh뫏"lKOd}soҞ3;۫Dv}gU)5 ~4$AVv*wv̺G*h*/KV^XU^lMc_~aLoeL-Ӳ#\5Vȑ;whAӲ-1AȱZ+?Zv^hw2X>U}^e9A[yJkm82'(vWefA&𢴥%BMC!ТExa"^x1sLK.ǎը:.E3F) @p6:lmm]]]H& Պvx1eCW޼GVVoo/Tqoı;TxUT*OWVRyO+UtͽǏ`{+grTQd$mkyxL4ſXɔju2iz̸,,݌*OZ+B=NեYgGOϭB&z.jny.'QTSFY{u*[wyAڝI bkbͥ :ޥ!; >EEA%2^r!P4*]A+yV* /jjkrګ.oe"F/qCg'突~ Vz 𧃢s-^Sf4{ޫtKBBhq"jpG b]p$|oзiiWHx)>77 *i v%%ᥥ&FۅBDxa t&?ɓ'S~ttt2eʜ9sΝ;//^,17nK<xyy rBf &ЛGcAqvvAR}^ljW*<>.f45Q:ʩ^&Xf&Uw.O`#'bT=mAgSf6եҒǏՉ~2VxtRUJfմ3/zxA(^t{9:vzi樕qB~8Im.y̌0ʹe"st_ea_;==KB3n5rۈ /74/W1~s#v57{p!/LaÄY~*ظq$&Rzw >\DŽ t^aep:a^Kw7GxѡO%--2㕇yױ3|i=jHWMoluj""SrԲŗIO Öxu>3zx_YYWb UiKY*{> "\}HVѕ鼃g!+yyXȔy@ҳĩ+ZN孭sXxQE\eEyC۰ 6R^fՏ rߩ,ߓ> B-KFG.TWFFFTTԇ%&Rz#$`J^075ʋETp2=ɴ4Vt[#^MMYo{1;4GE MlNeËrT~T/hsthNp+a2O \CJKXP-]n!.jU 7r{]6(E|8@ /JKNxC/ԣ70~wW5/`˻{{[f?& Be¸=Z" /Zq^^Pe|Šjo(&`T:PћԞiRZ‹<EBTR3'nEPV.Q乜Ʈ~v cq51=,h?Ѥ+OxZܟwyW1T J͘MOׅf~'4۴4*}m#{U}P q}}ZBHx!d2‹99Z2>9LM) zvo^E~!Z/СCE/O?T# d^N;;;ꨇT.&i*TTnjEQsSu{;XW^*,(A%5]olT-^r2bapq7~{vFh /dʿLR(0lkվVkOͤWkq^P`ӧ!07s7Nθ::^\:dz}Φ9࠲VZ'{"[[/qF^ߨ̀[]EiW=؛¾L * iiOz{7NB3~?~G^Q\C5k'Rz#$pwwk/x(EFm-7%n+/W^^r2B;;>mm>W|*\yS4/߸&/d.9|ڡ6L9HS8(zV9!^=GVSC:3(@Kw7S."^ĨS~ :;U=. SyG(+QB!JLjӧ^yȐ!F />Dѐ@!ᅗ^|gU>/5y!JxW\$pM-j /JOKo^(G-^0C{07;'BgxNhhyk+ӄW1}:жUvu51LO44֨G2m&9rwi'ntL.;T/Z5.=oj,oxq4YOEB!&^#G/rQ4.fB+.bhUDGϚק4o`Wݧ47e jeʫ0"8 /ȭ]&Dt Zm ~]q7gyy9BXi)_O޻׮)F^(Ff)SsŗI *cw8K^лOذB!^.xOY#G(ECy ،;q&LИ5xzz -%.h r4n84͚r۞j49gҋ}hswBN}7*3,cRSڛBoH^tv1!BR⤏ϡ˗u_{x /\{Axa]7!d{{{}ݠEh^^^ƍbΘ4iuDbCl8 /dN%;zz6R]?{fkbSԋ|4kmld֦hox!Qx‹AOz{5BRʾ4L9KU{U*?vth=BoOQ!RS7 OA-/U}7jHx!SAʶ6^bwrR___Qso /6\B!^@ NQ رcSLAxa8;;'Nr-qɓ';v,BOOO9㭺Zm&wMw]=yR$E /^Ru5!UboSGާ1їr^T򨩫kS|-K_CҍqLuJǞoHh{nPB%mOЛS+ZZ3IAoE!?(2R=GX *;;UUT[S $VUߍ^'}}Ա;.44dsB;,?_xAGf})NxItTzm ʬ""f8jB!6^ed bbQQQT"08///zwy"'NԲԄ 7WjXZg?7oތ-..ί=91`:%YJӔRUFha^w(?VUݽTnqVTT+~@x!QTvM)'8ikk݆ctU؊̺:d4tv21Yr)/5_9 sz2j} ߙBoRDg0TL|IK Mgg*|21 29 mv /dKlwA9ŢR&`Co`zB!1 ^P%VrAP7 15K16&8rqqQoF8q">^D,}[?gUL*VFFP<< =t:?(pml i| N IDATT9J%;outGQ36\z6.]!.=MB}a6X3'f6uu- kQV3[Nh(^CߨW^OK= *x!BW""\#"ox1l0ÇGEE!0ӫe=<;===i8IzZ$ʋ ۟h...\I%&Mľn%Y@x}ee}2.坸{{>̋./ɮB! /vx‹g9RoZ/ F%hA{1~xj Z7: MW1Vw'ƱWpP^x؅ԚJyQB!Pgx߯EI,)r^~̙mQ da!8C7nj#3= ]!|q M73`$^@!BeËǎ[r / br1zsii@EFY4^'T νl-mmm'M^oRB!BkRHxȑ'qEE[\ᅃϝ;Gki3FYZRF%4ӹ8_x⢱=_VB!Bh /.EE I. B{Р/ǎ2<*nH}#ult4 Bb}p !B36w^?q7n MOgMv` /2er1dZ|.!Bʹ͍_ںG7nюψ B!?ݾRQ+m?XRjvgÆ %>|cF5)xI9)77 8=<<^RLY|=zZ/ B!2D_|L0F2v gggwP^,(+-&1ƹug⃈pOB!Z:Ë|fVbI _r22/ x-{9silK/V`rGOPN]c·ü6rS|!ON~b}/<֜Рs A%f2sgJQ!B /b Y?ZL*+cZXyx<.h9sb$/!}ĉ:UXh?*n޼)vx1WTE!?>KMleds Oz{gg|7^@!A"2/O899V^9RbSdcȐ!/j .-I&',[[[OOO\KƍGo`;T45i /Fx^4u^0ȗ OoyMSK&xHu=?B!2=hн{^8;;2DH0|Jhq/KKI}&Bْ;v, OOO;;;\ΘnnngsB^**/o{ZCvx-9YyEFO__Ru`inN`@HiIGOMe5ݽb+Zk2jk=_pvaa_[HiIgOL|%/ B!^/*k:t0dZ'R|qܾOAQ۷doeִ{}n‹- d=ƸgůyyL@~c!)̍'SiCHK;RRB. Ѽ,; ?JZZefa‹ۅ}i"5h$*@x!B! =pppxF5FyqK :t#F K-8H] qѣGT^/1{{[ٞɖ)bROLN0H|gAkήg.|r‹9 &wvHKc zӂߤ҃ B![~8x|A^Æ 1bѣuH] q>,,L(-en02B?ؚwUٵՇg l~L^- /^{׷""\?iBeOQ!&ٕ [󸳳fAB!b*/3`## F/Lx^w~sb䅜L32܆ 1MSBsk;:E7vu2Ki JRZa\eEKEF<*>sֽΞayuuut3B!?bȑ-# F/Lx1ouͽk+8ᅷf>d>:c. VTU=Qv9A440ӵ+""{h]Of=~L+@x8$vYyQuJ '4&SNB!28 *f a}<\v1tPȲ@ ^x*UmN`!s:ER{E!s߄!B!n8u·(u#; eg@.ox!B!J /sYZsx20_^@!Be?OӜYW2T5.HG20_^@!Be*89Gn_)ދXmxuԨQR#u B!BŞ>w'?,6N=IW50b / /)G// B!2ŦcGHk!m?B 3" R|Ax!B! />?r oQG6P20_^@!Be‹_\0iee H] B!P& ñXvڿ$Rk //=ze%H] B!P& 8xKJ?oS5=AÝ#^ 6  d;v(yWEYB!B(^\:7?^|~pXͿo++Ъ ԓ 3""RlٲӧO%&&^vmǎ:?~G0}d777쮥B!B(^1I$_r(iy+/Ī ]R uXlΥΟ????~\omݵ@^@!Be p&*>*( z‹1.2deUH] m۶ݾ}oL&[t)6ӧ'&&3fpww?vٳgg(Eh =nnn4qʔ) .tvvlzU_unOB!B:Ë[y!IecEW^h^z 3o޼pLptt<}tBB¥K űclmme2|ʕϯZjϞ=aaa界;ۛ0Ν;wĉZ$>>666&m@k?ik׮mٲ\VxeZv`ͦ|NB!P& @ݳ>/(/2dȰaF1j("NY!RN.߾}gwcAܹƍxɱF8m^-[ӏ8w\zEx f_~ >ymħ B!^s@yܹ3...999)))11~0a3>P(LK.ef4k޽SbccC`x1vد*&&ܼyv\O?) =qℇ)qAx!B!!AٹaCs]]]o4i{ggg=m/]wX/ B!2@H>CՏ666W^ꫯ$%c_EFF477wuuu%3gc@xx@HaÆ 'O zD0.-[[[ݸq߿j*'''wJ|^^s@///9 u n@ @Zxa<^^.ЍR|AxFx d` t#20_^i@xx@ )Axx@ )Axx@ )Axx@ )Axx@ )Axx@ )Axx@ )Axx@ )Axx@ )^V ` /Db ^Ax0%// p^L ‹A `8/Š0SbЁ )Ax1@x  t `J^ :^Ax0%// ,ΦǏ r@ ‹A `8/0_$***8/)) UAX// ,6+ /Tskjj$9LbЁ~NÝ;ؓkVV`QQIc$';MQQѦULur%!VEE~Ha9 * QZZjw1Vx1}ꫢ֭}ű+E؍3+_0-EN]ݧ2|NIuTg=UV~¼'Vkh%t_9ֹ?5xGi(--5qxAk/p4^̘1cݟcǎw}WZ{w[]O8 s/fΜbŊiӦoh /ۏ߹3U%P970@^P `P%^̵1ѯj9}K4q`lԓ֚_?/-Z].A^yX<*{1Znmc-҆vvvNJ~η~?Ӛ5kk;y${ 0 ES{ZRρH@[[[}}}uuuPWWg]T^54, RMg|+ʍ}t /p^l۶_W{Qo߾[+4eڴix_~4.\7ر~:u*ͥUmٳdɒܹs˖-ӧOףpdΤ<~T}>ËLH^[.?˖-]||ѣGUS̙tc*Ђzx5!ittdiIaCCGWWC[۽+9mԴqQ7V@MM5(--moo(>ꟽRu,*05utWU]'p8X$ /(#~x1{swtzwy>uTΝ;Dc۶mSuo߾ WgUZ5kg9EE~Sg)Ӌ|˩!mxqiNxq:tH5e ̏fٺuݙ)&MM`seZjzcǎ%Kv'*-ÇG!ln"'>ߋ[0cf~o x;(papд^\f/BWadfe8}E"Z =01F鰓J 6߿Ŋz-iӾ "~y( UԀg H?ȢKy>6+'Լ /9 /Kj /<8nܸP:¨1 3}իWi%4Q.ݻ3[n5Q[buT#D-'&?V PVV&wB /Z;: WS1HM=qG)<ȷgLJ}W)}T"^{mO&سgs AS6lY-A^L|S_dO<VlYW^@b̙s7n5wttLqs ^j IDATȬ?U/Y[tapz:;ּk!ĂU@=7/8^MNZ^;; K/p1wu}5{={6gցdo޼Y^| g)NZ1x‹Loyǘ){3}v>N9#|=/ϖ.]JoLL̥KϟaÆs Y\Kx啘Oih\.?$ !!… 0k_oܸ\/; B"ddtuu#Jp]o455IG^p[o63Y}pf_1nxdɒXbƍS=_ËW^yѣ.9mx1e eZ>\TŎ;-wڵz{FDD0'^L6MP0Sϟmzk1aG( ?~ŋi"=Pȑ#4 4iGmËboVй{쥂EwLY_$ʋ^{M}+2c H" ӦMӹ6jYjP3/^=gy1ۋO[r *IxpB-:s9jyŋ J&M}ԩ>*W\a LJJڵkל9s}Q\f{ݳgܹs?S%@;CEbE;MII1 ‚u,h /e~7%Ҿ`:-ȷg$}^p,,YCb͚5:Ë \ݥKT-Zhf涑{DUcZ&9s&::U UЎŭ|y_Fs6oEpNC=`axoQH‹A$u3f6WWWLƙ3bȫJ4rPa`x6&Z=W^lf]~aaa#{ZËٍ/DFu5y_$ tH^ۇjI.=Yǐ"$ߦYoiiHʦVfRN6\!ȬW~|(Ҿ`:6ȷp@^ :mdر/^yڊ9`T^Pkyy3|UTf @{OڿӯyYWxq1[cGbH0h0a8p@^ : /53_[K*Odٚ8$V`@`2555:K/= 6(?`EaanJ5%8{ // /?w/(GoSSjZqDh~o0wެ@x< $yfbЁg1ѥ^k킍!=wү*U 0{I@x1@x .9/AKODPiAk`~mEysB0AxPg|@x1@x GgxQPPT_Tx97pzqS> mm?`z:{dhh$ /^A H‹A `8*5nmL4~4N?;\~փ/^A ZdRp@^ :^pxAttu},\xD{֦ۋl/+@xD/B' t$ t cHxA$UV??5 Bg_WW0(--F_!< ˏ] H= ||SI@x1@x x;(( !?M,,,T/ &V!vsDre%{REwL1 ѣG b == `5 bxxY/r?Y!feee---؜AH~aEx#v#B6XT^DfH0Rx!.| H B.bxx?5[V& ”Ag~aEZU?^";ᅁ$ H] ^~Iȩ$w\9 `嘬@=𢡽ݛH!&EwL I@xx@ ;|=z$Գ22ZcK.^pkP,aoU&0C^ d`Ë?5WTO}[ wH C ŠË/g?][ەͳcVNВ_\0V^GF B/ Ucp7L^ d`pFJ rORR#JJqR1J,Vwvv>zY~4&mhnM܇tRpqt_9٥F(Axx@ 'A*?I_ H$*RM*`P&ɅmxQڪЩf_Jg1ќ :yزF]iap-x97V~#9 VGGu"x S"u NxA1ќgOU@Lzr/\[Hxq1;[UC11\ ,bE/EۯpAB4:Us$#`PWϗ\00t5dA's 4`$` / E8{`B^^.1`h踐aۖT<BxO- ` /J௾tJFEgxQWWghmmygL 20_*::=}+?? $^*K9<)ȏ+/k54 ESSQw<j//R|Axh门h`@x3(,,0&BZ//R|Axh9X1BJ//R|Ax / qԧO0aرo ` [n۶-999<_~ڵ+))Ϛ3g `˗>|X n:j{nB,uUf:ӌӞ VTM&sbѨ‹ↆG--0ЂȐV!;/R𢭭sT /C_{ȲNӂ"b{)&8{0hO.\\UA,X`wwӧ'*yYIII񇝝ݤI\]]wAmTkt\.4N鱇GGGǸyKѕ+WX:B _A3|ͺ'9 3 ΧWU}.^` /ۍ^g/}Y170`mLZw{ kטx"**ꫯR{UȾDvx\j,uȑӧ+'N0-k4͛yfqٲe˪̟?ڼi3g^{5 +^|ƜM ,-ybpp^`/ XT_07>#^ V^xƬW GZwÆ _nݺ/gΜy۷w^K.M8QJhqBd}QRRO<`f1a:M6‹W^PKrӶΟ?Ϥ$/^İ&*4WIgߧE [◄!3&~itАv*4{4eiHȹ/iUm3#cppؘ##Qܼ-!~qHd:0mVGGD:5)**NDА"#=xvmmݓ08NSѥLKZ8:SQMr^466u:;;- Ntba?3A&bZjn@ʈ掎G59jjAأGdLK٪HxyLc_hK9G32hژ"xv :wvHU})X "T4nnn]g.^+?V"00ѣgϞMLLCCCt.zjj|I///B^ؾ}*SLa߾}[?dDz&,Ekg mmɕmeMMQXynG;MP~j^~@eFUKKiS}fTįST>=t{P[[ˮ(͠ v0?(*:Й7Ԫg?ff2m XKK?)toڟ_$&2-7Ay:YQeˢ:/IpWt*7B~m[ [VF{"*zUZB'}:Sєdְ&:*{}T{gռ7|KKmm3۔/N̂~9uuԘtڊʋi::V fxA;\9->O*UVd j^'\Ϗ_v/ZhΝIII={6;HHH ]`ʕ+qXXMh~͛cyAmiWisǏMw߱/b^Y{KIbX~]]o7*/I]SVJ_PVߦOMBR_-Nwbicw2k [Z^mhk+il|;(~zP4ϗgNJc]g, 37,K)R%R‹foOGW_a!s8=Pz=8z4#ݰPf"d>sߐ-!>٥8т4]u11ËUQ9z*0=b/TvZ~UЊfO?4ߴ.WM^v7^zWZKV}{.Kmݡ֪$Q.HYN n]lCl]f!nkooϗ\0v Y m۶;11񫯾R\zu||<&,,l֬Y7}TT;P|ڴi888XsΉX4bAPG+>w')1RHNdޡn_>}VGGf<,o8e'U />T_%'1黐綪 } ,*^<`Ɗpګޝ5qmohB-~mhHqąǥZ%j-i- mQEEŰ D @XVwȾ Ⱦ~z8$H2?W693ɜ9g^4 db͚5Vzرc6U 4ZC${J1tHP677 /*3BUt?Y½"x4̔2裏|6à-Z$HOnٳؠ ٰKΚ5g`A74Xi2Au=ܔ~A˛or'hPg@[Ueyz<} 0:444nq 6 /|sBWS㓜h<㺡B]VF_↧45KP5YHdMkyyJ^ By?P-AG`&5;G<`; \xr.[n6p_rxc=坔h3Z֦ NRnɪX7- P B=, Btav 1D)y_pzC 5ćs+&G)hOU%2gHI2z2 7ʚ7o7g;^`J Y/ZG1A?~AO?}B?mm˿~bYaZζxظ~@.XNpՉ$bxA :cK>5J,ءPgB/pSfQe ,*29!66N76t89~mmqi9=:lVCa:C6 A'KE~3clX ީׯJOEC"55zT*mMVBbYzaNun8Iaa"OCnFO_洪ctU̙̔3?CGlvZܥUaPËgz_A~~t$&2茿ww~b/LJdi<+s&yp]t"Z[[0ߐ :^ߴTzv}wwSQZ6[UR"^fBԶ,m!78KCx1l|EMOrxggMzD].4=Y`<ԑ:|52ӂu<'KEM[L޼{ jߨ yKKrHxT*ΝKŸ-Va#uM‹+q\eQd&+Va24e$; ^\xA]KnvЯ2^-ɩܙ/L݆}69"0vs(<{\ ʅ|5[v]])a@xPMݍGjϰxd5+و"^>>>EY܄@j?9,SrYfR;?0j,_a`O#c؂ \b"PN ?]&W(* |!Je‹\'אZJE?uRTKR!`Zݛ_Xg.^m֬YJ_7hxxzznݺRxViyFtvZGXXVmP=zc p&dm۶qO}^^P @Ӿ&'5H5 ]gX~0N˭Q{D*ӄKR+0\:ܰRPPwקp m67uT*,,$P* MKOK:`^3?7o/d}}}sssU*/^WD!y=,7<d1pk"8@f'Qu:U$X%3>-04~($ h*q֋RIVD#;u###"///<<|֭b ;9B+o&..aݙ8q" ,ϟ?}'ORNZx:t(((رkS^3?p7IB\)/^\{JXvؐ3Qj~O8a }!ҾpG"b:]]jH1hqdێoh`Ǿw^^?(((/e2bK]v}6' ,=vE~22usqKRRRP!grHxAJݻW\% y^Ų@%{_h6j$Gb! gHJSI?0,/"; ^&G _%%.NI^v;s8;Uy}RxZW7/ [l<M,))~ˡgIJ2 j Ig]xߪ!Гz3[[78;oF`dA6V̝R @AI&***Lz}iimG_ۚ%GIZ:#  DR7&eVsZVg-, D̝s@xcL5.u *G)x:5wv.LJ|a Bx ABxb6;mI1ޛb8f8^_f<s<| %L-ƈ.WQt[!Yf*t:~+T$\ H2 aiS!Rގ{kWQQaWL/+MbJ;_oOɶeSOJ--u~2/"; ^/@=sM)Ƣauܿc?$&gDлw/LnyV&x'%V J[vs*4ߴg>u~2/"; ^/@F8sM)y#L1ZZZE Y -Gxc5􆆆f]2цǏlY+sv H2 ?{iSt~o1t.Y*b0-*ZZ \CnB!ɖgg-_9D^(zoO.ziZ߾rw8c H2 p Ӗ[ͪ%Mg*oȯ!%%%*K[w^4hEmFEW_xS~`Ax ABx.A3w!(.e?輤Q!pp-&'rǽ~M#>襚l D^DCx7? 0 x!WЙ;bXv+t>a:<,IIOo6!znTb >`d/B0s)FT~{ pT{6g~bB週/`lqZggw^@/, \3g6jkjuu=Ca)))%ĚH zsF2s''P6'/X$t i{[geeCR֖{Jqq˅]]ӸgFc]Bxc?}SllFX3q煅@/"; ^/8s)Fˍ-ùfjYYYKKٸcxr܄'<~?`$A|Mɴw #@x|/"; ^/>sYwl,'6 uuuf|C w?]lhŵ61/_X*&["N1k`C/^ H2 pE"sW_쩥DiiUUUC/ZZZoa/nyV&}. ;::e0ZE_ >`d/5s-ٟRE/_k^?/]^^^SSS__Lݛb_ڙy ޽RMب:l/D^\5>/~.(p~2/"; ^/EqN[ns?- (R%Rhii=0vwib/(W[cF wH? #q(-h ՛7ۓ綬u=G'(, \g6rwa|\ux';ž<--T6X}}}UUUiiiee۷oچ9[ цw HRR_أGOQX$ty<<<̙K$awfAxfV-]3˚vvv<ϵH''#3CMH/D^ܯ1/͔` Ȏ}qyzzΘ1cǏIUg>v ӧO^RK.{xxυk֬ryZZڢEˣ pi.3s-)Ƣauܿc۩f GxF1kjsghËN ْiZ/ɫr~2 />ݻwGFF^~=&&&,,lږ%^R'oqWGwĉW\^zƍSL^Uv*,,t)))t'**RhV;uԽ{ZV}C˗]tyTBx.ųʙvShmJNEEň 1=:wvi6SѼ.rNxc%mxPgaRb }o19$ذaF p̙O?Ԇ #O+/U;u_b^T:]VV U:-:y$ȑ# bI 7Ζz󳳳[ӧvX /-[fRL6m߾}TR&۷o\ڼy3W?߿ƌlɬY,^v…TU;N^sՙ;j|h˶/~۷o`^ 6c#I.KË𛔛EE˿il_wGM^l߾EQQQ[l+222h͛7O>Hp_BI1[hLUS;rg WGwٲe'pŊN:aaaFlݺdիW,;;pa68rWߞp۶ml!9W&66t:9z( ;%ݡ%СCNP \~NvŞovwލ[ZZyr/^<7)ߨ?vuUsx1|.R?m׮]t?TdΜ97o4D;{K#˴\x!  Q!S(CeZ^r߾8$2@2$ɉ`^]ĸqrssm #L:t_~VϧO‹EѝӧOӳ>>>T2**jĉwܑH$nnnk׮gcbbX+V;/^b)))yyyT>/_'ORT+W dƍ=\ pUt$^YѮoW> V`V[z0ހv0^a,//UJ. %3 8/fׯ_~$o!h*M|Bco-D'\zxo 늌 2^/++2} n[K2zRd1PD&suZ->԰To܆Yuoث˅{quCe=j .|111k˛:u"ͣgu /؝sl"O.EJII$oo/Vys_֘Ho8PXGq_TV4 Q[jrӹS !?Xx^gSO~3J1#ZVxQܜ^VJMӾ)N:=ګ /^dWV `QlZK.LG$P9ɥNM<^YT3ئҏ^P0CpLrrŋG/X^(%RC*A Z]ND^RVq,nj@.^^Ph^az`:,Xvm||G}d۷[' ><hV111μ`NWgg^.]bcO>^pgXЇy駟@hhWZL‹/L~G]\Sw h:Wo7Ȫ.x[iq IDATzYqA^]]ݰ߿+\+[[oiu ?0`㒋"W /(m?ڜ#=4^?}^Jeǒu:۟&s-i &^_U\xe8@NJ6/WGwٲeqqq3gδTǎ^[JJ FGGZjӦMaaaRt֭0&& ]?lN 2̘1deem߾믿>z(صk9x -aCQVX1gi9mɓ's~r}ccǎ|ĥ!G3xݖ7cc}L<6kZɟG:;;:`HKt84(rtZ:iz\^aDtjx*D5Cx;pIxDI4 k]h/[Ru]z?'^rvѣG}PUlHFC6Wƍsss>0^}t =;uT6=篾m66 0Z./^;wPJJL@xv;#-A3݅ q+_&^YY9y<NyL& Wϱ\mTOq8"afOgCx  1HK%REXg^ ^I&_p9/_zmcܹz|>Z 12B ܺY{Bn}ue݂[׍>n\U`xo3K+z-:;;:EIIIeeemmw>=@X6E\lxtuw?M*)yVU6q^*}xM 2Y.QĪ_oDs1ظT-$ya;C{P@y1[C Ύ}݉'~7nN3 x-;>f+}8V|aqmKkjj񟣽yfY2"["I.\<sxAo⁨(\x+W8p #p͛7OnmyyKtYhqY/{&t Js[n\miWz߱3n3~ 6{…Aq׳n=86h_TE ٰaF p̙O?[G b nk|-=)*ou[jK3显U|QiQ~qqqCCC[[^NG됼{NOؗؒ"`C 駟޽;22111aaa!$ x!M9­:x'O}O=NoWRR/5hbO_vp`  x!%0C4j/r˅-p{݁+"V&O X$t 1j)"51fwǝDR pi/`@x ABx!fMMatY.OoۢdtIssP!QX$t (twcUNwzg;} [n^pwU[c0o$T8H}}?p/`@x ABxdћS$T0=}ʄ$XbO1/"; ^/̠=O }lꠃ>F˙iu7+ʸTcNWF `d/.hhn.mjj4iY[[fc3Ԯj쾮Ӷ4#]ieֶvu‹/_WX} n{,v>F}'*O/_};;;ȵ&hho}r::޶q;ʾsIeCCMf N2ilߐ-tRħݖ޽[=nim宎ݧ/{oVUёvF `d/.((+<Y 33llZ$w[mY+Qa:ߙ8>NPf(mStuu> 3LN1 r3|»^l| ͢=yZro|MwTor*=-ԴV+7wMzB㠤4 cC6Z~;eHao8w;}j%蛾%3;)‹ 45Q;ӗ٦ijs+[oB5., /5YtwOnޙ3vٚU{s {esލYӛѱs!(//wqat0)M&ӳw/z?xߋzeSM}YM[:fQ;^ز!w886wvw+}ȇ4YaǏ %b% u^EBwAm.pʖL‹B妃{ME[H wRKK%[lxz6*򴲴mYYq_v/Tߨϛ/Z"m~ś} n+6_{2E} OlQ8())[Ŀ):}@@̓:㛖8XjO5$' vjnk`xaˆN]{;5JXF{-hiQ޻SYI:zx37ԓ'VVd.+/+>[N&w0o;|Au7w]q1/_ҳo%)̆~/x)#N_!85T!5-/֤žz'--S<˯^]{ŗ/~.ʤv)n)mnR)3so&P! xËr(;G~kpŮ3Ouu={4%̫CnNyK3pg^pM6t|qrF~wN{xſoR廆N'D'J5Q}P۝Tc3鍲1ǩ4Mo\ee#A;/>fx)<2l1F_%%c:j%R#[Uiv[f [6}N>kolͥWԣXS~>X1^P{:=wh [ikڨ64kߨO"GB+ƿ):izހڂ5iԌq g~ҳ԰׶D<~c!;7?O17~6f|wX aa?zTOMлjsѶ6SO+b+JTeez^Iui}a5K zVdw`^EBwAL R1u'跖 /|Ab~FvEV˝q`xЁ E 0zx۽{'Fz|GM7{XtEuuCrۏ̸lv6W805 /fe𢮽%)[OGoFQhCH,.NJdթ :46RFkX/ЃӸ-T=Ų)[GM'T[4Y\ R⠮ߵnP':0\c`Vkk01yl){/;wuQ[`Suuy`Uz9Zzc00;N UK77Sa2PţT͹&KSj{L :~ n z]sxёLˣ^<p$ H2MS#6oC.N:^8շ16 /в23^НN6#?'S>$5>FkՋipLΉo10l eee˯^q9&&pMʦ :gɬ(O^b.Qڙ.+;t,έ\{b ё\խ澯Xveof%{-5Yܹ!D;"\z3^EBwAdF$%1 ܔ1ͳFx{H?IxAeXT^t77"se /Fjro{C^}7?n77TzAQ=*\` ;n Jpߏ-" BܥLai}W_76OL`򯒓I /oldż|ѱ xyAŨeשOӲ6ewL:6uJhWՈ`.bD VWW'ǘR=}~}y,֮. [ /l^SC94_XJN͝FjǨ05zC)jj$ݠ$&^pg[il\7P^EBwĂ7o|m櫤Di}[KpiJ Ô/Gx*-;j:{_xaqKؠ /g p89 w}kj,z--- GwS?#Vl׫9)BpE^U\-Z-#_[x-9*IZu:E@ż4Li)cC]N6$]n-=I|TJ*ݝ@{0)1?tl^G,5̘l"Z[[0υN:2YLn:V/8u{_mYY2LVVFg /l3?o4YSYI}{ jBܧNJ *,l^^n8ڒy# gjpkvh4yp`d/. nRzsS46}L73']wG{v qr&^I9P+6E:V +RVbU-S̆"mmVI҈F@849j%nw}?W&}EĖ%ʖw2  H2^/-}`ЇjY9MGq"1ֵX$tk`xҌAV=3.hM[[ԑ *O˖k:['K@x Am|Zkwb}dհū?tZFϊ#, s7sh⑩^xϘ"|j[Os>څna3P뷢sw`Bx wh '4)Oxk?*:2&BllaJ2OLw0t# H58d'gx~rϦbXP?'5_;/"""x;6sv8sƍ5kݡ㝳ѱdGǓs=蠏=jKwAc\o5*^ Vx񢗗ݹt_xdtt ^ Q>[f&QlzѼvm 9/B~n"Ghz+&+}OENVz nʕ+׮];anɪUϜ9m۶q BOOӧOSϞ=}vT*N``իWoܸq+}ĉF.-8qS$V^M7oMɅӧќ~+XXK\l{^&+[[z[Q~^bڴiTiC%dC~qݯy/_eH2D![OP(l\.垓Hrc~2E2) VV*;/08p"@ַWlEaŐ`oF;G.`2 =c.D"4iRaa!]9sѣGΝ;~ddj;wnAAɓ'ß*QT!mxĉǏ줤$ZF9BiIJJJjj*əQQQ썹zhǏrW_}EUVYmڵ9s\T՟7c zwB??l.`~`B=<?oKOz㏃Ta& Zn iudhVWp]j6?UN}ڟ=eQH(iED!P_]IeTGφ)kRBaO>MoLXXĉǍG=szxƍO>dG0aBHHȒ%KԳw|nELL ;ؾ}Y.q77̸Ї3<,|*1VG([^jtuwtݠW.ۭ.O.QE||Ο?Ϟ-EV*as ] SajuW* 7ψ詾+S˽ܽN%2m΅ C cMO8/1Y^/:zKg##r?_<ؘ) :ua#7oOϟO= &:tha#fbSSSc(d߾}p99ύZx5ӝ;w+N8AwvmKxANJ6MWFx1t퉏7%9y$?!?`+ `:իWSHTTΟ?7ر###vÃ;ɓ'}}}W\yi+F9.˩8VMICeʹѣGΙ3ȝy?S*3w|sD`` mz:xbCZV$AS&:dO?S&npǙ@x.Cs^W/#2Q6J̉)1,z{|eý懗V̑ۻk_hhd{SLyKfdd?~<..LJ\zzhEVbĉd*V.wtر3gJ깴W-2^qŸ#rV-oh+ѣG~`;"v-*2,8wWyJJ wQnS?G>$Ŕk>t6n<B"6|g7WpQa}PmgNT石n|pp0~ddD2}`+Ν;wSfgk|XpB*l{Μ9֚>}:WϢEL6Vß(IÀO)ojVt@x`٭[V\i#k]idgΜݺuq#Y6>jHA>>%i3oI >^"Wt6wFڵ+'''((9uE 'c=GקM>6=M4 ?tn\> 9qƱf?~s6 # X$t 8 H2 p&`d/L/"; ^/^EBwA^3! x!gBx ABx΄,  X$t 8 H2 p&`d/L/"; ^/^EBwA^3! x!gBx ABx΄,  X$t 8 H2 p&`d/[‹w)%%u,YZ}_jmurK. X$tzxuy 9$mk, e%(kn^f)߼ Ax A^45}[OLȯ, e6ޜaMi~uջ_2I7|j1~Bx A2^\xJ,n`SںƱ ߹{~img킃A^wu}TJ-;-]]͋]=p1 />smBCCw ~ x /RJJa!zsSZ<pI/>Ų p-j9[66Df9xxiC,!W"<@N! ݑerp2PWT)W%@dr qN78 ??~ rFGٳgO>q /|xcFVyGqSc[;pY/"##͛6 i`7Du߰$h_@KO~@k 352z0pDwʕk׮0adժUgΜݶm۸q,;qĿ>ϟ߾}#vrN:g٧Oz\\ѣG͛۽{7ܒ FEEm޼پ;RX 𢼹C|mKsZnEr Cx;G'7KTB-7<zEiJd:/Z.͡jXD!ƈ=lXId!;N|r_dٱ!H&MTXXH?===gΜI}{zxA*sN~YdѢEV6 Nܹsif̘A{HSRR222۷+vzj͚5ܒ'NВKqg233oܸa:MUC{oڋ3O:e⧟~Zlٙ3gl /4Î@Cq=oNX̑|̯oMuN}pXEOi\尟$PV}6LY@WGRTԥbW^Um߾W\ꫯΝ;j*K̛7`Q߸qĉJL&k֬i +3k,???*P(80sL~ ۶m;t\.;vbgIlذCl2<{zz߿e';ݻvmϳϞ=ngff&%%6mbqMFL l;wMf^wcϞ=s@F$H--?~dKYQ9;"B.Js1Β6$¸\uΓBT}Uݽ&xD"+SSSYlΛ`sssgϞ~z2j5￷R /||| Nφ&1W\2`Oqe\ի\aꐳT4A6m D"bT3gUT'Nk.Yzׯ_ə:u*g=88a˗/^9w%Tu 6E.ܹsGo$QC\zҖ۷But{.NYbcxkRpI/0^̄$hڗoc^.>}ӧ=,,:ƍS(zן|ɂ 92a„%KX qFE´4)SP}˖-T>22ܻw/mŋpƌFg9ݻi9+gv*={6y!*/|7=͛7 穞iӦooo?y䬬,z*>>,`O괇KO`i!mv?-\z̙3.x֭[Kˣ7 /Xrĉllڴ^&EW>?;%9/^g WȤh}Lx3^p%g##r?_D0]zԥO{n9sU"555ɈjXd -J%+sҥ4vl 6orDGG?l qT!=pĉϞ=Kҫ={6)Sh˗/S1ǖ?{VU/*hlrcyꨁf*Z*x bru+ jJrCA@,PZQ{xWFν‰9'~==1s̱u~μ_^( S1JDDӶG2e)nk4㒷kus" ‹H{]g\^DEEqm6WҹR:)׏򇡙ՍXߗ1CU[rN*:K#zو /bWYYYS6T 1~xUΞ"h2aEEvwT,dffl6uu; 68}gϞJ|VUU֪#""53y=Y?[19 8#>Xj4R=vxO?C]33%Unvn޼e#yyy/믿.v^:rو ;‹lB;bӦM l#ǽԦ*PYyёBTVV}d̙3܍b-"u5jT@@@ᅺlDb̘1g϶* )Ǎ7iҤ 6z$*8p˥AYf}sر6mRB8qwwW;RXX(˰a{=Vy!NLLye|~~~۞S< C IKKs䓪*///ǩjjjG8zdV999풖d/ɕ1*t^92x޽{}Сޯ+̙#TWQQ t ŷU[o?800qo0!{ 0imm{,Wf~JDx].u5cǎ8qcU?n8ݞR[[;cƌ=zNW^0tSϙ3n111q,+A/){.4hPϞ=9(Sxĉ/;@Ex]fȰ.i"ر|4^}w( 2@u9~C$~q#>%g8᫯:@Ex]fȰ.OpoNǏw..a]No7o:ȷχ_~^Sg/^WĊZ 1hOkËׯw7..a]mËÇS98|/68zcNEŭvz~{*t] úچb+F^XpkF}fȰp`c~p﷜(;aY|cW.a] /Ħ1*+n>MީSM<4`fuUs^@2K/vCND;Dx]fȰ.BFڱ!/7Ѕ^@2B9{?{mf_w矍E^@2[ϟ/:m7ӎ{TO?vqev `x.Ax]fȰ. F". dX#^@2/ExHƅ}~K0@u^0Aᅛ_CO^xi] ú/S ww^z9eܹƍ#^x<ze(}z>݇naޮ2www-$%%i1@u^0 ׿zyy 6L?7x饗^{={fFFxil6ˀ/^ln1}Χӳ[.{nAW;P Gvv¾j֝w^?v߾Zx˜j^:kژO_] ú jtiɰ})G~c.rZg|xf&ݻwn^z%g/((j_~֭'NAAA/Ν;Mlo}XRK~v{NIW){qD_mw'}[8ҢN/)מ|Kc d^ҎJoE*~W {ζ\\zu•bƸ1SXXݻw?'/.a]tS}8XA __ _n. /ƌVwK/׿;wN>ƌ ӏvxxt{O44./UNyV / Ëon8ٿxa='en-hؼgZߩێOMNMY9u#((=fȮ5`Wxhx!b=*n92aزt/O<0beG_^ 9Xy˗e >Xqiߋ,eL4)ٳgnݴ>=zwt1U'Ⱦ5s?hi࿫_e/t/v / ZËfܟolSuٟxC]r8 B%RwW^}w dg/磏>URRҌ3:ottn>}zyyy```yzsᅲcG|ɦ]]}:t>pp[W~إj)3/66~wF\o\y_|R޽/ڵkeԩS~~~#Fعs=!!!'߿~0D IDATI'Y,ia[ةμ8rև>2p6~ s7c~ݥ9-vc0\x{{?qrאW^VSS#͛7w@QQQ*}Gkܱclp /F=0tg#oi׏vm^->z;1X+><\< v͓K5k#ȡҜOM:(1u=UfQ؂n#+, '< O}փe#u[sVFx`҂k܇u9QM>\o8kHx߿> @nnn{쩫RΜ93..n鎻L2EuFDD!!!nN*?,Y"/7|sҥүM2|( }?Tǎ+6Lv7n?r /Ɣ>uʭ۷ zUy H3S*̷g^\Ɣ&~qxи,/ҩSzر˗/K)މ'&N(VWWK)7ΣW|xpã@lί.,sQi;y<{a߾o4٧74-hSCHY6}?ytXG޽DiFyAAAj3%%E /vڥ% RWZz@gttl$}Whh觟~Z^^0t< .3ftI V lVNפlٲE/V$;vTBVqtd! /:7n޺qZdq՛zjFT}}o^&?lZ'jS:9ܹSUU/[_~t-uQ [jKK=f.՞wN/vvÁ޽.* ֭۸qcRRmiӦ:𢾾~Æ j%Kdt'!!A8MdggK"{޽{.|Gͷn:%cJKgVWif 9X~MY0s&/Σ/3y)j -)޽~7oJhqo]P6xז=z5kVmmmaa---g^DFFN4I ?##C]Q@tt Tcv:҈W)555$*5qHLLloIIyW^Uw|n]yөS=6Ց?۷nf9‹~9R/am[c_!҅ڙ\X+ґ⭷ޒل:#;;fyxx8V'M=Zm˘v 5^ ToE紶ŋիW?ɧu00.@ZwРA;vpIxnVVVVWW&ٳgܸq&Mڰa .**9r9svB& p /|||dзz+!!!$$D&'L -^Tcƌ2dH\\\LL̈#{=963/˵nϞ=Νkيfxڙi#SLnrJiD#G SRR‹pu ___xS-Iΰ0F{쑞imۦChm}^0tuF;hРΘ{SED<$N !Ch^^^~~~jy^0t] ú/.a]Dx]fȰ. F". dX#^@2/ExHev "`$ 2@u^0t] ú/av "`$ 2@u^0t] ú/.a]Dx]fȰ. F". dX#^@2/ExHev "`$ 2@u^0t] ú/.a]Dx]fȰ. F". dX#^@2/ExHev "`$ 2@u^0t] ú/.a]Dx]Ɣ=z4h4سgOcDxHeLf͛WSScAcƌ1bYG'`$ ꌢwر'Nի3~xݞR[[;s=z?7lذՖ-[&L2ww7ڱc|/˅o>}8p`BBl.]T̝;Wکf())Q|zz/O#zzz>TXh|ӧOW9Nee+߳gϧ~G t& rU+Sltu]*Znܸ1''7ضm[jj>|nrssS)S,]4<<\y7G!%K"##+ fRRR}}}ppĉՀ &ȫfdY(N N9t``JCߋV^5k6_~}]]G'z-m9sDGGO>}ҤIN{CxHB_,++SfQZ'O,튊 )w;H0c ~)w+9994 ~ȑҟuʀxmsQL+UNQ=< F".W2͛^6/zk0룏>r"_Uj3++3NΆHJJ΁voM"ϼh^FMμXb޻v\ᅴ/o*::_ ^0tЕZ;醝no)G'&&:tƌ)5/_*Pl8^6~ٳgZJX2pYϺu3 -Iv{yy BCC-Z){ɜf9pǎ#FX`ɓku lp _C^0tׯ_^^^GVVVmܸ1777 @^MMM0aB;S8>+D=ZUu2:BfS iii[mQJ]]ݘ1cxH K[j:5Gv.֯_XXhgdH[*3JjkkTmBDx].ue[C~WsFccce̜9s-#gSu$=rG8vh=!C:t?y mwhCV^{/3ޱcN8vƍ)))3fѣGg٦j)**9r,X innn/J_Gs̑J;<<\ᘘc9sfӮF8:/J_G=zPeAziAU޾'t F".u^0t] ú/.a]Dx]fȰ. F". dX#^@2/ExHev "`$ 2@u^0t] ú/.a]Dx]fȰ. F". dX#^@2/ExHev z~‹{gv 늊nݺ۷o˗fS?ѣGZmwW~oGKDGG'%%o͛]^^w\._>mڴ%K̯۬b!. dX׈#?0$$$666;w!VZxv_|!-yĊVK,9sxŋNV6mjX-Zfg͚%򳦦F~իWK[H:Om:tHV+kp9hTTa72". dX׶me#*8~x/(̛7O~:رcҙη /9޽{YfM6̙31ܽ{W:ΝO?I kF]t#^@2K#ËN>}Μ9W^UƄZʕ+fËQ:׮]b.a]/=+[~‹۷oO6mƌ>P677$ . dXSx(11Q}@R/\P|MS) ,1ËS(..ucp 2@u9ׯO{L}@СC/u~c%^۷Ϝ9Sݹٳ u/FTx!ds߾}G1򲑙3g>e#W~2f @". dX*;ZNܹrv<ev zBIODDEcc?*ʕ+o6_{M>ݱ/;8)ܹ޽{111^O^sKnݺu-PvxxQQQ1k,9\nnnzz---)i< ãS7? ;ܼy6" m qԩiӦi#NRdmVھ}Kwxxq y_jٳgs`" 7>>GG}qɓ'wڞ[mmF#jcʕ+W^5{/J_7| lhh*URRR'Б۾}FHËٳǰ#>' +}Ǐظq߿> @71b%KOϙ3'..N'NAAAK.={ˢEd6mãGȩS]Աd6F->_YY66l%7N9s:ń .\8o<0)2 m၁*OÑaaa> F"+}(* R)))2WNNNMMn9 |||S3ndfsohhPme3!!A A̪gԨQSLeh=ÇbNF ,]vi=|o>S-LrR\\&4i:WQQ8IIIU/˅kTUU;##C댌ݻw;bjBRJtDJKKsss߿NN)DGGKRKRK:aҿj*iGDDH3ƌ#۷`oooU8q]VV&]v5yRRRBV%:B&?{].\ؽ\ u,IqU"yWܱcaРAcǎݴideԎ. :!`$ rm+Y8J[>}? %.үNPgX]dQQQOګWNun3|-;‹ ZNEJJy}F333eumܸ1))Iډꥈ߼y6lؠ-q"??_mwDxAx].x}||ÇwdwUKf͚HLͦ‹m۶) R;_!>>^:!6Pm9\e+K7LLLT׭x{{FdUDGGJ\VV& ?~Bm憝Nt F"(z}|| uΎplQB;Al^-r /T:bŊ PGScdիeNwP` 8P[Z ρ:>}SxW䷥WgffS͍7JmuV9ŋ.p /T!ː2nj,튊 u?׷w%%%%˖-IҤ3..oǎagLL̈#{=yjXXXc}CǍ7iҤ 6֭y}YCqq:B[J!///0aBhhzZ#!(zl٢n)5k]SSb䩩$Rɫ@C=U:rrrFTӽfI***,oAAMSTT/YYY[ouVUUŶm+W:cȑrD@TL(m9|V2all6[XX 8wGxCx].x{-=zP=.? x},:u>|Ȑ!NcNO~VN=a/AږoˏNExHev "`$ 2@u^0t] ú/.a]Dx]fȰ. F". dX#^@russ3{]#^@r hhhXz /.;}}}||###wa F". dg 4i4"""3gΌ>}6 ,XdɴiԘ ĉ 2f߾}oرcaÆƍ3mv Dx]f΢*++뽼v'|"cFm۵m۶Bj^dddhw`i"`$ 2@vX^^>x`///e̟?_{i…* & 8P]Mb===B: Հq IDAT՞:u*w|( F". dg SNUnݺ7&%%I;111,,LjXG‹삂5 %%Efؽ{ɓ ]#^@3^?^m=wB-Yߵ_%H[|ӘwJSz]m^zҥKƾ-Xt] wo+m˩Gu #tʕ+2)s.a]<‹\@NJJJFaaaee6)={~t-.//s^߿_ ?`xq파+V>|  2@u^s / 'ܥKj‹p,}ѵ\|Y,>wq /Ƚ{ʿ>hΝrYϿ^@2Sxf͚/RzX=ҥKϜ9p3F9cxqxRͨ)޾})&'';"55U3 2@u^‹۷o޽[jT@Pikc233UxZv /l(Ɩ6Źs?vUUUZ+W_:-/Exsn1.]*:sϟܺuK‹3gF= )oO+VXfLKKӮ pCԩS -m 5eիWV\)=򳴴Ը". dX\]Cj~tuev "`$ 2@u^0t] ú/.a]Dx]fȰ. F". dX#^@2/ExHev "`$ 2@u^0t] ú>>̙3?9 . dXg^0t] ú/.a]Dx]fȰ. F". dX#^@2/ExHev "`$ 2@u^0t] ú/.a]Dx]WFDDݻ7??^輣^0t'3XuyDxHr7))Qf]m>\&LII CO8Q^2e4dsQQQs<5k֤IBBB)22,,l`$ 8?Νj2l%^@k~֪.;;D //^mг-vڥ'UTTh=;w|eDVSS#_ګL~?qk#e~ݵOBxGs=s˧9efO\UJ?mڴUVʿgϞ׿Tgnn̙3 /w^ee#G:iӧO?F/rrr222O7n3>s' t6 rm۷ovn~7|~z EssU\\,h{]xϟW=Zx!Ϲ[n .[Ωݻgѣ%%%*wl_K.Iϱc~GmC555]rE⋛7o:N+TÇ=_P锗mpCj6G|P\bHHK!!sϞ6^@!.ז򥣞ۻw4 :rD//aÆ}ɷc{d<u(-u! Po^9r$''G7mGvVVJ+6o|cǎIs˟JLL~z˃۶m/_˗sss+**۷7իUx!sˡG.7o\jIIIC R~'y N*--ݵkfeQޗH[-o6c}]C‹Ûfo<|xvH=Oglr%unaT t}wG-[b/d233냃}||RE"m^G糲>K.ݻwoժUR_pAR#O8*PPl'O_qڵ޽Ν;/Ae%ZuNm۶~AF&$$\zU-@ZzO@\RެLNN>Hgjj12~j.EKKQ\ʪ8142:w'O=-hb^@!+}ϟw޼< C QR#_f/r/Blٲ>x`}}}uu . [mڴiÆ ҹ}viNi練2ڵk"vZ]]ƍ;)))ݻUxqM͖#XzSs*@Ϟ=zpǎ.\pVwޕEK}%A]3"ʴ^2W_}ձxx!=z~Gܐqqqqg /.ۿbQ@ /W\֭555*]v4~rʲl{zϕzڵk‹J𢩩)))~Syĉ21ZZ9y!tK޽{W:e-[߿~Pä'77WK>|11QGVL uwzfj@@T6mR$$$Aj@XX:B u©FxHB醝Ցb͚5k׮>}LV|ᇾ~Ν*>>>uuuUUUoVBBBHH_[[|rٲe2OEEEMM5a„Jl">>^ 'NXVVHIIda2>FK!`$ rU‹~;S_rr#/IMMŽuY_n)}Kn9uTUbbb|}}ү\RYY=Ǥ\e2X:ccceѣGkSB=mǧH;DVV>FK!`$ rU 5[T^^^Æ k{Ç +WҊmN֞*-Z$9Rm<88'$$Ŧk^0t] ?77ƪ*??5dȐ2* u# /I 4 ߿"`$ 2@u^0t] ú/.a]Dx]fȰ. F". dX#^@2/ExHev "`$ 2@u^0t] ú/.a]Dx]fȰ. F". dX#^@2/ֵgϞ>̙3Zxqz衇z=Y=f81:/řDx]fȰ. F". dX#^@2/ExHev "`$ 2@u^0t] ú/.a]Dx]fȰ. F". dX#^@2/ExHev "`$ 2@u^f;wnɜ2o@x]fȰ. 8;w3g\>)3|ZtEev ".73 2@u^:t] ú/.\ lp¦k׮pBh//ExĽ{*++9Igee>}oo1EEE}+glev "׮]۶m[JJJUUU'‹76663<$bhr}-7.;mY/' 2@u^'NV~PRZZZ^^j=|p\\\IRRŋ۷O%yj|R!Gpr:/BñtNdʔxܲ (0du "Ë/rڵ8,,lɒ%866VK.ݹsW_}%'Nk׮͟?G -. /Nˏ=jt !""ʕ+2fB~|כ7o3g /xykv{v l2y_={B̔;uTBBG}?sy\:mcykkj% iao-J+ -ǔ5G⫑SҌS (0du "Jgϖ }]lllTTTNN z>;;{ժɓ'UAumۦ297==]:Wc˖-*(^țʕ+?322gppkl޼YΚ3g\m߀t +=ײcǎbQH^p$i&O]wZ^NsyR (0du "JᅈxbRRRjj={[FFƊ+)K.\(111r`ƍB Cy|P>7]l~~z^秤]VbΜ9NDDEE;wؽE?*vnӦM+**={9992Z3"ʰ,?~x!IKV;&7cƌSg]s/\GUmŗ.][ Y] þ/Mׯ8p **.ޢő#G-[PeO‹RAPpeg˗.]_<+(˹p%gQ/# @}^Osν~%SΞ=O8_oVݐ 999>>ɓK.ܹs}j߻w78===11QO /r8N(vZRRTx!j:uִ {y\:m͛7ˇ]Vݯ H {kQZ٧io98Oq8®_f^@!! d֭[o>ϖٳgˏ.666***''rI=zjɓ?xP۶m"==]::tHk׮-[TsBEffftt:>2F /ZH5Ee%|p՘cǎbQHO\|S8n#pwwhuH>N;}8W- @}^e۶m7n,qŤ={H1bŊbwa-,,l…#QԘ2Nhh!ܲe_TTTU^oDTD;wu6m|ٲers)sSٳɉRkFʼ݇~W狭w^ȁ={acr咆͘1c+^ Y] þ/@{+1 ï^w^5"99Y*?&&ȑ#ecccSRR6mٞ駟V/ذa:v\* KOOt:O‹>l˖-y2TСC[N%_6$/OpLxc,A^2ڵkƍFΞ=l2tѢEz2BVViؽƤؽlD:/].WAAɦj y*=/T{{ŋ ##CmZ^ᅼEhh^ɓjو\CPP JQ;NFk%K.\9GC Q̔>/Axӧ?fiKH@Ix|&FƯ Y] þ/b~v$jRCrm̙_=z"h Dx{{ˣ0|||e˖/*%y睦MK̼׬.a_ߟ*Haa7233~aoo gRx󋋋-**>|6M=YꩴLV.a_d煺I~;h {Jϒ1o~`oꐢI&^TNT8T#ᅭX] þ/ ;N1ctPoooRtٳVRF9 qD _X]2*ذSoݺYf 4h" BԨQw}wǎrZf9BϰGn(*¸e#{ڵ4iFxݭ}"˔O>d.]t?%C?gNspcǎ?', d3mDj^xAOPTT^$ܹⷿs a,C/$iذjU:ȑ#zHLLGyDW\M>]Z䳨{gm߾}ܑtcxx022RZZn-3g<%44Y] þ/08v옔*[oE?֯_VxnxB>|kּy2DbժUq4iR‹]ݻW.X`ĉnDD}ת4HLLK)<CˇgV>"{VȰ/ fVËs=)DfB:'Nܽ{w٨A߲iӦV:zh߾}L")Ux1}tË`9 —$+y7iӦUEᅞaC=zضmҥKޛ=ExLs=y78{T_TBF:|č޽{?LҦM;6o\͆k׮6zVU6maÆ[w+u*)vܩF{wt0k,9_Ҫb~l@PTr!_ExL%EAA*?Q|A5B/PRxyS}???jǎwuײeT>>>*dIX`A‹9uO|[b׮]100Pٳ{:DDDyp8n*S* @}^0׍7ԑ=:.,,8pJ+l LE" ѷǿ2?xor]wݥ{j%9sԶ*Xv6{li]7o,>o.\Lxa5FAAAroq@@ŋ˄~~~,< RExL^*p:IJ_z2Ehh#^={:t9rSO=5h u/U^Szg)I;p@jjW%>>^I1ߪtϋ3ga„ e‹ P=駟6l Eܿ >.]o^?ܹsǎk]vrO?7{\\UvnBxL%F Ut:M6yyy&%z׮]_|ŧzJTm)ɓNo}i!k+X~L}.4}u#<"ջl޼ߏ.^$%%,MbĈzgxN0aB҅:֯_?e _fJVUoR]tq8O<~uر|*'o$Æ |=Z/σ|{73*(rnׯoڴiMRղ&n*h֬Y˖-}}}[h =1 f^3čZ"11QܳfJNNV[W̛7ϳV366VEjZQRf !oBDEE/4չ R?o߾R1B=ҥ/9JjgjvBƎۿŋ/ثWn fqوd;3^0(~k-|3ϔ* \VXlDi{UGU=* n喁w[_N.-Z$=GTAxaVUh /'/5jذaQIx֝ ڵʨ22`~"`yyy;\[y*hiҤ TаaCu֓&MۤVt?[ ̼.֫W#F`6lX[W^yEsD}W:p@9]Os /z)jEN^[.F9rdW[yxѹsgyS$U!`&/}t:Ϟ=۽{w.m,mP+ /r*qs-vOp\3fг-ԘzO @Zǎ'L0zh3HK>}ں Pt" [nƍSYٮ]ȉ /ڷor߽o߾2P&(Իf3yݸqCj7|sKNϥ"Ç;੧ʒ\2jԨ&MCw$9 jg}V?ѣPO?qƌ3bĈ!C[n&M&_,sX^0`K/T{/ܡCWҶ\x!&Uҵkj3̼(rKKKk֬ ^T^nZq-J=$: L  ڡnG;LSNzͶXzzΛϙ^ZR^0bjoN\xζPCk=t![nѷ)Q#i,.DΝǍ{lĉ^R}DxL%F?.6m EᅺsIMMm޼N4jLlG ҷoߑnǏ=zX}E3y<߮-9EVzJիԩSTx&t'r>.^ `&Ν;A:Bu}֭[s^ؙ25k5ᅜՠtUAxQY] þ/ɫ CԀ*}oT‹zExL%ޏS5K.t"O}||䓍7:t̙3:PJZhZh-6 Zjdkj14nXŸ)*vk^_VȰ/f^0W 8e#V(au "`&/ƍEӦΦ%.a_p:,tEXtSoftwareYandex.Disk (http://disk.yandex.ru)\ IENDB`django-uwsgi-0.2.2/docs/screenshots/screenshot4.png0000644000076600000240000022172513332714254023355 0ustar MechanisMstaff00000000000000PNG  IHDR}4<" IDATx Pg-vUʿѠ *Ym6&x(1DMTG\r 1\" (x;ʛ{fh`fO=3owv=}0wuӿp   'cd`#e^|}vԱNPAAAA 012^/^o󮧎AAAEX//   _#AAA `cd`   ‚v AAYX/QԎ   012^_@AAdaFQ;F   ,,(jzAAAEX//   _#AAA `cd`   ‚v AAYX/QԎ   012^_@AAdaFQ;F~8 \hlQwAAA `c]\\Kiȑ#*yAAAE]xxx<ي3_J}||آ>\wj˵-XTB~S@A7or9w6nATکz6&(j''ѣG?(N;VtԨQjSPE+ Ah v(0_#w'F J/]0_"VUKo  {z^C޼ImP/QԎr>>>|tI7*R;P0A,˘/Pmvܝprr3fB- Uv aT5 Y/.u۠_wwwgӵ[ '·BռGay_"T AdςuTm(ӧ_?W^PGqtttss!CS0׃3&)G=n8Izwb 𲩩ٌ*bT5 Y/.u۠_^z-$lݺuŊj̨#w-NNN&R#˄ ƍ7tP20~xBoG Q͛7. 5bP`nT5 Y/.u۠_O>J Ν;u:Yj] mn(g*c„ rcbذaƆtw¿PE+W\2D^^^UUUׅQր gHmacE{1bĔ)S(R۷g_sUfC<Ղ& 63qtt1SG;cƌ1Z_|$@YPVVTW{/_+?r/.}M_ E窫** o25KoΫ+-]yS!* A7n^h|RST =I |lzew"#VL޹sEEE#QYY٥-+To@ٳ_@]$Ab¼|̘1lO>:&3/F{j¿080j(/R"5=M~tQ~G\uKYF[Z(,r-:_]SbV>-njwI]Zܿ?U}0;gXHqCHa0Y\\̝TZZ- zX+FmnnؓliW)AdςuTB1/ɓ'M8 <#w;ń | oooc vߍ:n86 C^Z]w21%FF2DaQDF;}:Jts煠w]۷)}[vOٕü75Ŕ^ujk_$&ν@KVQ5dibÙLZ-Ygߌ$6,*Q>Duuu̞|AlW*NӓZm|||JJJ;BջP:j0>7e Y/.J8bļ`jP;F̡[t\c„ c6r:tx'7Y cm+/ al_ls·QQZ%tmnw0(;пYqxByպ:J"1_ysaO܋RvEdZ͛LET{(J"rfOTWW\C iZq°ذ&RUA.7]| =ms_֌0ߨ۹`)$6>{(*36Ś5kLyyyo{oڴI1j Mؚpss]3[M1upjS{ȑ#[H*Q[\ĕ/|=PӬ*/MMa)OEc#ܬ*]?o`^+y+uX#JNMi:Dv]EI$f|u(&7GC qqqƖ^p!,,111IIIs ^|hT@ţ;}]9hs:itRc-B*?rFFeҹ! ʿ8r]J!5#WGhUL-X7\]:J]V_p]!%$>=QW6[uUK5GrK{{V#Qa |#?̿.ҷCvsH}~S6}_^$&G*/vWWqaK#W|E]'|oMyW fdV0HR}Gwg%fiLd. vqpp0bΜ9{9 4 9?c):T̀1rqvvR1bG'''77745ߟ:/)jBUiM>7Ypx|>sAuBoOKAM:G:elw^PfDx/mjŃ2)V66;S/& =8X$]J"ɢ"MTCG~?܊ I:M(rS(7)fw *,,_333 s~mʜ(T F#6S׬|900nܟsε9O#ٳK)VMLL24  ]$jt]:c0Q7VZD$v gYPӕ^כQb _}^ςq1푑uKk6P{O_{j9e_%!.Ì ܐbd)}hȣkb䴈=օu !Q\[Qz_W lnUWyBs]f+ȧq|i+o)1׮QʁK|&\^\_vtG:QQŠ>-0JY z/l (*4{EI$YVVƼ >nB8$c LPYYB+ẆBvX]GFFJrYvjzN||<@Ν _J֡>}Z`j/ z%&PAdjw1ы2*W`^ ſ + ,2 /6=:ag#iYYKezz{EY})d/G5t ~: 4[$mnTvtkH޼. ?Qk*|tuZkd'N`;#ͷ mƍ]$߿1hӼ3kЪ}dBSH4/%CZ'01cӿÎT\nI,KMϕg6I{]?ͦL'H9F #A=xYBR=&({R4%%|[%ӴVlbGYE;,%dmm-y.7nhG89sAyOVVK;O!M_+++iuCCC"N:ź\|Yܫ4$[v3766J A3(,`6}ӧO'''Ӷ!!!ŋcccsss}C &޾}aWE{hUAd2m:,Л%wڿOg?@ }Toп!2B4HrfO$٭G4#FKCѭfW3d_,wٚEy 3|`eM!D&h/6<,sѕLœCeoûUaw18apJU7e(pGfnxs6G=_Kp A8jȝeС=v!99NNNÇ68gu0eaW%8H :!bzOSRiF{W5ݻG(/h6P| B lK(<""kzCTTԍ7XM>/$3D9st.$/JJJ{oii¿[!!!ʜ$2 @՚>555tJf1&Hvv6LNNO'F%!IKFkx-^TlCAM)_^)!S]GڇR |9"R}_aJQ_47TݨXKЪh˼PrH7;|$y.*τ)1Jw"r?CObch[MMs#B^~< ƈQY͚!Wf֨k%JJ,$D1S3gV/|33i;w@QL޾}blSQJ1|~~%!C19@8 >՘A|" %T_HfEP9. "޶Mq+W322SSSy!!!sDssɓ'KsssŃqXG APwiaʷk0/Q_s$M0>gN{GZMH |t8[~ a>K}}_Y"B4~ˠGB\؍&03&/aյԵy7B?$$-7!/JҴM5PF7W#/WMw vܩм8tؼ`r4xԎ;95}||c@8;;{yyp̘1MF!g1l0RqQ-ܿXHl밎h{[Eټ%¿)' jk)e\#sċA;r΋'|Ofܙf^oEbd/ܢ窫6ߟ:=6}TȹjZ?ؙIyKgk5=xP,1aJ~5oʫaR}MfQBJB)xR[SS¸rʩS(MMM dGW^IKKHLLd(lO/Z#..|?>>E :ӧOXr"66֤m){vvv{3gIcL7a̿(++=#bCFWBB\ڐO;bgrKNNKo,`;|h)igD;A=]pBh?:y#s[m./X?w/c:u0_:8Y5_8Ǯ*ZM ӇT]`htI& aD1,l%w dnt̿/'m_q 1A_>qĩSݻ֭[[o}LD}0Â" ٠d &LP8|T\\\Q"ބ`n6T۷_\xE|޽d^P޼ipЫzYUUF46ݻXT0Rv9^nݐ}/Nj/\BKw^`2=xZq}F\( )9wܡTvY-BLK<-Ԡ;\ RhT6q_@]^d.mD t~:vƶȏ`"cg !Y_ت=48xQvm5a>G{7[ ¿zR_fΜ9Ř;wdNԎۇN= pGn7alގx_B4BO}gX,S ]Ў19^32W[_jctx b7;A$ ¿u޼`8889s;vP̉1rprr26ZDr$ϡCvYJ.X IDAT/̂A=]׿bŝLHy%a gΜỦ1rP_@i &/_XLjG6ٳg.-Adj19Sׯ ݮ _ءWB] /==]#3'jCծl]]]_ȁԎR0A=6Dz8 YX+!.gϞf/O?T#3'jCٮ<]\\_ȁԎR0A= ER^ /Vˏ;CB;vlޖ-/G¼ z/}|fC}(/ە; 9/TQ*Qր gH+ašx;_=ztAPh! cп0aB4V/,ZsAR[ Ȟ")/}vy']$jP;Fn7 www%9 7N'GgUPE_V;V@ UKo  { ¿*Q c"6Ƙ1clŀAAd r% yJ.B$%ٻAY b֭'Na1˜1f>AN0ƍoBY{i M_@AY(΄]wT^ ¿>s޽{˿aȍ &L1b 63fF-ߑ|cDzliKv   J4z& P=,#N2/&uaE\2/+W[JP>&32.1F!ٝ|cǎ3r/rssS崘 AAMj^VVZڦ~kW^2/z ša)<==@2ÅmǏ֙1/   ˼ Nb cKi_jP;F8l3/|t םP̘ AAMavziFb޽& \]]>\vq;iFħp>yAA aNh^Iآ=z}DSPԼ0aСCZqttL%1SFɧ   h`\[t)(zѣ͋-իGlNԎ;׈taÆ999ѿT\I;VU< hQF1rpvvV,u AAMR_Ӣ_s7o}ѼD>bsvYѣMǏ5ji"P|eelH   &ӿXgĸ|&k/̙3uT+? jf@baxzzE߮*~Ca|||Ç'5j$;c ¼   hbb֭5Yv_}>B;f7U/   KIrӦ3lſٳg'޽{ϙ3gĉmi{vܝpttR_xxx]  I |H[\l̼`JzgEc=t.>S*Yٶ͋P Sy0E,/   H(,dJK 4kؚ_xxxtm;uT%}.ļ 899Qcƌ勺鴝AAMR_)y*Sŋ_۷D7z1x`#w'į[#YݧAAAФvPaٸѣG%D޽h6oK[}B;1tPq? WWWTV//>'   &)/22_HKqO>mZvy^z ^i?#w?κZȇ&}AAAã/]j~ eݽrNHP;F8;;{^:t u=z4&&Agq>b`_L2偈= !^~e/{1n7ٳc=,$уuwwWTCX//6/ڇc=ֿ!B/u-={ӧ}vv  lz^/-zӧ=v  lӪt䪼[Pn_E _z ݻo߾ #B_\Z{/$oQӧ%ƨ#B_&.}\]n12^_(m:_T-oa~ؿ*L}BgϞj{v  lgcآm߿tNv  lsę lQѭ36_H:_`HQ;F M{ȓg4IS%Ņ_l_KQ;F M{ ?}ܡ8rPTmٿpww-jۣv /*n޾]x/շohMQ:eB)wT54H2)yN MM|)ҫ55Sÿ667W~$n;]:F *BN2}sGrQ(fq [QtB1Zڵ^Go+ǠZu}D{}{4HPgH- jke9п_" 'jƟ09bQl[_+zG1gIN,mKBcrqM 1S~^phh* vh/>1k,J,e4E&2,[µkTOkn.mN U\II Fni9I AFXʴTH5ᇬ,䵅04BWTE뺕ueQl}GB bKnO~lCqL`@ѭ[-Nr^u5=b)oAWM-/)tT-~ܪ*. .\hi˿())XpuJUDD*G̿ؽ{7- 3gβe˺@W좤.6rEơظ!|#fAX/_<ס};Ν.]9JQPVeE[hljZ09EbӧW,ZcX]:Cw##:zȟئG.ѵ\(fABR[OoT]Z?&Ox#LأYqw%GGό$)5hJ~?t> KY ^$իtGq+/. !Ǵ믷o.*1 J{*ҙya¿ g?ϖ y 1 jzFŝf c]Ń.]ZDX /(.oF:957ff}p8['!6_PL܍뢎ӦAl<"rZo9s&BdQvķoWJ)] hȬ%I%aA"wgRmI0/Z3#s%nzu0h¿hln.y(-:AsezӃ 6@a9m~BfrҺGeȞ&OxKn 7c"# :;m>i¿YWs@Wp_ПSܿS!]XᯀmǏOWQYYB'X9Jsܼ0_N_YBP\12^ٿ:%eeZ*V,\e%5L][ DZ YOԆ{+"_>t/$n:p1ZxlڧqqtҌy' XK._fM0_Pp?B/ MgIp◝QÔ"yYZ슐X}XzMrJKcKJX`|Lj`Iݨ&RNH^^΍.}n+"UUuB==G<ߗ/^c& ǃ kjyU+zusOlIJJK 9Tx4Q_fƠ!-rtzl FC=˅JSEEY> ģ /0V2ǘND=i+dҭA\R[K7d]A Ο?~2}-ybbUߤ пl޼sży ܹտ3gêUu&uҦ[.eڬ3bx:{MBwjFP;F֋5ٕ[nC˴lrlC'8~' YT_ťP( j"^D~wPZL<5)31~PPP^Ww̋fjML1r%Ş 9{A K')!|r8I]$שqlq%%F蠋*<.]o32/+yT%>-y{VRbpPE(%`_hBsQޜqBMx[QIlпpuuwpppP\61uvk/$]E jP[G' %G,k)nyO|%gx'[D oE'/^6x#,TܛKGl$cNB<[_ss_LZr.?KN$JCW:joP {7p{xNI9z<nQrKorIJ+/r0拵90`^G >'ٟٵ#}u^#΁fu`۷_ =e]$Ttz̋b'P|EETR[FcWi"z<!`in[^Kt%/%B2_ddd =-Ѧؔ=O ^zaHסvq 4`~ 8>;88GG2sA-ȿ21ИgCA\B ~lv 9IJ>_ oVW7JczViiΟg)P wt.کBOAŵ~rY8 099uC{`]~E痯6ɫ4 q, g]Ź5|ceZx*$-dNV L->'O'C9UTf9Pe=_-LNu\qabQlNO[-kn,`?Hʙu1_ps(ﯱZTDb';_XӅEf+٢гYB߹m۶cNۦM"3w1ߟOAؚAAܼ3vAܯ_~{ǎZȑ#K,1U=<<\]]y&#_aiii^^^]X5PDsPa?3 c6K.M %3ҿȣwWߙԪ najeg__mF.- jRS1g{vdFyMFA슐#)O5d `еޔIkv|GQl-Y[/5k ^{!Ő!g_ =EJ_ L lEb9ɃdF;S5BOi11{Մ J䵅AmÜ6_2x<<&==AEO]> ǴAЏ#[ؿItG7<k҅~9$v̿! //83fhf͢x\'X!mE0vבl_̴5` ;.vAy?'{ $BGĄ X'x^j?2:꛼ [& /,FmcæVEoݣY薯v)YQL%T}L+ Nڳ̿(k:tjP/h/|ѣGeS#wϝ;ɓENNN x}||^uw)'joֳ>IlڴS:`3P `۴_T| l=)Ԏ;B]&رcGrrRRRlO:t>L>}ٲeᔉi~'wi[:;;~ .k֬WD_ ҉'W_} _/.駟6m4D_#$$6du  l6좤مI_] GS9rqqq9''~EGGG W??Ŵi]\\RM̜9>?sZvС'/X`C+ lU/6m U*4/eP;F6Ç9sfll띜\\\Ң[?rH{ӧ߿Ç?3xy(gqy&OLjw}B cލQ:x?iiicƌ8p`hh(AW\]]iɓ'L/_Ǿ*/ʕ+7o,ys*eȊށhѢ}Y|t /6/UvAx㍧zi/ҁ:Ė~DZ3g*k=sCby&lM$**͍iW 7SNe;(}B<...?ӎ;,}j `#we˖%&&jm۶=-rvv={vtttJJ waZzjO?%$$PɓA(A0']@X{ĉtϗ.]Q\(G>S:XJ4zݿ&/_N?t% ݻw/ݧǔŻ̀݃RVϟ/(ȑ# .0I9흯mAa}W!::zƍ?P`㏒,Yr:N6Kmm-UVѣܹzmذ!++K'ӧOj---tڿKfpΝ;ٳ裂mݺeG5RWXtk/~'fSm͚5,d$E,ِh+WݻajUP׮]CLj[Jo ,zݺuɓQQQ|Ԝ***jnnnlll׶PN,K,)) FW@W/شq]m9_FS,*5(FީS(@5mz"m߾``o0s}_[R }Ux֌*GҙP___,"<7oTml(Ugn( 򡘖VEOĜ n@Ns 1(fyΝ2K wڵvZ6sjѓgau:ׯgx>̯fO:oE[z>|X'6lh>p[zz8erӟ t_~w :C?WT jQaPYCmK.RZ*//E[tt4˘ U߳fI]qH5Z%DM%ZDW7)}֭JcoKxPPl4t!33S;34,,"sjQBn6jUDD'Dw;v8w/c'dN0C: /CY5N`HQ:Mn@Z_ĿjZ۳g[eH}A- }X9g z҇ShrD鎣A(BcdgF~mHF~zYh=?a3o<{%ߊA-Z+,i۶m[l=W^W|+Sc=Au"EKΜ9tn_RY&k׮Q'66~>u QWWGPӛ7onhhY#HX]:KEFFR+… ۷ZtLA)21᜜%3V<_߿7)6]+!ޖbEE*AFR(N$tN^QOEN 6 SAՏ|%g@==ZOzln :'lƻu,Q#Ξ= `v yqℾMLO=Ǐ=z͎3_PC  턒oEPCR"*&p"QR'41).;-p[* N05=OLLV~@@@RRҮ]RSSME$pGʇ oQ+V?~ļhݺu;?9?X>oz"]3Ҳnoܡbf)ݻws-1"B[b,0_ts֭[{Yz5J+bl+1bÆ c7o/fΜPt"͛gbO6~6oLO0Jlhh:t_At&W j#RCj}v9|}}%@НGI\f/d_)Ymsssq,_iݣ }jE`[T e"7eL嗬F 5 -\ʹ¡D^fE:ut1T0zn477D2죞}H\ɯ]0iqۊwՑmJ9JE!7Ha 寙 Fܹs3^1 Ob͛;wˏ?' MVӦM <tM-[j*zLi4_/]O?%GΟ?x |. eɒ%oxx8 `v y>SxI>ePn:IwÇFdpp,R`IKP5aȷ6~U5d_i6l0%ɓ' qj~Ij_|njR> {ť'b(H$KضmLAgZ~B E cx `q4rtAZJ4bMPJ]|  z>A#x,1n⽥$ >v오:/LsN6W16QR$R*`;_ КٺukgƏ/~o$&&޽7VIJ5Y[5Yjo޼Y\\,Ί2h Q&"aӎPض?{׃xOyR ƦܖmIY"#|󍸶PcVc+PZb3l3.FD':v6?2O=a\ϕ A s4x!^mc?sEEN NQ}Akmw脛mKJw8{2ۗ[n︱I濐`j!˖-S291 <ѿ8׷fhhڵk)+LrHNN޲e _)"&)oR,zul%%%r)\rxrvi+ʁN5٩wƶOaΝ;ypȑǖt;vXWRC|ժU+j7hf\:-H9:tH2(@'yf/tKjA=ᗕǏ.Ξ :ْT%[14 ݿ&htVWW%NxaĶmhM{Mڵj2r (VǏ_f Q"7+V#! v yٿR؜R;CƮ>EYl?^n'NhgLš _RMjK34M{Oꠞt vUOB2cunvI"=tkItk_/@[V@M^@ׁz6/Xv y_,LW=oO=͞gb롐?n4hc, 1/._/6mڒ%KئXby3N>Q&ۨZ}&ŀ7iҤw} Ӯmd:X c~bҥof#sرsiț^ɻʭڑ ?*ߜm;k,Ol߾], 1hѢ^xA[n͚5 .|ꩧ(g/^tlٳgo,YB_yZJ_:+Vx׮]lٲ p-[i7oNNNKkuЏ]X%]0x㍯M1sL6v``O˖-c-Z'XfͿoqV+V+PfRwg>ά_2#WVNO<'/w8p`|| x___~}Nj/O?|p摍74h_|җ,Y',μyz-`ad{/Xv~R^{}~g+&s{{/ƍ%k bGn^whNy!B_[@Eqbҥ 77_ҢHF> %%j tADRb@@ʕ+ŅYpُ&0]ԧzsLQ%R?}+V`1J/$يWhGrSQ8WsECA 8gA10H2sLJ2eʫJ+Ņ999i4w^/JxP6x䣏>D`aпx`{^W^,oN>ϟ?||d+aa?o`U·Շ2?+GxWONȑ#̚5UܿaVMJJZv-ziQ@@-MBBB=<<ݛrعsgZZѣG}3`aֿxWZE>ùsJY0R_Z,)0tޢjyb AͬCkk}Yرc'L}wy>:t===O:xb˗/_f!_W/Œ3ثLuԶ /تɣkYԞư1hР>M_WY8poh|MJg+EիWSCBBʴ!%qqqÇg2C`|>(pRIQٙ Pe7|M_T'M$I, yO?Mrc+(8/ B\T3;ca;T/"##Mǎ3@WjA ȚEuݡA :ޚe_ż] ELuݡl V)V6 _EA_VgKisASSiW.SkN4ZؼF{[m`kd/2IcSpG/kwjMgצ0ݺ}n#l]#x!-Whhn/"[ ^/D)Zǭ6 52 Ѳyuq,u @l^uܺ}n#l]#x!-Whhn/"[ ^/D)Zǭ6 52 Ѳyuq,u @l^uܺ}n#l]#x!56/P,5:?}n#l]#x!m/8a2 m3n/"[ ^/ČJD\&FdO‹&Vnnn]1C~} Xdrn{ϬNNNxy/!Xo1...oggi&/,,>|xǓ;88lٲ%77J]X c/"+EEEF^xxg͚XUU.]$7 4f+((M( W f/Bv_E֪uwrrJNN6UUU+V(--eEbbirܸqO駟VTTϞ=[4i>`[nذavvv4aTTTddȑ# 4mV[QQAFDD6MH4 _f ^R?V\\\RR2p@*ѿ{/^l-@ N q3no,V䔝ҍ7 Eqqqll3fK(PFm0v5O$**N6mʕ+ܹs򋬬,!3f`lB}g'OԎmy!-|oi~!Jm}o<+V:~xZZ,YiӦO> nnn`dƌ_}UUUնmF#2,,.4`Μ9yѾ222XPRE'LDD"~~Gݝ&()Mhi0iOPFMPwwu+~-_]1QPP}{VVVӧO:3`Rɞ|J`0/HDD>}:Ur޼y,3fɓ'j_,Z]д49{fgڽ{CJKK zЃ=Az^  fb/~Q^F3jԨLzYq]@qDo4umhúǍ,X3xxx8qgggϙ3gʔ)쉞 'N4/FYQQqԩ/288o6ONNwsNZ׿%<˗WVV$&&.]>۲ep "L,E@@YQaÆ9-OթF} Yh# zzJeoOYlB#.0/EdpK !DrBBy򤰣Xy!- fb/͛AJvթX~!1풪t46[N-jR3ACjBL R΀ -kuS4K ng>7u+ށvpnF1ydD2bĈG;u)?2mڴ1cL4]@_1^D\~ah4ji5r GB54*BqTqܓ.|ː{A8uzI† 7K4 |# JJҽXszcXMJJj8s̄ Nrsscoy/D 'OR5BѩX~QrH9El}"BZj=S'Ws vרԲy'F;|1}C }upm @_.P(Ǐp&MhvaBefElNs +zv1ELѠ 4ېKz) Ǽl]#x!Nևug ΕWgRӗW]UWn<}j^/6#ĕ_ܹsҤI:H&OD=ӳ[Q:q6 /N}(=M ! C_3VA_V'U4Rը-Txo:4YGxr}j2UVNDEVVָqLLUUŋ_3A*1VK-.64</]UBQQ/+G]h-EwD:IRD*Of0y@|HU%ܚԘ yR/k3]d hu><[)VV'MMϪgk5  ͅ StX ???Dr.(GT(P%wIj7QohS+E}"gUl3#gyغFB~ Z]䛯V}֪g諹>0띃wcNmϔ)SFm}y^f hu>|v3<_}Njj=klnp'u1"/#w52 b}XQ'W6`"gվj$xw UA_VW.i~_Q[MݓǏ=~RTwBgΟ/gyB ^a hu/L){k嫗{zkd/ՓЂg[{Zx!^a hB~`5/WغFB~ Z/@̐_@u @_!^a h!1C~52 B~bzkd/  [ ^/D  A__z[@;̤ۛ#l]#x!._v" :'̤3 l]#x!3* NIxф:` 1`kd/ǐ_EA_@C~ٺFB~} Xd h"lx~'"[ ^/:ŋ^ɓ.mR]]w~SAЋl]#x!7n,_|֭k֬YbűcǬ XPP ~oNܿ@xDg&Xdޞ~Ҳ}@gܸqcӦMl+Vp秿}w>x֭[8\~}֚ '_mC'' Ⱥݐ!CԣG۷oÆ }Y'gpsssvvvrr,`u:@gdϞ=>|P(JJJ߁n?Pgcc#u8q_7kH?iKhcOLLߩŋ4XX͛4_!^arӦMZ(//~y|kgpssfΜEͫT*[`S&OL}@g/^Ν;GO>UV?ԙNB6!u666rAAArrrMM͟ISYn߾ݶZ._v祥w0Jö4)_!^aZӧO/++7oޠAG&>}ZѰcOh"YYYIS\UU5qDuM@&nnntWY't θqVSSS#""Lr]]ݎ;.^H/rh˗+WdACTTԥKxǎiwGW׳ ._ݐ_!^aZA"9sf̙B͛O<9xࠠ Ze4/_$...^^^tuu2dŋiqz}JJܹs'Lп;;;6l0u|rA=>>>z qƍNwy'e^z5..nӦMO M駜7L&۲e˶jwGD LOOjM/v/@̐_@JHMM1c#FO2FhРA̓VUU5n8 WWh6((Hl޼Dٱcsllф\.{|! _0K.f/+_tPaa!?-ZaB~ϟ? iY~qرܚO 7`ڐ-e)qz ZC_Іkg3 3Wzꬬ'JR6)aBO?e D=[^4Ad2Ydz=z VTfEBBf*eRRRFF7oޞ={h#G̟?*3/V޸q˗_>"""&&?OY/[CCCMo1!MvZ\.\ѥ"99C~b&CUlĈha_|ENNNG'z_B==erE|"" )1ro-dX 2j#0R#B* IY$(6.!!Nh:SR躹 ٺu+ >~߼y mRh|sQQ8}4#11QӾ iw zυ?s||/˗/?Vo$þ{诹p`F|}XO^uJxW+բK.V͚5ۻ9J~1WV}B4K:Wzac";Li2.td"9[iaZݝ?B \. jBggquuuqqq999yxxT;v0/t:B`ijl66`#bat pݻ2:zhJJm \/ihp;-53~8#_sT湪̲S4l8Zx׈+0aBoĉ? \ѰKEY.SPp.|Ȏq+bT=aܒD^d4j<%:Q_-Sr#"KC R 1T4$ݛ:i$Hj]T!ؾ}E;f^tNd֭app0Q=%0p@NG'ވ#~NH__+Vܹ&ٰaڵkgɒ%a۶mzET*V^xx={jkkm}P|}xM_@}5g|~Qy\s|042Oi/<y VKE-;0B(4a|Pؤ]J2]:hm^e6Z FRfM 2;-Iom`r+**L 1a„iӦ9rO%iii>-$*Lp?ܿSXX(|+t ^R__AK>.ZGVꪭ}]~A Ś5kfϞ- U]/Xw`h@}N[E|4O%htcsobuLNW&)soKf* u+ӧEt2ٍ5JVGDDtf///??I&Y0vXDb:^ =y/@_n65WGTۜ_ u5-_^ V[h]#Bx~g_/Z0.K J)jSYh4$X~+RcB/΄=YT' huG}$Ҩ>p͛q)ěhu#hjz.TXQ[ w} W~`CQڕGSsbYwG:Q#Yj5%zr=`ԩ.$W_~b# ?7kd/խ"'B^援݆8^x%uV^eoՍ! xV%rnb[ J7S[u @#iqbO~Am#N7m'?Tx%Z~}$%%M:ՊmKqDo4j@D+1yfԮu @zRXWW[z»N,˹̢D tkd/eʐ_X KqWHwٺFB~ Z/@̐_@u @_!^a h!1C~52 B~bzkd/  [ ^/D  A__z[@;̤ۛ#l]#x!._v" :'̤3 l]#x!3* NIxф:` 1`kd/ǐ_EA_@C~ٺFB~} Xd 1`kd/ǐ_EA_@C~ٺFB~} Xd 1`kd/ǐ_EA_@C~ٺFB~} Xd 1`kd/ǐ_EA_@C~Yuk\\\xC quuv݃}k!>,Vkoo0l0>pww|w}wԹsC( IDAT;933?7o^'wJ ;]`S&Oܽ~+!>[ŨQ֬YFufVVVbb3zi_xKxo.GxXk秲_reUUh,,,<}4-ddd Sr gggZ F"m5gΜvG2<$:^ӦM3i-f:CӾM_@b…:޽{GՉ T= ֽ]验PI'"Pc4j==JufR躸HҔe||իxjܸq"ՕFVVVN///ggg;;s_~ʕ3B~%UVnnnC frpp8~xaa,Zx1 faDEEEFF9<{lڊ挎fWj|"e˖ǐr)))cǎ15S$L:%|"oّ@ΨQtìR躸L4zfΜEfffbbkqvvZdiCnnt:Dn~ѯ_m۶ #KKKNuH>Ly *F CƍbccM;\nT _@r~K#jlzψϱcǸT")5+|W RB'luEFDVTTtPAJKK5 Ch"v1+Nܹ7oLJB*Fh;vlG'zFg4jd]\A]/ÔWa[̏ Pc]ᖸ;"tmn%V)tޞN%K,kNKRoMrvv>p@EVVVyyv~:͆ 6?wm6h&L@k ٜj@==͍=cܹl3ضdٳvwȑ[Ǭ_qgK~AYné3%%zh>H U$ ΰTQHj/4 _%ޞI\PUf3$`Z)Shoh">PH\0QZo<(`kT]JjEFAg0Ϲ JWeBߟyC۷o߲e:=ZxK@h>v3g{Ɨ_~i-$_|u sG;6$#""ha쑟쥥B"i@BBU>R1@~}W =3E3phCIǔt|~Q{F^=S/b3hEZ.A~!...~~~G9yv7nܵkWSyxxGN>=(((11Q*d2֋ܴiSOɞә᯴P'/cեƄxAPL֙>ZZ}$I*uU{j9|pnn#:?2::3g fl/~iFv /S_*$=۬S".z $XW:uږ_ppZa FcV,wf,gd)S̞={ƍ%%%ǎ1b/Riq ZGVu  pBNglc޽F=Bou @^xǴ_|yΝ8>|~W 2jԨ5k֤eee%&&Ko[ ^/ƍ˗/ߺuM.]ѣlH)hࢢ֭[W__ߓ#zjA_ٍ76mĖJ޽{_ܱcGNNNcc#yiO~Q&/13_EA_i~AN\vҥ7 ܹsZV.>}z CLL ܷo߳gذ6?a!!!7ogcݐ椭֭[Vn6.@~ٺFB~ f7nXv/B %%%T߾}wMű1gΜL:vؑ#GVVVSWWx֭{={,==]ղaҀG6ɲe˄yݐ^FFF޼yӧǏ i_vfxG l]#x!7n(ʨC_ʕ[1/_6~8uTV^-\q:Myfϟ?z*,ehwœ6~Y,u @)**bYonQxx٭"Seeeرcdž HHHiU*{w}&ehwd 6/:33#_EA_Y~ᅦ444juAAѣGͶ2 k׮}YYYپ}{m-͹cKMرclqŊfEgfw 52 13/}v+#\aiCziMmuffx!l]#x!xCׯ7/"[ ^/8gLLLllluu;_EA_pѐ_EA_@C~ٺFB~} Xd 1`kd/ǐ_EA_@C~ٺFB~} Xd 1`kd/ǐ_EA_@C~ٺFB~} Xd 1`kd/ǐ_E}S ?M RyĮ]>󤤤#GZ}_Ы vrrׯߨQF1p>) 1v|5xtfĶ~~&233iСC0T ғB~ V/z]\\M{%K*++WXQVVӍ9:xɮNڗ48L2`hQw͋U4̞D}_t!H8t͓鵊`fi>^`Z~VM2e޼yӿ5kVee={^x{&6lm;{M(r߾}˖-cksθ87|rJ6ǍT*x{]t)rttLMMH$Ϝ93++wJ;99"ml]zS@p>4`)F}U`REyA-Bq 8yvarEBd2N" B@y"!^E*VyE&'[m(642.5R& cfSFJ[*.4hg}RUUEѣ:rm۶XPZNKK`/2 )))9hF3'hGݻw'''SYYYAA 8Ύһ`\yMChټ@ECu &f̘)")U4FESqQ\1^ cTy_}&2VgWYm:HR F LF/3ym,I|JKAHOOgLvvvoɒ%;w<|imZZڜ9sڝ {GG糗ΣGf]㏅@3~)9u: 5ZtR| ///AGB 4`0/\\\dޞ&]YfѢEɗ/_N=9#99f ׯM75ddh|hټ:ECujԩS~aL&WФ `%-e&pD*1 \*ȅ ى- OBwT KU-p*i)*R#\= u9=C|Cr$qydot|aj9Zs1cP1j*KPvZgg삂?rH?77J.C>}ɓ&YYYq2lmVƍM0ZE:pSOpp0$)-- 75lذXӿ8tV{ ѲyuqE[TνfvX_A腇MHchȓZu~Oh!Hc0 e/bY@ FjR[hZo詠1Ib[]*nС?}0vwwoѣGi/_| gz*#""*++?|~.`u,Yd޼yUUU$''ѱBcXzB1bQ&›9sG,\o߾ɓ'NӧOdUTT[fG.$/7EѡC Y2BA~ Z6N:n>ߐ"XidC[+!fB7Y=DCH: 4m.H-)UL` Ĥm~]/ЫdEU.ƍ.F`7M jY_ݙYYY,ػw/`0( 6ʕ+ ّlݺM/ƍ7o^;z(R̒''';;'&&n۶/h՞={h#GȈ Ѳyuq[Ś5khM*t>HxS.0K%/4pu"3 y 0/4_s5EHd{[\V)t7/ vT@>T, O>M?,^vJ?Mf:ϗ_~I# '|RTTD$Uqqqy f*F.YDNrPZ_̘1cЛV%&&>tB~ Z6N:n>{+P[;p[չ¨Fڳ\#VIcTi`X\<(')( P+WFZ-s$8H#t \G*1$UK.zӔrY?H6RyXe#wttׯߪUcǨJV(J1cưRN^@l^uܺ}nV~N_icF(uu%y {^}%J,o9ѵi7 T W[> ?|Μ9|iTtjѱܹ?f͚E5` YÇi@FF2}[. @&z~駴`uԩSLIIItMu۷5=/zu;AXlcǎR*v:RG;dÆ vvvaaaT4D"1 Ǐv՘1c&MDk_^^^~~~4جǧ#Wy&Ol;!%bfmXXݫfyXH6>1cph8mnӺFn~zr惚Oi=4Aϟ>ocZmJeg϶N7FKv''iӦUVVP=dww/X Z1y!mRYOܝZ6σYO?~H MM C!|qҫyW+<+/ ^u5ݽS^}SLWm>_[o*+WVVV^ᘘ) R%mlz~?,n{+)k Kik7_klg:zƽTܩ粌wŖ繗Z^+>gJCΔv-q6 o*awwwvĘ1c7;B~ Z]$뚚nޤw5K"o665?1/h9酺Tm uӦ#ыa+NuF~ٺFB~ Z/#uF>xz4o-{確U~SqS\Q_{']~nP4TN~a~>8jmn>_EA_Vk MMO߻ǵG #ڊVID_/^ܭ7/sf|qvyHcoݻ<)䑣٭6 8X IDAT52 l?+:hzuf/tYԢ&9Ca߸m᯿P}1+/#hoS,u @:YC>iljxl5)7WRT?jV_m A'ܮoyFs;s'|_EA_ͫS4[m`kd/e sXd hټ:ECuF~ٺFB~ Z6N:n>_EA_ͫS4[m`kd/e sXd hټ:ECuF~m њx\c R6 X@]wT4L:?}n#_%/ČJD\&FdO‹&` c/"` c/"` c/"` c/"` 1e| tfF~!K_.^B$=0_E/Wpt~v{s` hm}D~!K_ 3F:9֭~ K_ 3G6vNBBB3%T--S&qB'M~.7 B~b&">>>2J" IOzYqV/\]]Əooo3dȐX B~b&"$$1III/F}~I=i$:Bz#M 6j߲z>\H0l#ޫ{no/D kNl޽/tehŵ~866ʕ+ӧOxrlXXXFm:9ܲe b׮]ǎ[~=R*|?s̍7}>8::^ Eff&>ǏcBҟY<`0$$`oM/܄Oދp%H!Nևu^NחgVgVUO}yzznMO>}*|u04/W_k0vc~rm#a-3,/2Tʷ+2"Z2.5=Y~Szkqqq{vjA^$~- ׿5sLvՆa^Zx_… m{h/eeeBǭ[ O?d믿ɟhu>{|{IixF k>JuUY0?B'0y_VU@M_߳ۄ7򋜜T ;B#LR ^N~L"Sѱ4&]J vu'|R\\LgZ6lؠAvA/#GΞ=Cfee-\قz[~*ꫯ~~~cǎr$hyʔ)k׮$3g←#9|0q1dPЄ4/%??ݸqcCCҥKe//ɓ'ڕ+W1cX@CþbϞ==)ŋt PǏO39sޑT*=t;~ZiӦ9s̝;"##wIoH/>ϟzFk5&V@X6k)kz>zh1_\u/|˄D_ /!M.(.W~a_/<Ӌ[$J*~Y. h'0_#iJ,HT_]mX%6m;ըpppY;9/?~ѣf>~]ׯ_{Қ Z`7PAAm2cƌ˗/S?:O>͂ vJ1cư.]jhhmmO?.?M׎;ŋ?ah_~CV9rvB3cWsqqq߲eKaa!mK;>pL﫪*$$A~ Z]kS4a9C./cՊ|߸ko?xrz OK} o>NUӷoq6lib/S)&)#W7dT3sbً(h*FZUq"?2gv +߿YEͰGVZe *=|ڵk{7YlsZh/|2-Ԛe[4O?TSSÎ^I0nܸ+Wx׷>y$_VVf9p@/mT*i޽{IKKc)?Lh09&>>ެg֭wAmn1/hiPW^5}GO 5o_4=JW'sTWpW[hښtħOS/ 12De:>ζG:88Gn޼9v/T/XX~)|1/_n~A=S׿|rԩ׮]{Ř1c'V,`Y=/6a//h<;0v{Lxٳg_|ʕ+{"'_h}߿СCr|ٲe6mbœ'Oÿ/_>|Уv۷oGEEmܸQ-\m%;wl\6mZf˴+W444?B;Ν;G?z}A1bD]w "ڊ>Oڵ;a„۷Ӷ4Ohh({Y'FΛ7ŋM&_ZZ(..޽{ \_V>/.>M=S-?\{t\pujU\+<.b/FΉ~X% }͛7M?ڵk?~ ZgΜSe2oŋS'Tl_5kְGZ7_F5Y"""h+*WԩSB~-,?}-Mիm@s _%/?N7..mϧ~JWO^^^P]]M.]?6_VWWES*<⧺޽EYr>R]Ly( S;8mO7]}fYuIɻoK.Gw^xtT~|ѣ{j݉'JU?b)m֯_/Rp 1,Y7{|2éqC'qyѢE +::ڵeȑvK! -_mm6r;_h E#6AK^ц$w-8^zF~2/@/ sYpaϞ=ǐ)WZOt]z/4֞p͐_#<_/))͛|A}}}FF':$<9O<1j(Yyzc_h:#GtN~G/3 x!tF~ ;"/p@[<_h:#G_ m;t ox93lp_hkɓI'09'̔#_- C~3)G2YXYlOx!?F E~w/t2 E~w/t2 E~w/t2 E~w/t2 p@g?8>t` Tˮ- S;K2)wC8qbccW_}՞52E~ׇu?*/(/?l>U7.dK(:VnI+,n/e6TSv{Z169\[E4ߦ-\j ];d\ݥ].IN]8:,ȷˢIst^qO֗;G/27KHXRGېٓ)y٘v(^5gΜvFޮ/ m>ZL9֔y31v+'rGoR qg/,K).I/=c6IK)?i%RY&KKP.-ҭִcֆfSڹodG.-rq/U;:mYǢ-G.E^~vhG>|~#[~BvjhjeHG_u2B1KXSw~K^|){)7!w sBǀ5{ovv,52E~/gSL9%9:l*<6ՔrVŜ~Ap¥Rsww 2LQecY;Tdzsi-~~xhEddcdЃJ,ENJJ|oOfeeM2Ƥ`_R sTW^ z+^ ߹go:B0gYG]7K#y1Ҿi~JZ/wpʎBS&nϯٳg9v }_h7kpƹ2SαD+97sƩz0"溻jw/pKݙGFrs;IZpٙ9s 4ͦuZ-^zIx֭~ZT -rO_E,ANֿ[  _t/-t~p/?,a645X; @.]^{)a1[O Wm|NCIorJkB\ү7dY?C{>/K/=P 9((hӦM~֭[fΜʣ˗/lz6mڑ#G^|ŶMXm>N/Ey3 ? j:r |#5}g֨sT;M-7.9dwq^ܑw^\U"\mӵS)ݮLn?S5ިozx IDAT{[H1ZW^gϞu}S^z5!GJ>ZRRo'￸̰tnjO=r% Ь?ώHIyn,Y=°ӿ65ɺ=KCSC.Ҝ)=j߳b>;rKW)^uJ~O|gGi}~˖-r.gFr'6L~(DEE|(+&LHJJ2)?QINN6KKKwe|ܻwի]%Kt m=//n\9)'pEj=R} Gq 4һ/WmV-7]tx)URb__)^x)JUI/СO?ҥڵkej4蘘1 ܷaL̔Yie[ qTx; e﹆ӎQF?=Ef͚6m`3gΔȑ#2˗x#3Fw!;ʰYA'M$ٜL"S7lٲEKΝ; {&LcϞ=귚>}j@[ju^M7ܨ# ìYbccSj}7;V__rʮ xMM%,aN swPߛSh; yg]20`f3.vsiԨQ2Ν;v{jjjZZڦMd>XlzEWgn?5PWsHaҥ2fff$srr\QpwX,֭['O؟KsH~t_͛۷o~S̟ UuMGպ~~~f*++{GbbbT(رCQ|ʕ+?w6/d%))IP]aZA233UCsh_rٷO>i@[٣_H3bY6lX=}V3q#TOZ744gQ)CZ_+CuNHHǏF??L.0^S9x`W7%KH4G~- /rw{"&&Fֻw^XXXQQѧOyɾƍ0aBZZ`'霛;b頞٫W/_ F~Ϫ'N>}̘1)))o!CdÇGGGϞ={ٲeaθDJw9|+W._<**J{"/[v}yyyիW # 6/oa۷n*ׯuرcqʕQ;..N=b6mӧO>Fj*i5!ED>L"22c4m_h:#Gx8p5k<1P]طo߇ٛDd2### 4H|@[<52E~- "ȼCo,3S6N~]#C_xd҉j" FI93lp52E~3)G2YXYlOxD~xF/t2 "/kd@'#[ޮ/ nyF/t;Y4\:p52E~-ޟ =uS]#C_ޮ/ m;Dx=ə)gw'[ޮ/ mrޞV{O "tF~v }_h:#GxF/E~_#]#C_"/ޮ/ m_@go/3 xkd@[<52E~VևuOfeUemoyY̍ oܸV7dIZij>QXt$d{`(;vk/}.嗗$=PT_sv}x)_fx,ps&3e2 8]ɲN"GxF/ɲc9fSt뱔?הrJ\"ڴsʙ.+MfS%n*?m)8]w9d)sJ䘫U'ᲾgYH{t)u TTc&W2RkQlMc.ۘͧ }_#]#C_zVŜ~vj lMr==ǜvc՝+39ӊnmΖDX*835/Hri/u/s^!L/n_䗑_</ޮ/ mn6~I/t__{!sMSrsm#MgU~QwjX_;Q_B~ԥd]˧A~v }_hŃ,pjHo;_3K̕M5c q9?ctK8k|8;\"_q/dk7;uMwv񞑜#]$겋8yԺKY>Mc1yP~;Ioڐ_d}-.1ǥDN$ϸ{mqMMNs%=K$qXٔ_8 Zz=l/Zh9phh m>lu nVt܄ GtBs۷{p@'@~/"Gtx"gϞm~mպjժ $+ޭ%00g^/3 xDGպaaa_z饘pi W^yfmݺU3ft֭q|}}q/";;{˖-ZgA:nAAAGrڳgϗ_~ tF~BWO2`^\;4 4ˏ0k֬AuN@[h޽C۶m4iǑ|Ȑ!6j5J5FFFk󥥫էOKJͯ _^l٢EdLVYY9uɓ'IKtt… ccch'N޽eGi7f%eiC}"""6"le[oկ__***3fL``+",2`BB|W_}uʔ)_/E~_#:Еz^B\zQQ]`qtnϞ=۵=44Uw{Qk(cǎλv2Æ %%%z:tkKdddHH +7ڏ9"=}}}]-S2eڴi-V&P4Z8 cǎ_՘./E~_#_JSO}'RQ>ݺu[p|Ζ1"%%'x>w7;w,//oVKUĉm6}ǎr 6H+"uL ,,L ?X?̘1#44tŲ522R9gΜ^zI&o1112ZQQϜ9S:#kcƌ{FDD 8p„ AAAyyy=zcʎ c2+q~VK~:66V>}4[N:ӧ!tF~h2dJ17lP`~{25133BJz׼#((j&''>|X&e[W5*P=}||-ZEIIlV߿eeD:7Θå%'''))I'15[S<]g뺮.NVͪÑ_hkdޡ7nx{ș)gw'[R9Y~^iojҽq¤we\ l"SO=_e٤n͐}uf2{N݂!cJI&BvuB=JsС|&9n kd.fۆ/串_-Szn_hkɓI'09'̔#_)t;?cu+D`` ?iڵWn1w\kc)U=㓕 !!!ݺuSWB]![7n(?Lu_4/]]0~xc>#FF]ݼDMW^ƻBj £Gnٲeʕ߮:qd!SEEMhARW[>S ~ҤI^jd*;SǏ믧 f͒>gYf"{7B3gN׭[.X|,[e77n\^^ {?b(={eԗd}቉E wxiӦ=_4D~CZjÆ K.|_dpjݧzOݿQQQqqiii/lݲekPO>}\޷Ս*۶m+--UϿ0Fرcl5jl/ZyyyCi 6LkTuF~dGwn-6nhlMJJzzBBq]˜{1k,AfRVV@'#[Xh "\/B>} ^>rJXY7G:tK5nҹo߾cƌ1Zddjݗ{p _]Z?fKKK?ΛV/t2 剺w„ 'O6^4n8͖.ٳu>޺w^RRrС#F'>>^~l@'#[~]͟?_EI=jժ9gΜ9m)fmrx~' yuխ[7Ui8{sU>}l\9Oyƣ@[#^@Orf/kd@[՞nyF/E~_#]#C_"/ޮ/ m_@go/3 xkd@[<52E~- "tF~v }_haeYeYv~[^a?s37UYxҮVjO%I,.{lV+e՗.:~@e MYFc1?uV[h"V+Ë'RKKEMGҭRO\Sb)I4զS\wYi,6r,v[VhKi#h>.w)0Tn1 E{L53Q{5Z2SvɫtC~v }_h![s9uaES9)_ִ.+siw7sSNFG1S9t]b1GMo7DXՇF\ <52E~3pp%{:o9+wMen︒cgy&K3q)g45oq̔s55לMoڗ_͖{򋦦+5BkVaw-WV\|91&<~/ޮ/ mn6~I/tD__iv!FB.579tuBoqwbs1<52E~v~E©!AwyZJkֵўcjbc8_r-= +o6K~Q'k._Qps淐Tߛ_'.]~ʕWgd${}EutB x<_#]#C_jC~qvR/,.1ǥDGc$?i%z79l.;`7%hj.ϻ$Q<^/ޮ/ m>lu7<~4͙3nO>gϞ"ǒMQ2 ޣGbBl2d8IWg 2fbb1Ϡ i^pall|S'O^bO?ms/bHHq߾}CC[:ZW摪 )Uc``o򋘘Β~˖-2{Z6Mɑhev]^F;l05j5jԔ)SdF˴iӂ*1oRR1sz*/aFˁ:/8t(1&Lp|'|u6~~aBBB=Zd2TÇAx;vP7<<駟U XB6RKzi߰aY`Ϛ5k̘1%ϯtMJKKdaaa2 o>#KfEHHȞ={ ӧO˗dk||tR:gΜ^zIx Ǖ/ns2eL^s޽i„ Ʒ9sj*cl@'#[[J9mH{ٳT~a\4)w!푑]<2;;[nX,":HHH]'/III˖-1ǍyU _gpH似k׮fb5jTkvWe͛SRR*(//ݻw;EffE>=zT fŋ+**.2nOJJC>j]WTTT+3~|~gjj 22R]6"*cʕ=\YYȅ2I&3Ts5om<@'#[^իY~a<7<::ڵY~!JKK #ClV|v񎒢"uckXhr~ݻϓO>i4~W?"33 *mY~<Ǝ+GDȀ.GJ\z1ZllVo@:؊744T|֭j|-ˌ3:X"22R}aAɾGe2i6wlU6kԬX'_dpËށ_?'Nc/t2 "/kd@'#[ޮ/ nyF/t2 "/kd@'#[ޮ=d2{{"$ nyFÇ`oOC~_-oͅjEP'>" PYYdɒ={_dp5=BCC?>>> , ӧ'&&Θ13ѣtXt4DDDAdɓ: ݾa܂WdL$!&N寭+ nyFGhhhBBn/..|'_uǁѣm6јr_] |r722R'%%ܹwիWWXd/t2 UUUG4hO?|r6-Y$!!k=>5ŋm6[޽"888+++77W:P{)((P7L>|>NF~]#Cv}188xΝ1555--mӦMj=66 .TDkݻw[,u[9m&x nyF_L43رcGUUUIIIiEEElڴi*꼼Bi92BAAA>}uF~_-oh_eeeSCBB:'JmX{R,Y">㊊9x`W7E`ջ_\O:v|0_;Aļy󪪪Ǎ7a„44mڴ^ziĈ_}lV5V^-T2"fsff1BAAAdd׾/t2 ;###_|HC #/kd@grz?^?Iۛ7ovαH#[ޮ/ }wo}9slذʕ+kܹkpBGV&ٚp52E~wU덍7oOjk#[ޮ/ 5K">駟?FjT:tb/2NUU/^f͚Jinذ!>>>%%_ꜜ߮]6!!a׮]׮]SEEEׯƴQZԽ*7o4˗/_dIFFƯP![ޮ/ }w˗/?!+)))ũ>_}'|l;T [bl_.]k\!-Z׿QG>gCCÎ;_׻{ƍ[n]pAvQ='Y͕.׮]Z Cp52E~.666==}˖-۳goU 6/VAAA>>>ѣeeUN ]dI^Z!,,Lv|w-]VZ!!!G``.߫0>>C^&[XϘ1no߾fСCEVzF>}}xm^U!x:dȐ!2ڵkUumT5v"Ж׫S6p])7nX^yyAZ!$$$++"22R <3>}zbb3:2d >iҤ>--rԩ'O6mZ~'Nؽ{/[,66V +V5kք dX&"=z뭾}v("Ж׫S6pj0xUZQQQgϞ|#Xtiˏݷmfۇ b\!߿EEEFn7NIMM )---//79rw~~~vRjѣG2~G^&[R膅O2WW_}?I6um͚5q3f8p` Cv۷]˥%...$$$>>^E!AAAV?8/^\YY.0`'%%ɾEEE̙3}ժU3lM6Ictt4ĢdeΜ98rȗ^zC~G^&[R膅=䓮Yԭ[7M֭ky#GfggλvvܩHKK۴iZWErrr;fݻwWg~!}T~QRRb6CHv{NF(//=zt/H#Ж׫S6pj^zjxBӧϮ]ԥ;vP7ߑBp5.#&&F-ٷo_yy4ׯZ ٬n'QO=#Ж׫S6pjݻk #}3ɉ:tABCCCBB A+++SSS{)Auk׮U;K/d͛7K-[CZV"##e}"Ж׫S6pߙg\y|G Y~}JJԩS'NW1o޼*WǍ7a„w޽/>|x߾}32bcceBt/<(S]zuo޽yI&޽{e*"ϗf-ϞRk[XXڱ&[X'''Wgن  ۶m3vu{X~|4ǎ+E5jdrիW>|x߾}j9zeeI  SVV&=e#Guu[zblt-_>giM~:5sN# 8tzbi###G9f̘7 vrm4hkշoߖ*-- 72uS m=\1eڦ]Ҟ6wԩAAA~/F3tfΝ'Oݻi>\VV;[~zJ2VSÿ +,/X<&[~srrlܨRTToz{R!T5uMMgJKm ٛ"##?Z_Fֱu-ʯ2_x~iM~]#C_juYr׫.]r,W~mj_A~6v }_he_%+jTgZHIY޿h^|n_-oZYCvjKK֕6ݺnP:ڍK^|n_-o^&[ޮ/ my:eaiyiM~]#C_zusnyF/ꔅ6v }_h) KKm "Ж׫S6p52E~-W,,-/m>/kd@[^NYXZ^|n_-oZ^[lM~]#C_J:Q=!,,/rfsnyF/t&%"Wa9ٞ-v }_dp52E~_-oNF~]#C_:v }_lɓ#x ^rf&[ޮ/ mItޞp9'lOA~]#C_wz3S6N~]#C_2嘽=p52E~- "tF~v }_h:#GxF/E~_#]#C_"/UBhhhㄅH7Ed4C tF~B7$$?>>>E֭>|q|||^~ݻwKk׮UVEDD=0SPBCC-[fcbb]7),,Ҭ]-4iR tF~B7$$dĈwoΝ;ݍ<}*͖'ųn6lCd0']chhh||.v C4V "G_v$+4"1F~ׇuOO]r]0tdIZg˲*KL37gnB~ŝ;F~B7$$d̘1}Qppu뒒zal2)?ٳq***"##U̙cNK/Æ >}_{IF;,X <<3ɓ'Xb֬Y&L1c;VvWCI__iӦOh٤˔ҥK-[vo! m>.5J]U2ڍ衺ؒxzSSmZ9{ZL9yi֒Ғc.6Sb)qAnXV|,AeʔJc(e?j}}xj*se"ǜrG4[fXi5(Y7XM9{ iC~B/{NWå>x3[J{߾}bҥWfffjjjRRREEbe5kdJ׮]B~!d_:L>]="TE$999GvsqB~FSCVtxS<%/葄qG[/n_١xT_#:5@C矷&Pk.uk~!6o,z)պo>ȁ;v.E:Hrٷ_~* ?P+ ,Pz/**ݻwZ!V Gp#e8wlyE~IǏ9y7 oݨA_, xD;}||V\ aGg޽ UAAAᕕ*2V۷osu}HBB=-$2͛}%)))*k~g' ` #1bB:ƪC]_h]ESo L9G:{Z;G~B/^}*~3q֯_2uԉ'fggLA~d  ;xz[QQ!ӧO)PoR|֭{޽z/W^ye{o? IDATm6#pŢZbbbBCCccc Mƍ|PEYY1ʕ+  utv*∈so69r䈊',W|ا1TAA 3{uC~6j\%É(G~/=&j4owG_#:}9sܹ"##G9f̘fF2Laaa~~~k׮5,3^.֐ɨ/AZ#ǽ]M}mc=p|6mS/Ģ_@2lazFEas>裙ܩb/ 0=#C.X HF-LȐ~ /` 32_Ed b/ 0=#C.XYM ꓩ>}ޝ~LȐ~ ֞]U$ H>ꓩ>}> !@25"fy:\N^gVE~n!@/r/$ !@/r/$ !@2KwFgdEB& !@,QdRL $dzF\ ._HV> $dzF\ ~[!@,$_gdE~r/Ģ_@2lazF\ ~[!@,$_gdE~r/|?_q޲`dksK4n(9X^Yn>[VQ4Wz/m_p&ܫ=sq_gdEak}2AWP^q"dpc[xjҸq_+.k sOWQNi1D-LȐ~ VӅNG~Yd"˳t^~EM'R+\c;֕G6/_跂7V{.o{E;wlazF\ z1^9:٥G}Zu:N[UzNq;sk+>r~Ep0~[!@^͇ϭȯӷhp mq9_霱'H$"䜋ų^ EX>\i=9eEye} V_qg_gdEa~3Y ^r攟V|y܎V/Nyͧ#!w(]>׏:msLp_gdEbo_Dnl?Wp]GQső;)KxY-7$^zͥ&Ț+ͷr/{#_DN(V(X䱩5~OثcyuV\(eHW5z3qr/ĺ0=#C.X HF-LȐ~ /` 32_Ed b/ 0=#C.X HF-LȐ~ /` 32_Ed bey6-.O|yw2=#C.X{wUU0 LO| $dzF\ Ԉ9p9yR[aazF\ IF@BgdEd $dzF\ IF@BgdEd $dzF\ ɸ'// !@, x~*ldzF\ ^rfTјpr:\J ϞPk{}MjqUz'[{8+vnܷ?lazF\ z1֗O_ 7;\ős1 ~Z;"P%fY}Wu/=`-o7_gdEWa Pʎ;sCCqG~qN3Wћ~Q_DƉs`(_0=#C.Xu]NG^o12Z4+!`8 _r-ѓ~WWUWQ,n_DϿh lazF\ z16VC5n$2ח8\pA#w6lazF\ z<6<\>L$xa˹~) nVU~ˍMD$+zFqs~[!@· EX8;\E}ޝ~LȐ~ 4+ ~LȐ~ /` 32_Ed b/ 0=#C.X HF-LȐ~ /` 32_Ed b/ 0=#C.X=r]l*Vx|ۉ|[ V.8Ko\K-|`i"R׶BGK_ w&lazF\ z>Vr:NԪ'{oٙEHh):V-ql;6n7>Z8Vf5m٫zsOշX?+vn;8D Or/E𺗞M{]O8_Wo 8ygZcoWN׏sʓS۱_,ů^ۮ_5^/` 32_~Aӑ_RŽtTۺrWK)*r<ыJz/*j)pG_gdE"nEqfV6Dι7|ٺ_DDk`QP_Ԕznւ[ x't^_sxG-LȐ~ V_EoHA8:ߊ.u9~ Ցp~WWUWQ,nI`nr/sjr6՗;\h:Էxrovkp_gdE"j_Õ@K]΃n ?yHI%F.ZyiдH}t.#EQˍXkz[`r/|{&mqVŕs+>ѫ ;]RHh]pl㚎B-LȐ~ Vȓ>ǜKXhi7v2'E\_gdE'a"<XIE-LȐ~ Vοh_il f b|؍~[!@,$_gdE~r/Ģ_@2lazF\ ~[!@,ѦV-'S}>; !@=ջ*IF}&'S}>|2=#C.djDuxyċ00=#C.$_ !32_H22=#C.$_ !32_H22=#C.$_ !32_H22=#C.$_ !32_H22=#C.$_ !32_H22=#C.$_ !32_H22=#C.$_ !32_H22=#C.$_ !32_H22=#C.$_ !32_H22=#C.$_ !32_H22=#C.$_ !32_HV}P=Ϩ`ڵkze[[5~3ŋP(4 !@%};\0liifu ߯_zw~ߞ8qɓw^n]]]] Bz_ӓ;"LȐ~ _ :d ~/<{!C 4K_wߝSge~!r/$Y]?6 }yU14g}v˗JsofII_ӓ;"LȐ~ _׮]gRP(T\\?zZP^xG„&#$zAC5=# ,/GX%B?D_OmBGOÌZqF&32_Hp8_6bLaE -[]X^[m;6rHm ,EO{^/vgUo~H8vN5Ҭ]6%%eСۗr/$Y/zYM&!h6P+u(jMIIɗ>|A ,#Rk2-Cv,4}.ꭝ;wurm ,aЅ"X^z>y7mkuuu`0h1կ 0tA/n_gdEd  BpĊ%K| _78p'kcwܱc ezF\ Ie˖1x`uȑ{Wۚr/$Y =$ ?7o^jjjSƬY\zڵk+Vꆦ6+Jߪ:/D1=#C.$Kx O>dٲeN:4t>W*_xP(K/YbȐ!)qt zz%B32_HֶvZ+1ts1HjjSNp#e&jAnaDCg$+aazF\ I;aÆ 0`P~kjaaQ_ou+Fo?~qfϞV=Z-Ϝ9lʔ)jڸdhѢZ~{P &X[N>]?eڴi 1=#C.$K5dgg[E;Vt/tWo~SG ]1l 늒K{J.=~)((P+333gk۷5o.\^Ǐ_dɨh{{Pʽ{ZܷoZկ~U-ر#~ݻwc>0 ,au'N]19C1bCFo~@ѝBjŊ7o>|K6x!jƍn/fϞzշ6lxW~qƍbԐ5/_ع_ڵKbm#+222r/$v999)aÆY$Jjc}ņ NS}HgdEd)zI?3U/%K`Ϲmz*Z$!փEןg/_~?Us=֖/v1>JAl׮]jղVK.4iK/ovG)o~H-oV~fDx!a3qovXs&LgZ.%rb{ہ~ RthkkVi$򗿴Nؽ{ʕ+_|ҧcL:駟7l2U͛H}v}au OŭB͖eeegϞU#^6S/vء;.EFFƑ#G>,f%ܝѣGϜ9S/_PLפOo$O׾g~=?ĉcǎ1cFt,ZZoy3i,rH0H[[u JIIQjJ={Uf=TߧS ?ǣ'?QGgϞ}ZڸšCvD٣֫_i_W?ָ^{mEqqQVPV\i]*/ۧwY~}; z-?nܝ =gΜ"M6=#c9S{x'3~5kw}G/_\0aBzz3߿ .\3Ϩ'M_HHZZh:tСCNj=9U_?2$J'aÆ92--mĈh{n}@ c/h7ԽsΒ};芡/їtByw: {.L?~O<裏1cƨW^r~K}}[G֍C;vUIDATZ6P۫)SXB59Z] F_ѹ_oE>Kk׮]xq¢R?tժU>`?ى~ ɮ_?xD}} 樴ZOQPXuC-뮡'O R1}1:[SHfӧᑢ+gL4i:j!33sƍ?zFFC=֨mfΜZjœuCYdZ6*;;{޼yjAf͚e˖M8qWV;XB-O^vQ/iʕ c BйsZ̘1cڴis_3f֬Y7/$Y=tB$W^.5n1"#"5XCղ±|gj ?v :3ML8W_ǍqF|HOO'fڴiذauX|'֭Ǐ?o޼0{l^-̙3gׯ5kV~1i$-c̙~ &t/tXbŢE_& IG.CSS#F g^ 2$l z(r#GT[qquMm6 W]?o"##g5kVff>⡇JOOUB_-Ǐ~ǍT+,XС_U'}{ӦM_h6l2elɒ%ַ:{~~]H%_Hܠ^,tEXtSoftwareYandex.Disk (http://disk.yandex.ru)\ IENDB`django-uwsgi-0.2.2/docs/screenshots/screenshot5.png0000644000076600000240000015554213332714254023361 0ustar MechanisMstaff00000000000000PNG  IHDRf IDATxO?@bE)\Ŋ7(">'9dCOېNN8 6iM(.L!Zkf<87/}Ԓa<^< pJ5@PQAE]u T5@PQAE]u T5@PQAE]u T5@PQAE]u T5@PQAE]u T5@ムxڼ14!Bv!Bi Q BHh?5!ǯ8@C5! ~mA!k;u B!4_qkB!Aڎ4D]B! v!Bi Q BHh!Bį8@C5! ~mA!k;PúW_}f}J]BihklmmQ B'~m;ϟ?A!Oڎ4^u?ǏkB! q?F"qcmHoH?~|A!v!usl;/֏?/~hyu9U/qCk7|ߍ&";MѰ~_uT]!;DU8ڻ!_{ź [Y>Ztx뼐?o9hSHr3]xVoYze/]:q-V%W?M!EoNa]L{5no1v !V{YwzúFzljuWŃS7쇻5S U(r~Uk_gSxio_md߯!}>Vޫo~ϗ۪NB7}e E(M:|uʂHe W9a?cՍ_=AOd:fy;ݾq~#Җ;gu7o>^z577uKn}u} /B:<ޥ133/Kk~: <>Xz]tׅ- V"'k7I(]ĺFɞsA u"]9vc_cgQˑOBH+hfyƓ'O޽|>: ׿HoHQݧܮzH%-#o΍_om~(֝PBA,Cuu ~(}uي˗lSiJA!߽8uCF=v-sR̖׿}}K~B=[i&hX/޿vw8 t]Ï,o$ncA*r1OB6~mjXx?'>sgOR B'~mjXx[k*e`>!>k;Púo~uppP9_~M]Biha]T*_޼yݥA!Oڎ4԰mX,R B'~mzk!>k;Pú߷MMӨkB! 5k<|{Z]]A!Oڎ4԰5!ǯ8@C5! ~mzߺƧ7g>NiBH{Ư8@C[xjxr_kB! 5ɋ u B!v5"u B!}vS5~y?7T^~k/kB! ovkB! 5aٿկ ;P B'~mzߺ-~Ϳ_woWjc+c]:W5!_q޷LOwܧ3u{v_|kB! W]c៷}P_B]Bih7o<~ɷw}jmvSBHů8@CRט~E s7?S B*~mz|.E ϩkB!m 5k|:{wEW}\z/|H5^3k;PúwūÍjY{[?xf>Uڎ4԰ͳ;ߞ'SQk`~mjXx|Pk*ſٞZ@k;Pú߾U Ic5k 5k(Tgc/S'7%6~Q}ha]C{U"kFڎ4԰u}w 5kqޜc2vS42p~:s)Fi3/2/|Q엠^E* L~.;~eWsI3V7$U2|>5Xռ-g_Cf\կBF 4e`탪գoh|N:9*W`S_֮N)Ǘ6Vfޡkq{T¤Y덮n.>ܫh_WmoTLv_`)?5UͶקS퇘_&ϬW3?:K.>n}2j_] 񑒩/P9;\xn؊+^]0LDׇXvW>uڿzϯ8@C5v͙͝`g7*wdI5"3ѩ3r oݞ3Y ?~2;9eA HwtCצԯfd^Sn%ٍ݃Sၾ&5e؃L%؃+U"zp/gr¸fg)f&CF7Nz.9@lxV2|cv?fޜU3vBV#C{//ޜ3dazgo 33ssљr̨\ g}5.r3s jS㢋.gיּWsu)N%UKr7t볕QJ9׭SopS{ ܿh\mg}V٫YU)zeʷ"w%&Vl{}:~lnqM+/P7rJ\/˃/j&3[볫xJ'WC>P7|T=3kPk;PG5v7WG~.E`rL{P8`쟰*1=~yzU,ڎYwrgk@Mٺ+_ö܌(Cuk+2s*)~5ed #s q+ӗ{kePáfݣA[Cʽܐ{7=Ǥ" |j]19 *}wEZSEc1ԁ?JV>hkm޹t~Lc7ϙ>Wo{5./ްϪu9kTcgT!+~ dʟun`uxI5:^8g'MSj^g؝-du*lPzzGt㳰4zitѱZ~mOuY!E3~j}/2޶O0;qQiڀCu5AȓS3L]tq(r)2tqV:3%2rgoX_95ssf\QkX,M/zMZөއ}nZm:Q+BkdzkިH;_OC>ۿ:]?v̴?.j?ztw:ӯ8@C]*K'7nN_12G_*\ܱؕ$y |m]``_,uKW]O>ۭ>Iܓޫ\5N2/x5~\ы'5\k-ћeCF6kѩ5O+dāه/Y`ղz52~OmT_RzC ?2–?/}`ʊGZ+^Lן[ Gvּ{Lsʸs.h2'u:uE纡ֽ`s[ּI]й]}Uטu"Z?](QuϫؽolO&sV4(_`'N]>go7h3j|L-3o&Tנ9ͪ{]qIK̺%jkR?|_U7N^ultuWy!/M碮}ɤ|Iݾ8C$aV~ԛ/ZO/_Ap~bW}vm׹k߸>^JIHV6|~mvvݝ_=vt)3WݝƳu]ULOݷT{}*,Q|"mz.zߙڎ4D]4v! U5&50 Q hh8@C5@~mA]k;"|kgvEV8# k* k* kjͺF) GE%DTr!>1V{NHx0<6\h5r,YrW"##cfM;Sӱt\&ZپͦZ0x}9zy$<8KfO"ru\p8l^t& lJ/rdjn::6v7iD,UyĂV~=MrVnYnf.>i޻eTE4yU1 m`466ߓi3NK&j gol:*wL# 1(NY/GbȊ6^1KWOwWWwkpAzgNG{dKUyPZYGbrY./YesH|rD0R2m^{%Z5<"Ɉy8Dss岁g UW~T{bap|8<"*D#ˑK|=c-WWSRqj[^]Ef b?guzZ|$ܹںVc޼]1ܦa#Kl!) .e;yY(eOSZ1( cZO#1uhAn9j∪+H.rX܉jaBvi!?-~lZ'=,g xmD9WT|iUT0垏{~?':e^ʂѕtS+45~I:@5 1챏7΅&s- ţQz$ Zl EQ()ꑐZsxxBBFլW\',ȣ*%nAjr`.>R#4sKh=KWc'#1%kxp~ω>o U'ax*jU¨8jSZl8lRUרyU}Œ#:FCօs IDAT5z۫?@'hأ)y0y(u U`J/,8+F[뒮mj8/#%NdDQbL~mley-)J%nYb?2[Mr8A޻΂ñZ+h:N 5Z8ypJ8iɰ}w焵rAuײZrU6z#0?qhSEN˷(#[y EO\ rŐB Z&ME% t}uym=-O׉Pw"hG5±]Scy6D(z/_Ե`W~]U&0/w9zw]S3ztuL4S>ܢāsѼ^īp̮$u uݓd^=*іe>5*G;YqMs̱mªV2Al)?C$N۝">k xWDTWHY݂0[{TQv (a2hV[h;di{?yb &=wWT4z5ԅK{{z*q>ii&-oa|tkXWӊ\RzDDԽ‚\UId;zJLTC^eJ\s+pRWqf )O9_j ﹌V|"&Vsksn&- azSZQLJW{Yl@iݶCt$[(R]J MZn w g ۏW}=^:#NogkEû珏G4=]Tv^uw_^$; 7z=JbLhzA/W}zu rnd ߭5AuJ^GzYCBsTIiR*,Ʋ};J+Z^.jl5Ona_ :4, \d"t~, y{ E`yJԫ6:,߻3j-Tԛ+nƒT5뵧Tg[:DTCmQ*Mݿnzh7GᵎFT1qvQ1g'O WmY%8|֭k* k* k*h* k* k* ZQJ'#+|hj:\O赿,DS#%ma" M/'Ek͹KoX*Yӎt,>z&d)}^_^ Ē{5?2-5st>[::ҋ\*MzpZF:'sUr=?)z>2_wg1]͙G"Wb-xwd`m??@k02MGdwZAp>LɩZ~>,19-F#9BA =b谘7"GFW\cYْ&GU-Vcb؄\bV}Y=? ԰L^bby91ϹH|2"g^6Nh!z\y$i35=/;0y#}E^l! FWDʝ应F{W߼z|?Mg׳PwT?FZY5kx|kR=`P rŐBm]~M(#]°OWn{4~y] {'RzQOOvT-Z55*N'ȄE]v5\ecrӬw Nox5*Z8E;Gw=PD3d{Hv:EA>ŪkDBoTztRu syyy1Ь<>}Uװ/PUN9 luO1#B꺖b.i$[Ѝ:=oҒSn߼{^5k5p$Yvi[\]úV,cM "H_zH"[Sf(*]WR暓_ g|4[MyʉW8e\TS+E]7w3lAwMjE=^y|e55uuoΑl?JuW^hڦ_׊u[T5[8~qpzS=c^+=|\|N?2BUPwQ ON)yͻuyK4u!rvڶ?@'hvF72߄֚ F m%j#= =!WR%yIZw(8kYx&1@{zVUCs.:?s.xE?\^('ȓV괠^a-AU=ny2BcI5Sd~J'wǥEm}B5XPRhH :bSکFkǜuZ>-xB#B[fN(6ֺu QAE]u T5@PQAE]u T5@PQA[]583-5@PQAE]u T5@PQAE]u T5@PQAE]Uk5JDtd0LɩZ~>,19-F#9BA =b谘7"GFW\cYْ&GU-Vcb؄\bV}Y=? ԰L^bby91ϹH|2"g^6Nh!z\li3%=/;0y#}EܢāsѼ^īp̮$uuݓd^=*ю:?@V9`ɊE/hgmV5MTJu<%wR$aD^VC\ogCC]]jl݂8B>t:##?// /,اoi9[ luO1#B꺖b.i$[Ѝ:=osחGƒ#dd/191~/^w f Egb`ϖNj"J榣ciw-N\՟GOL,hdL!guQf֯ZF[dA^%&m6ׂu ca0dtZc|HWr'%S|X76ӻcrp[ʇG&s⇅e'zĬa1odE|;5 f=D=%M<[(,# ,Ŭ{$>9"~Na6/S-VsbsdDμlB"lιr*fduK{^v`D?Fx=10{8>HXbz~^˱eܫޫD9ϤZ"e{F3r3: c>lc\H \o^{昿K x~n0 r͑%UCӲR,a]Q)Ř\Mz-͑<7i 5qDUCQ$IED,DV0wj!;崐kznN 6-sڳv6S{**rK=2xeJ)Sew$y+sz=J/ZI[\]CXpc\k2R "P<lG;댮9_bn!ҭ 5G'*dq\zEu‚<* q\:!' ɯ# 9B3ֳ$z:A5ئMc+G/7@ɯSzaY1*C3mj8/#%NdDQbLEblXŴ(eؗ0溭f=[(1rn5%!`9z; ֣jkУ :-تjT)ᤦ%î=zMUWq֭_˺kU٨zZ^ʣ?zU o]˷(6y EO\ rŐB ~M(#\*JszZ/xDJ/iюjֳcC VŁlP^kPL`,_rn FE sgn߳h|Eu7By=Wᢋ]5{I'1ɼzUuT]vC]r^t=wv-j%k#<yJB鷺II^->ù9+ IDAT·ػq|uFF~^^A^ 4+XOp5=T5rI^-<5-bF22u-u\Huz]yD N+{{ݗ(Ży55MB9׹ =xh+5`Wאc´E8thfFCWܺi{o]x:G5@qkAiy[\]úV,ճ ' Ew$=%n&*o!u%e9q B88G]ߔȯyq\F+E+˹^Ե9yCVy70BU+f6nۡ9-G.(J MZn w g ۏW}=^:#NogkEû珏G4=]Tv^uw_^$; 7z=Jk Z!]э7ỵ78Q>}C[H#k\\]q9*3MJp=XֺoG)uY5QR -kA瀆UUМLΏ圡=ozy(,p"OZӂzC\{pUz<{uōXʺF|wߘ;_lz=_ghS[b]C1J%A7A#ZG}v_;(yMN ߧOZhq=$^q=Y>X5NF]u T5@PQAE]u T5@PQAE]ouڎAE]u T5@PQAE]u T5@PQAE]u T5@PQAE]u T5@PQAE]u T5@PQAE]u T5@PQAE]u T5@PQAE]ou !Bio X5!BH׾%cQ B!M_E]B!4-~[:u B!Ҵo X5!BH׾%cQ B!M_E]B!4-~[:u B!Ҵo X5!BH׾%cQ B!M_E]B!4-~[:u B!Ҵo X5!BH׾%cQ B!M_E]B!4-~[:u B!Ҵo X5!BH׾%cQ B!M_E]B!4-~[:u B!Ҵo X5!BH׾%cQ B!M_кg7ҏ!7n7<uC="B!׾%cիC?ʊž?|Įb|kPp]/1oVVՍgي]m+3T={+i'!BJwh$`u:_o_{eB Q8?.y3C?!qǁ^S=OE?KWXJT%::ky|zOtq$~OB! KDTzuͿ/jS~7bcd_ugՖ8^~]CZ"U̪vrnW5T;[rc˗=k+LU]îHu r5d3+?:t/'~uqkбSאeNUBm#W/@ݏVGI\93Tbe""Cn݋!ݧs:32{Sj= $bgߺW]  ][t-K<bAV"Ɵv{ŕF)* %QX|uk] lD/d{9ÑylJܖw׾%c1$ޖkLL\_C ʏVT wk \zxٮmEQtk E֝ %sF?1!ukWO.q =%2bWd%"gjeW2ZqmTTFGk OB_D3Ą^NUJfFREk5v3wĩGu'kr7IK Tb39sImu(P]Xs#Zw~Z0hFPf٫ȍ: }_BD(݃*+%FB9uCžlA^CNy(#;ڗ&֬klO ʭ靥YyY?.ɍݥ[tp֮}Љqyt.jG5^[k\LY\sk}l9eqZ^!{_ĺL~$ٝ0/8`hi /h`Jr.`F )!`mwaʭΔD㱝U.vwvs"2323un2w8דSu/SC-FGy0cӮGݿ?/)g ཱ\B>;#aBRk|m_. }_K5huX2f:'RԑkxMdG~~Gsw6y?v~k.Ό'{^/Bɪ`#mB?MP/?_DI. ;֝K$`ө?˟%k7oo(xTυ[?O2}M~G[/":GaGwv{ 0!\Q.ިԩMػ'=wi&ޥ78Nǹn^M͟k,<=E#,~kb v UCzg#s jw{*Tiय~wA{zmw:n0;p|-l,hvz^\Tǎ% Vh('Ff]>ej JFqWgPGe ?uyv༡&39v|*P?l"%=06I;r;R'j{cf5qTxW}f+G/.-zQ;je-{Qj괨Vى\;rRۿ@Gˁt8DHۣTW8 -mqbFn6 ŁLtr,|}YbrD6#Ԧ9%ktW/wWu'r<|} 8T$5~Ȃ-uaIudӎ1DnǶ Z鷩;1(tuN诵~Jl]K3Vшq6]$A7?uyj*=qcS#.dE0!S~8j{98Wo:g}A Tf>|wTi`QܸC~rڣlNޡ=_ҿ?H݄EuhnZ<^n4q:No<#%y}FG'E]A^<DO"WsJVZE&4;Z60X \^UQᕃ])fÑ Uiy0kN[,FjװkyQ–N#1oOsQok0U[7'fנ2Sj GV#?iXNhp*I~29n,%USxL+[ڔGښ'<k7!S; WWTTjH1`:zך*5[*.nH. Ed>TAU&$j۱Q\j[(LKJ.9yo5i_%hd\hZ\qfdRYցu3xv u%vXj?zv"!?R=wZ6~E'J''D֫yٌG 7{V2yBm /雵<j9tGz*'dI2b?:O_L1Ԭ4). .MY1h< /h|,STŸ́S^YeRNRlu+pP `j%Į1z{U>:]ݘLH-d5ݤC=}O5RtBk`v Uӧˏ*Dbv0T3yNF8hrS̺`T`iQxvJ&&@AgwFm Ͻd תHmMm]h`|\KiYn c/ z렸z ]ոK*Pl}d7jev =pBH)pIc 4ʘ={~}ňHRAd}9nsn:O"jӤOzK/L ?x{,Io}{(3zJٹzs/"LbYTT爢Ƙ%K]Gᴟ ]Qt.yQvQA-*jN~2 =h'+*D+%\SDJoO&W8һw^#Q!8RwIּEcUqH )QZh}=NZ۔`z[ oK2xf5T6[ ١Tn{l٬ְMelP)պZ?L'7h 6vgk*cE~Of۟9*f6٬a{ IDAT)ܶ?Ρ}BWv~46,MCb Gd,Ȥh7 N2.[WN9vOsU1ڇ LKxvKK<m8xHv$Ľ,_Xi0Zƙ?Mf<ڔJhrxnq1ͪ("<<B9Z-: Xva0}$%NJ'7Z$R.b]NO&ɥE Fd7{$]9|3Yh6ij|W{!^~dËYbwY;.5 e,}@3{y%~֋ gA B9f$Ñ)i"ОeN͘i|iB9K1@Viڬ==F'N]C g!##4iOx#sOuPrPPEBqDݟ]̪ie\T#[Ir@N>#-4qv)zEQR+V-_H Ա%1לj%>i0+:g׈=:*҈,5]K dƎ KRF7n>UE$ĘQpGp&̪牽#٥\6{N* [="CˮAY큲>šդl$Sb,:_oѮKt z}J4ݳTJ9V"x&S VYaqTt7zE~)yr!(5]S1Z#/zw.*=|v<;8Ke-f?m\Ye4<.^$~VnBw.f a>f^:O:P{ \ώOohۋ}™j]cPkDO ߽?ֆIUDj}(%'_^Y2`ysT⠻ tJҮfF a KR3=c YMʯ͕^+<+407MTl vIm"g'|"Em< a'U=R{Q! 9s?`<-IɬC+ldIW V0) $5=Jk,FPGX䶄/W*n?F}z:=TŮA.I_ojޡ#LE3tBԵG/|u*x|PR.;R5#$HLQЗhɉ*Gx*9H)kO鵯xˑ^,Ԭ0HG5!m 9bZp|>"@Qb҈̓5Ɲ~:vY3΅u6ʗ:Թɍ|a־-KC.F?xl8**v|+hVYkآhbu ֙ vl8Fj0|8"OyQ;Hzs&ڕFau/iAůxA6gSPj(3"9st:@6a— 5h>]&jû ŐvVQRU((9SуVQj./uIP?_#GZ E051u?=URXʧVV𬚔cxZ©Bױkb6*|@y+);DmbW:*OHk]Zl|X)S%W5ٕm5&|4,s1:m%(_  ]]0rOXaװ2X^iPn291dP/z]lG;}ds.Œڿ:tCU ƪYؿnE.P*S;[u)FN3Qڡc}(4Љ->E |p)2= u3%&[ȽWV8>峝 ڂfMY*H:ȨsςILlv,g_g1%ჾ8˾5m|\f2X›kв|y]0/@f G3/PB6.҅ -:gojƑȚq'iJqftVf`cE;e;#ӃW%qsv5$5W>OƁ09ohn&t9wەRR`YZԀ܂oZl:+lgҤ;_ck4#q}-7i`o\ ucXݘi{e%~_#]vHn؍{F+E t%'J/[?;J\wg+h]"n)Xr=Z|ᯌ-'摜Ƅ; >M{YŠ ȎqIuW.T.ۋdi+Z7;}uT%LyqZs!+WzR_d96}xd0]oFQE܎{ h6#UO>)xLz#eRffc`<:Iz>%xIf+R$p[vjF$mȍc^+jcOٴfVi6\w/tS  Ul43k/@{DŒ+^A\8ƻQTRpa` oͮ;d[a N½%)oDl鴤!+γ|WUkJ8UVĻvUY>/[>j޲ż!؋"uNs^kyyNsfdSnv\3L2-ku,:B~m3N,W5UAYjLsy_[-dn-k!?qb맱}7~|Rh`'U!,kG||[kNٳ3W{'NW[SV§ bS7`] n}Gz̅w[vϻ pxb7WA_&k`W] U`v5]v *[k|ۚ[bv5]v *k`W] U`v5qg!cBJ#$>oӉeQe!H0uQaKҐ>YluSd 'n\LI">LwꌟsN,?_Wr*bzZ՜P"VU^?у?9s]-C1LrsEpڝV\Å%%Kgx+84 uN;vۭ!B B~É:lu]X+wp#)d#%{}vfc1޿ZJGGwװXᜏ щ;*}Ηs Od)BxMR&ZWG8uTo. s%N8qOcp3O%9ܫxz=vGuP6q7.I]bU-Y#c9vFN*Osq/|*j20xD3/,s9ԓy,ULIã4(;YuΉ;1trYBOs1:SM;%R=Jx۝Q確.iXGd#ľocᥝC{C%{~xg$v0d/M8qNٺ |]FpP陜yc>N6iHz9=U!cf5qTxW}f+G/.-zQ;je-{Qj8])?P169H9lI{с4iq<:![GqZι p3m^AN#e*YbrDպӧ'>P΂mRrȿ@k^םd8u7,~Rُ_q ?%ޒQvsO; 랺]FjS1)ٻ]ȵd.9!8 :qf=?pTчg%Y9?K Y ѧA]=7nG9-߬Շlp}г(`{YG0#)4)Qo{ޝO[)jXTH+Ci֍{t#RUS/~=I竣%n e/UX`\ ᶓu[YGP_,zKģ M!9 {gv8Fpu'!uGnm %Y &Ař7Oͩ^[&և/C #rjN!?ϩ+cvtMX>Z7ሔvyܦI4.u<*v8ĝ-AL ee Ҟ{O;)V+(#5@RU5 4d5V+`I"+\v EIl]Ssj<) ρqR![0TKCM^zP:MlbO LONbK''L:1nudr+n!*V^2 7k-Oy"Ag9tGz*tI2b?:O_LS\9.)25Y'i~4 -|,STYV7pV:ے Y8 8Hjc/M<7MelPdD̔jS^-JOsINƢY?']}^m8F)U,Sso5jє%<oR#\7U{ %{I]tyCl˓e+Քp'/N\Oe(}GcDJIk, fdÊaL%.n y|2ףS/6&5V-*bɡfrCǞ {:m$1bW="8tJ.UJ7ĵA%119%6* YɉlykC\`l]Y{;a4m`9{[A\iy4d,e?Jw&Zݹ*;>-9 [ F^6D^r캟:}d7i׈&n]_Ss%< qnyW*VZ2:74}/dsƙ?l|)R/frq1UB} x ]CqljwA,U0>uJaQBMF㠡ˀƮj'&ɥe>&Iv>-gAVh6ij|W۶!ͦe`"W檠ټ]>/`I.^[*)Ê[r,;!S(>ٌdczc8r=%M/ۦGS3&s6M(~W4*7MǒV䜘,bz&Nf'b/bY rIRʹ$apj)m?e7lYǮk} ,dGZr\ IDATJ {+^_C% )۟ǦZȎ`1H/>D7=3>*սFb|{@ehx }ӣLQSlkطfX1IӽFo޸Ҫu1U|!IeS*qya)!%U6YNُEG&5h߇޲Wo3HY;Z:%0Sw{*^@:֙'N*xv Zl4OZ7;b"=w8|9-Ջ:%n?[Jj#@cܑVa2ɋm{Z8S-}X@kם %i:W`@+Q+C((9],&U85<}ye+_]݌@Xa3g6 'UBV3OmsBZk|WJ RYڛ&*6o^!DS'tXT4GA-D]{W׈ǧl}lt1Pm^:QYZI2;pڝdRV'kLf9'vh(Ib=G0ٗErXF& iG̬xs2 r%f.ḿ˹n˪>ˇes3|Ѧhb9GOқkKҐ ;(q9}ؠN>%J4G_ r% zZyi`Il:ޜ]C9ӎу? D(f>b@Ԏ9Cj+5˽$z)kAůxAϘfSPju+3")qt:@6a—@5h>]&jû Ő+*{QRU((9| Q;>Mkl*$v(ȟ@[dEFMbOֹչt&ѕ kk"R ѐ]ǮAu G'|y+);^D%`]Zl|X)9E ^5װ5ԕ]VhG3Ѕ}ue Gf@0 !u{Dbʽ?Eb]ڃXcy]CpPNnMȸ>_َVes.Œڿ:tCU ƪYؿnE.P*S;[u)FN3 q _S{2Bma8aJu F$j)jO|Kf?}Al|Dz4LmfdE["2tY4+MXŦyrjB>bgT}gr5NdtPuЌBLObkT TU}(T} NjǗcԽWOGp2gkhT5;UfOCcED}d7gנE_7!q [g׌ G3/PBZ* Arєt0#9Ɂ5lsٻ=FOҔOʹ?y$NJLwvFJ*ifr\!v #(*[ki?8&%~V=vf,/kj@kiÙQUfŦӾrKʯS4rt7d3H\pf;~%hW-i-V}7mD4!Ӝn3\)R8sIQzJ~&Dɑ"b|ӮQك8ɧ K,cY>WFHD'l Ѵ%`'n]BeH2(}sWL%1[Zi+O[̎8ŕ+Y([]zRiG!UJI1Jn;Ix^,u,6ZH!%ZuR5PI{$=:J6Q֥L̀r`6(qNLX~1 0 %z4DI]044WUirkPYKQ }1/Fѭc}u>`Nk7n_@j.l3,5asP'YUоV09d*ܫXPEaGtZ}`w>RϫുQ%kwnpayU""Tw|. _}RռeyuC#E+kyyNY5T9Ƶ[) :vcK蘙uX|` A ʒTK}U_djO|:uTtc-Ueb 6k+_Y*5ø] ~:Uo-5x'Lv{H룭gVG*bS7`] n ͅw[vϻ pxb=x ]v *k`W] U`v5lͮxwlkn U`v5]v *k`W] U`Ɖ !B<ǟ*= "ēM'1Fiq mGu-vBHCdպ@kBuZvWyF^ܗO&Wu 0 MgkwZs1L.&4|9fmZ%./ }'n=vbOX?D4e盍%|"{[c7j)U^"cs>.D'뿪9_G$|>Ы 5IhH|j]^Q5J|V?ܵiw8C׽u$Qw9tOzRZ'޽>NKXxYlK/lj Vt;aPUh@c<t;ݣ:x#S?*% W;'}XT,[0;:'y:%jt4RLcqWxtfV#'AI{ډOؗkvR{bbAڢs&XB'NjUON)#'}@Gˁt8DHۣTW8 -mqbFn6 ŁLt粨|i,s1>paSYpђ=zٿ@>;;p7'5oY&@l~K#%Xv&쫮{v'}N7uUobiWxxMb,L[jTq8D:<^5N]XP2Szp=5%W*4 LXQ۫ץ΃p-~SnݖQcu"ܬqs\eW4兀4DZ* eyRcyRױB븛^@WPe%_nG[,@USigD seU#.nm]ֶjtGNr %Y \7+L7-M9V-?;_x鴿}nRCyU\>)>(sOC`ŸCj2pfe oRYY@c"g75H״^ͤr|w}6n6@[]kRjC])jP}Y!d 3pV]#e^BNϭm]RreHÅm&%Qƨ]Կ%{NR@ZAҾ}qݡyiS*C+zٓZ9n(': 1uH$ \E<I^~a'XHls0Qf?%%s)LSULbYTb!:sD_c|ׯ]R8 d5O=7Xu.LBs΋7z *y(Cm?ISO exV_".U)뺵dr#Ip5+Un?xyd{[U'18WDiۧ<ѣn4WrLot+T?Vep fS5fF9 -*.=3ZWkρ'ɍ9ZDä ڃXcQy>tJ6A#Qԓq?Ykjww@4e Or=(H~*ܽ ^Խ.OR '5V)N6'_tST%LQh}Jf-Y23Y xSɷHȮ=f{H>PJ6dIcUJjj_́d,tijbpw$^"EP[6)Fb`1c-n [MFe;f;*)5sȬyH`m"ڤ՚O'o,w#dt꺸`\;[@v /CTImlB9vOsU1ڇ LKxvKd<l8xH+H-I{=ʻXR҂Ϲa{P9qO/[*1ڔJhr3:QŸv掘x> q<!ϱtPf6GWV ]L:I}Iܤ%~qPDe\cW IQQev VPRƢnǾy79g&иm(J)km2mCʦe` WZ3w\k',Q;)XtK5Sث]2?fRYiXrB NpR1r=rjOD,fӁvbxܑ=-lLH .L2<%*@j.3I<襋Dq=IŬaY`+g!ЈtO3׎RqTLt7zE~)yr! jg'>cFR_T~Ip׿OdEsь`<" v>ܚ&ϋ^.fϴm5W ڜK̗'*\kj}pG;\1GzHȥoZv 5H4\^,!*j?xH)[yb]QmװrcɻvW,gai{,4p|~sA%}3N^Ū7|+*䒤iI.ӷuSZy+M$qֱk$6blL;#š 多y]Ϯ|r`kJ%N\Lg$>۫"/ٕ,5'1lJ@$ 8Hy% {0brEφw+ ZWb6!azt1܃bά1ֿ B]M8ZvFl_ޒsR!^C&i{!DpOK cm=]?Åu&ޠ]Ʃ`od$T&i9짝4գK,v'S fL2^#w-;N+9&(!:)0;`hZVDhـ0/na׹ʴ]C$-i53{JS3I&If.ҟK}:IfֵàojUc5Rp]T2UݶDfȶ\h96*` Bt-^̰:ޜ]CŽ A"3Gy!O jGCVxFRH;ѹ%-o1ljeGMeF>Nv9"F=\hug7ֱkDmxRӮQTq;JT %g3ztpT *$kd3=_#G|şɊ ǍŞ*u)sS s+hV;'J W5J)Scנźm#TbVkpkN IDATSw\' ڱfJ=PwLh]Zl|X).%xe<_jP7Sve[ =)F{.\h',TPm)nv k*cv &ÝC/śk|@ )%͟v+s)MաV5V5ȊEp+ra<܅(eUʖO5tIqS ޲Ph[B} p{#dg>2B8iY>O4LptY ,+Xm#8kOi>}MH4urlBLV$>' 7(}( FU;&(Nu.~';ɞT5)#/ִYHbVuk{ CpQuu'>4gT>:ajW/B|NR}>ڇ LKxsv Z')<'Ry96{P=|2/W!]2}S4L'F֌ g>IS?7FJ5K+2)a*+ծaE%yKsY̖w4J 7't1 wn4jR W'5,kF8Ls"qHrH`yDe+t%GһF cWMFe E0ɧR,z1g7f`r~r[6^M\8ƻQ 6ޚ]#6n|ee[a N½%).Ǒ-4Dt7}E9y;O*xm vT ڝ8\v܊x׎*"KuWe'U[W7{1RDn*3V'g/(8Oc\1zri:vV{sQ3N,W5UAYjLsy_9Y%߭YwZfcMg͌l:uI]rj`JF:r% cuP_6oͮ;azVgώ_S8]>ua9?eu | 6uv5vؿ?J\xNj1j'sHU`v5]v *k`W]wǶX]v *k`W] U`v5]v *k`W] U`v5]v *k`W] U`v5]v *k`W] U`5Ə.n!@ #ۚ4k@ @޿lk `@ yI/M@ ˶&6 @ /ۚ4k@ @޿lk `@ yI/M@ ˶&6 @ /ۚ4k@ @޿lk `@ yI/M@ ˶&6 @ /ۚ4k@ @޿lk `@ yI/M@ ˶&6 @ /ۚ4k@ @޿lk `@ yI/M@ ˶&6 @ /ۚ4k@ @޿lk `@ yI/M_j}__5zmt_`t@ 'ۚ4;ia?f~oI?Y"^?7ۻo?|S_OA}>ok @ jlk}ȿCmx?=[e}UbPo??(PL|#/ڮ1QE?@ &c `]㟾$z&/'[1fنîKS1?̮Ao~x]?E@ 7*s s{vi0j+N;? ;D[(~Oh5^]u_e?O; @ Y.y ೱ{v eMwƿ˲̮1y^X_'o_}Ə'w"i@ *ܓ]kSěP~ï[QxwKڏOv&_]cE5Oܸ=xkL'l@ U>DdjJڊS$mLyH꾱̮q1S6ǟ?6^ ÕN#8]z@ ɆƎ5&|_j6-$o5(MF_b~vb:ߦ W?Uޘ<Eٯ~_k@ H|9.n5VW7ݷ:\~;~υ@ ,mMzlf׀@ @ʲI/M@ ˶&6 @ /ۚ4k@ @޿lk `@ yI/M@ ˶&6 @ /ۚ4k@ @޿lk `@ yI/M@ ˶&6 @ /ۚ4k@ @޿lk `@ yI/M@ ˶&6 @ /ۚ4k@ @޿lk `@ yI/M@ ˶&6 @ /ۚ4k@ @޿lk `@ yI/M@ ˶&6֤ٚ]|.5i`mMzl5g[^v ֤]5i`mMzl5g[^v ֤yv߾ok~}k R>ٰ7g\UYV~`lk `ӼYAGG?xz~o-l,_$_#֕/?ۻ6m~u颔 [_޺ )R uAݼH5|4&Ukb|i>L2I&Z5a1d99sF|wq_nzg͘1s\w'G<9ćk]߲O˯N7V;淸SNN ,fgXM֯t`|taSBu =vG7k!mUp4 3A6h6Rk o3S/^L6/af#S-bzױP}1/R?L%+ֳq_}+ZIhƹ/Oja06~~1S/imu8^}987ZR+t &;:֟k_5+rt%e 3i3׃y1{[SoܡnT/|MRG~4='N o,}ԃ;FI>)LOضޘBV.K<^}klMG!ܰ,Vod \SM[nidʦTīRȴ^7Z IL.g56^MУw6h_e,yzņ>rw\{1s_3#5yW%/ Sxt]?TŒk u8fO'ބg#}G}+\V*֧F~wG7ǦCG'Fmg9퍙!k#hFUY|\}:6?}MbdSyαڙ;rكXK 2r А=J>̆|:ƕEE=h3ŜXl?~tЇv%|^>,Ӝk܃?43;V){bfR/6f+\R*֯4'VG= ̩mlq ɎmdkߦBW7/ȭ?~HsE23q#ā5NBrmc_^ekw:a\r+tK]YB1 e&mICϾC ?m4G=|_x7றoS͌O7۪ȃP6oa+\B*֧SuzV&Q 䖇+I5 ;F#S=;22$Y|S3ɯPŚk)k䋏4ngC\MqYG*7ME7إ*cyHy9om{y on[s "уGz#1;GfK@PWW^u\C?lgl_"(?)Up4M_͛IJ6j٢4ZbIn-F2+,hek)~(WZ#Շ?|0dtݱV 8]ẇ5N~J}gRf7߅ywa^)rM8hyش~g7o>a؞y(ٙ"6dWYBo'?2t+mIܦ"gGT{1;+,})%ś?5Up;B*FۯW^u#׫J/ຑkUp5p nzU\7r ~[r4pSzU\߉\8p*r T5Sk"NE\8?N-_ޕWm5G*B?cګ5iB P ,r gj=|$v Y5Dѿr\4 k7BlHlNlԺNESz9 .@ԜVL}JT,D RņFuWP.1r/]>g[ 9&Ы!r>FE+6*6] Ыs-Հk:u"S@'FŦ{^;BszU}Ps`MWC}jmm6 s-Fu5C\8}\ !tBpr>EAk:!8rΧլ+w\u*~I~5\r @'\#x|tdxxd oQ? \k+YGk"}Ko Ll!pv5k\x~:s>C\8}kG]/<{/eQ{+D5]r/ Yr= \Id N)-n'5]_Q \仇.y0׾`5R{[YjfVv۱Fd(_(U˥axj3Ck5)'+ZljfE[f݆5|o jKq7\cX@:C8_g]d0"˭s 2=3(}Kst.sN@PN/%s#hlKe#zoގkՠh_/w-U_@,\h}ƑƊ5NiOUHU'[=4msbU*ɔW*O2ĕeuﵱAO(*1ۓ}z&ގ(z3|{IDAT|XnGO3 3pڔ\๊,; Kl.1Vߕk\#i|ە/\c17sV?WʅqO؍oY$k\Ô J|ǖƧ>FKa<1Reeq~aQK%s%^zmV#NA82xsbLf9k{Y:QE9NF)[A}K%}P3!*A4+g*빙7s 3Z(3psOQe|PF'?|-ʀZ]y6s)6@ _b9xzxx9qZVWUҩXJͬ,/T2RΝ-G,.Ѝ{OҲ7OFF.QSY=0ܛ_Fv5j{Z^U{r REAk:!8F"נBs}5k\OJ}&6*6] Ыs-Հk:u"Sh+6*6] Ыs-Հk:u"S\.ōWy usՀk:"_bFE cF 96Cntm5@OU zS tE˻ 7Mb{}=UL8z^GIpjT\?:FUý>g P ,r t!S:=fr_p5Sk"NE\8p*r T5S,H7W^up*r T5Sk"NE\8p*r T5Sk"NE\8p*r T5Sk"NE\8p*r T5Sk"N\Rֽh$[Y!Xy6-'{Iѳ\PAEKㅞt\ҿx\\r T5Sk"NE\8p*r a?]zg5ⲊZ\m-xڜrϵ\_ិu'ZtEqOsd^5n`rtMr <3]o\y3&.wL$z̓BĻ[ u^ Y0~,u^ۧKWݫ+.w)x+~Mr C+?΢G'˛km"z™nTe"m~& ^.-MOs=߫+cJИoh| .Rѣm=e֣qZ=av#ˉ̮܇'_2-}p~6~f3-h`H*+_x};v廭xu}2߽&tg ~mjq>__6[[&G\cj~ŹFDbrH\LU>ɏB~6_ˏY9r]nHZf4|VSgvpe=`d5]ȡ:e)(K`5#.gR+*I8]rr?]1.7k'3q?KW3o7+,]$jb<[3e-9WFp^o\kmwmfjh>n4ڗӕr8Ԍ.G_&3KCOA43g6YsV82tpZ𵲺Mgg;SUшm!D|esXzF~ltTZMz)ssÏA{_-_vs 4rKFTCH fơ֠<*wuNiU\2/zT'b_tB=x/+:}Fz̹X`tcxs!^}*8*ʋNTʓcv8˓'gЂBV+ht5"[c_wmGǼT%1\0/M1#׸r z#zW1GBtgْR\]{vzTe Ә~"99:\wZeb[iT¾v5D6\\PEuoU\n\Mc5qtV?t+UJgqOBcMn/E.k5j-r݌n B!fěvQ\\71[i=װBlhRǯ)-ݫ%#9Wr|DN(iuө%!#>XϪbFep8Fz$"g7Mp"Wn[5.\6t-z< $c-jMf4|h;1y觰i7ϡD,s(CF7;,O޽҇gAxQ!d3sr KF1:DĖd@3zqfޕzxڒxJ^Kt5tEd3RܕAFu3`ɭTx2kqq^%T^9rui996?>NԙQ;5l;Pt5[UqYQQ] SC$5~k9ϡld_9'8pԱ g%Yh7bFq.Ƕk6&OOhS[_+_55q0u&f=רΣkdž(3r;b[Ѻ[OgxkӽPoF깆1/\{a̪v^Njp Tf'Ro*?]03` oCmF'wV?g4M#1רoڭcU72fc zv>D'P;\X(uBrtcr k~^u5ZEkƧ~՘ Gr 5AaM|]TʅS[Q{W}(;.;`f|UhCxt8FF=ٵ5Twj#()c(lJjΖ|,CLG{r cugj}_;5/Ӳ鎹F >p%czУW9X3t&b=}EqD\t8`Bt5Ekvq\܌,+* MVxZH|TwGjH]NG #ADFzxt8++ܱ[zFڷ$s3`M3_T>Jз;SոuW;pYҖ49h-Ʌ6Ȳu ~ 5HvGǻꡌG!wկ6%esM{RLAQߕXΝ-o_D7-F|3r p9vQ-@ON7n2z@Xx,!>[|jBX6BHl,cQG@=x~c1_Z|uc??M?=Ů_R[Ri+c%̗ݖq5ޞ̒kS~&7zcgeˀRοƁ˗l,k;tnX/V^"8lPD5x ͥK+ʅW%v"b!^LOοܷg&tf%'=jtL͓/-.Itmk@wt\>ע+r ?{cI\b.wLkt;LsOKZtE"Z+LsM₊ސrϵ8p*r T5Sk"NE\8p*r T\,+ BrJN6p:Ѻm|ҿxgFMEgggiduߓP\{k"NE\8p*r T5Sk"NE\8p*r T5Sk"NE\8p*r T5Sk"NE\8p*r T5Sk"NE\8p*r T5SkOM,tEXtSoftwareYandex.Disk (http://disk.yandex.ru)\ IENDB`django-uwsgi-0.2.2/docs/contributing.rst0000755000076600000240000000017113332714254021300 0ustar MechanisMstaff00000000000000Contributing ============ .. _Code Style: Code Style ---------- .. _Docs: Docs ---- .. _Tests: Tests ----- django-uwsgi-0.2.2/docs/features.rst0000755000076600000240000000162513332714254020414 0ustar MechanisMstaff00000000000000Features ======== * Admin page with `uWSGI`_ stats (options to reload/stop uWSGI, clear uWSGI cache) * uWSGI :doc:`cache` for Django * uWSGI :doc:`email` for Django(send emails via uWSGI's `spooler`_) * Debug Panel for `django-debug-toolbar`_ (offers same functions as admin page) * Django template loader for `embedded`_ into uWSGI files * Django :doc:`command` ``runuwsgi`` (with live autoreload when DEBUG is True) * uWSGI config generator * Django CBV Mixins based on uWSGI decorators * Forms to send log messages and signals to uWSGI via admin interface Some features are not added into repo or not yet implemented(See :doc:`todo`) .. _uWSGI: http://uwsgi-docs.readthedocs.org/en/latest/ .. _django-debug-toolbar: http://django-debug-toolbar.readthedocs.org/en/latest/ .. _spooler: http://uwsgi-docs.readthedocs.org/en/latest/Spooler.html .. _embedded: http://uwsgi-docs.readthedocs.org/en/latest/Embed.htmldjango-uwsgi-0.2.2/docs/todo.rst0000755000076600000240000000054313332714254017541 0ustar MechanisMstaff00000000000000Todo ==== * Tests * uWSGI config generator * Improve `Docs `_ * Translations? * Good cache panel * Ability to add cronjobs/filemonitors via admin interface * Options for sendfile if uwsgi serving files Some code is borrowed from projects I did earlier and some code is still not added yet, but does exists in my projects. django-uwsgi-0.2.2/docs/Makefile0000755000076600000240000001520213332714254017500 0ustar MechanisMstaff00000000000000# Makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = BUILDDIR = _build # User-friendly check for sphinx-build ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) $(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) endif # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . # the i18n builder cannot share the environment and doctrees with the others I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" @echo " dirhtml to make HTML files named index.html in directories" @echo " singlehtml to make a single large HTML file" @echo " pickle to make pickle files" @echo " json to make JSON files" @echo " htmlhelp to make HTML files and a HTML help project" @echo " qthelp to make HTML files and a qthelp project" @echo " devhelp to make HTML files and a Devhelp project" @echo " epub to make an epub" @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " latexpdf to make LaTeX files and run them through pdflatex" @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" @echo " text to make text files" @echo " man to make manual pages" @echo " texinfo to make Texinfo files" @echo " info to make Texinfo files and run them through makeinfo" @echo " gettext to make PO message catalogs" @echo " changes to make an overview of all changed/added/deprecated items" @echo " xml to make Docutils-native XML files" @echo " pseudoxml to make pseudoxml-XML files for display purposes" @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" clean: rm -rf $(BUILDDIR)/* html: $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." singlehtml: $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml @echo @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." pickle: $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle @echo @echo "Build finished; now you can process the pickle files." json: $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json @echo @echo "Build finished; now you can process the JSON files." htmlhelp: $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp @echo @echo "Build finished; now you can run HTML Help Workshop with the" \ ".hhp project file in $(BUILDDIR)/htmlhelp." qthelp: $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp @echo @echo "Build finished; now you can run "qcollectiongenerator" with the" \ ".qhcp project file in $(BUILDDIR)/qthelp, like this:" @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/django-uwsgi.qhcp" @echo "To view the help file:" @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/django-uwsgi.qhc" devhelp: $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp @echo @echo "Build finished." @echo "To view the help file:" @echo "# mkdir -p $$HOME/.local/share/devhelp/django-uwsgi" @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/django-uwsgi" @echo "# devhelp" epub: $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub @echo @echo "Build finished. The epub file is in $(BUILDDIR)/epub." latex: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." @echo "Run \`make' in that directory to run these through (pdf)latex" \ "(use \`make latexpdf' here to do that automatically)." latexpdf: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through pdflatex..." $(MAKE) -C $(BUILDDIR)/latex all-pdf @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." latexpdfja: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through platex and dvipdfmx..." $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." text: $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text @echo @echo "Build finished. The text files are in $(BUILDDIR)/text." man: $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man @echo @echo "Build finished. The manual pages are in $(BUILDDIR)/man." texinfo: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." @echo "Run \`make' in that directory to run these through makeinfo" \ "(use \`make info' here to do that automatically)." info: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo "Running Texinfo files through makeinfo..." make -C $(BUILDDIR)/texinfo info @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." gettext: $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale @echo @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." changes: $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes @echo @echo "The overview file is in $(BUILDDIR)/changes." linkcheck: $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in $(BUILDDIR)/linkcheck/output.txt." doctest: $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest @echo "Testing of doctests in the sources finished, look at the " \ "results in $(BUILDDIR)/doctest/output.txt." xml: $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml @echo @echo "Build finished. The XML files are in $(BUILDDIR)/xml." pseudoxml: $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml @echo @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." django-uwsgi-0.2.2/docs/configuration.rst0000755000076600000240000000055613332714254021447 0ustar MechanisMstaff00000000000000Configuration ============= Adding django-uwsgi to your project ----------------------------------- Add ``'django_uwsgi',`` to your ``INSTALLED_APPS`` in ``settings.py``: .. code-block:: py INSTALLED_APPS += ['django_uwsgi',] Add django_uwsgi into ``urls.py``: .. code-block:: py urlpatterns += [url(r'^admin/uwsgi/', include('django_uwsgi.urls')),] django-uwsgi-0.2.2/docs/conf.py0000755000076600000240000000254613332714254017346 0ustar MechanisMstaff00000000000000# -*- coding: utf-8 -*- import sys import os on_rtd = os.environ.get('READTHEDOCS', None) == 'True' if not on_rtd: import sphinx_rtd_theme html_theme = 'sphinx_rtd_theme' html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] sys.path.insert(0, os.path.abspath('..')) from django_uwsgi import __version__ extensions = [ 'sphinx.ext.intersphinx', 'releases', ] releases_issue_uri = "https://github.com/unbit/django-uwsgi/issues/%s" releases_release_uri = "https://github.com/unbit/django-uwsgi/tree/%s" templates_path = ['_templates'] source_suffix = '.rst' master_doc = 'index' project = u'django-uwsgi' copyright = u'2016, Eugene MechanisM' version = __version__ release = __version__ exclude_patterns = ['_build'] pygments_style = 'sphinx' html_static_path = ['_static'] htmlhelp_basename = 'django-uwsgidoc' latex_elements = { } latex_documents = [ ('index', 'django-uwsgi.tex', u'django-uwsgi Documentation', u'Eugene MechanisM', 'manual'), ] man_pages = [ ('index', 'django-uwsgi', u'django-uwsgi Documentation', [u'Eugene MechanisM'], 1) ] texinfo_documents = [ ('index', 'django-uwsgi', u'django-uwsgi Documentation', u'Eugene MechanisM', 'django-uwsgi', 'One line description of project.', 'Miscellaneous'), ] intersphinx_mapping = {'uwsgi': ('http://uwsgi-docs.readthedocs.org/en/latest/', None)} django-uwsgi-0.2.2/docs/requirements-docs.txt0000755000076600000240000000006613332714254022254 0ustar MechanisMstaff00000000000000sphinx==1.7.6 releases==1.6.1 sphinx-rtd-theme==0.4.1 django-uwsgi-0.2.2/docs/cache.rst0000644000076600000240000000145413332714254017636 0ustar MechanisMstaff00000000000000Cache Backend ============= Installation ------------ change settings to: .. code-block:: py CACHES = { 'default': { 'BACKEND': 'django_uwsgi.cache.UwsgiCache', # and optionally, if you used a different cache name 'LOCATION': 'foobar' } } django-confy ------------ if you're using `django-confy `_:, you can use url like: .. code-block:: sh CACHE_URL=uwsgi://foobar Settings -------- ``UWSGI_CACHE_FALLBACK`` - ``False`` - raises Exception if ``uwsgi`` cannot be imported. - ``True`` (default) - if uwsgi is not importable this cache backend will alias to LocMemCache. Note that south or other management commands might try to load the cache backend so this is why it's the default. django-uwsgi-0.2.2/docs/decorators.rst0000755000076600000240000002330413332714254020741 0ustar MechanisMstaff00000000000000Decorators ========== `The uWSGI API `_ is very low-level, as it must be language-independent. That said, being too low-level is not a Good Thing for many languages, such as Python. Decorators are, in our humble opinion, one of the more kick-ass features of Python, so in the uWSGI source tree you will find a module exporting a bunch of decorators that cover a good part of the uWSGI API. Notes ----- Signal-based decorators execute the signal handler in the first available worker. If you have enabled the spooler you can execute the signal handlers in it, leaving workers free to manage normal requests. Simply pass ``target='spooler'`` to the decorator. .. code-block:: py @timer(3, target='spooler') def hello(signum): print("hello") Example: a Django session cleaner and video encoder --------------------------------------------------- Let's define a :file:`tasks.py` module and put it in the Django project directory. .. code-block:: py import os from django.contrib.sessions.models import Session from django_uwsgi.decorators import cron, spool @cron(40, 2, -1, -1, -1) def clear_django_session(num): print("it's 2:40 in the morning: clearing django sessions") Session.objects.all().delete() @spool def encode_video(arguments): os.system("ffmpeg -i \"%s\" image%%d.jpg" % arguments['filename']) The session cleaner will be executed every day at 2:40, to enqueue a video encoding we simply need to spool it from somewhere else. .. code-block:: py from tasks import encode_video def index(request): # launching video encoding encode_video.spool(filename=request.POST['video_filename']) return render_to_response('enqueued.html') Now run uWSGI with the spooler enabled: .. code-block:: ini [uwsgi] ; a couple of placeholder django_projects_dir = /var/www/apps my_project = foobar ; chdir to app project dir and set pythonpath chdir = %(django_projects_dir)/%(my_project) pythonpath = %(django_projects_dir) ; load django module = django.core.handlers:WSGIHandler() env = DJANGO_SETTINGS_MODULE=%(my_project).settings ; enable master master = true ; 4 processes should be enough processes = 4 ; enable the spooler (the mytasks dir must exist!) spooler = %(chdir)/mytasks ; load the task.py module import = task ; bind on a tcp socket socket = 127.0.0.1:3031 The only especially relevant option is the ``import`` one. It works in the same way as ``module`` but skips the WSGI callable search. You can use it to preload modules before the loading of WSGI apps. You can specify an unlimited number of '''import''' directives. django_uwsgi.decorators API reference ----------------------------- .. default-domain:: py .. module:: django_uwsgi.decorators .. function:: postfork(func) uWSGI is a preforking (or "fork-abusing") server, so you might need to execute a fixup task after each ``fork()``. The ``postfork`` decorator is just the ticket. You can declare multiple ``postfork`` tasks. Each decorated function will be executed in sequence after each ``fork()``. .. code-block:: py @postfork def reconnect_to_db(): myfoodb.connect() @postfork def hello_world(): print("Hello World") .. function:: spool(func) The uWSGI `spooler `_ can be very useful. Compared to Celery or other queues it is very "raw". The ``spool`` decorator will help! .. code-block:: py @spool def a_long_long_task(arguments): print(arguments) for i in xrange(0, 10000000): time.sleep(0.1) @spool def a_longer_task(args): print(args) for i in xrange(0, 10000000): time.sleep(0.5) # enqueue the tasks a_long_long_task.spool(foo='bar',hello='world') a_longer_task.spool({'pippo':'pluto'}) The functions will automatically return ``uwsgi.SPOOL_OK`` so they will be executed one time independently by their return status. .. XXX: What does the above mean? .. function:: spoolforever(func) Use ``spoolforever`` when you want to continuously execute a spool task. A ``@spoolforever`` task will always return ``uwsgi.SPOOL_RETRY``. .. code-block:: py @spoolforever def a_longer_task(args): print(args) for i in xrange(0, 10000000): time.sleep(0.5) # enqueue the task a_longer_task.spool({'pippo':'pluto'}) .. function:: spoolraw(func) Advanced users may want to control the return value of a task. .. code-block:: py @spoolraw def a_controlled_task(args): if args['foo'] == 'bar': return uwsgi.SPOOL_OK return uwsgi.SPOOL_RETRY a_controlled_task.spool(foo='bar') .. function:: rpc("name", func) uWSGI `RPC `_ is the fastest way to remotely call functions in applications hosted in uWSGI instances. You can easily define exported functions with the @rpc decorator. .. code-block:: py @rpc('helloworld') def ciao_mondo_function(): return "Hello World" .. function:: signal(num)(func) You can register signals for the `signal framework `_ in one shot. .. code-block:: py @signal(17) def my_signal(num): print("i am signal %d" % num) .. function:: timer(interval, func) Execute a function at regular intervals. .. code-block:: py @timer(3) def three_seconds(num): print("3 seconds elapsed") .. function:: rbtimer(interval, func) Works like @timer but using red black timers. .. XXX: What the hell does _that_ mean? .. function:: cron(min, hour, day, mon, wday, func) Easily register functions for the `CronInterface `_. .. code-block:: py @cron(59, 3, -1, -1, -1) def execute_me_at_three_and_fiftynine(num): print("it's 3:59 in the morning") Since 1.2, a new syntax is supported to simulate ``crontab``-like intervals (every Nth minute, etc.). ``*/5 * * * *`` can be specified in uWSGI like thus: .. code-block:: py @cron(-5, -1, -1, -1, -1) def execute_me_every_five_min(num): print("5 minutes, what a long time!") .. function:: filemon(path, func) Execute a function every time a file/directory is modified. .. code-block:: py @filemon("/tmp") def tmp_has_been_modified(num): print("/tmp directory has been modified. Great magic is afoot") .. function:: erlang(process_name, func) Map a function as an `Erlang ` process. .. code-block:: py @erlang('foobar') def hello(): return "Hello" .. function:: thread(func) Mark function to be executed in a separate thread. .. important:: Threading must be enabled in uWSGI with the ``enable-threads`` or ``threads `` option. .. code-block:: py @thread def a_running_thread(): while True: time.sleep(2) print("i am a no-args thread") @thread def a_running_thread_with_args(who): while True: time.sleep(2) print("Hello %s (from arged-thread)" % who) a_running_thread() a_running_thread_with_args("uWSGI") You may also combine ``@thread`` with ``@postfork`` to spawn the postfork handler in a new thread in the freshly spawned worker. .. code-block:: py @postfork @thread def a_post_fork_thread(): while True: time.sleep(3) print("Hello from a thread in worker %d" % uwsgi.worker_id()) .. function:: lock(func) This decorator will execute a function in fully locked environment, making it impossible for other workers or threads (or the master, if you're foolish or brave enough) to run it simultaneously. Obviously this may be combined with @postfork. .. code-block:: py @lock def dangerous_op(): print("Concurrency is for fools!") .. function:: mulefunc([mulespec], func) Offload the execution of the function to a `mule `. When the offloaded function is called, it will return immediately and execution is delegated to a mule. .. code-block:: py @mulefunc def i_am_an_offloaded_function(argument1, argument2): print argument1,argument2 You may also specify a mule ID or mule farm to run the function on. Please remember to register your function with a uwsgi import configuration option. .. code-block:: py @mulefunc(3) def on_three(): print "I'm running on mule 3." @mulefunc('old_mcdonalds_farm') def on_mcd(): print "I'm running on a mule on Old McDonalds' farm." .. function:: harakiri(time, func) Starting from uWSGI 1.3-dev, a customizable secondary :term:`harakiri` subsystem has been added. You can use this decorator to kill a worker if the given call is taking too long. .. code-block:: py @harakiri(10) def slow_function(foo, bar): for i in range(0, 10000): for y in range(0, 10000): pass # or the alternative lower level api uwsgi.set_user_harakiri(30) # you have 30 seconds. fight! slow_func() uwsgi.set_user_harakiri(0) # clear the timer, all is well .. _Emperor: http://uwsgi-docs.readthedocs.org/en/latest/Emperor.html django-uwsgi-0.2.2/docs/command.rst0000644000076600000240000000065413332714254020212 0ustar MechanisMstaff00000000000000Management Command ================== runuwsgi -------- .. code-block:: sh python manage.py runuwsgi runuwsgi options: ----------------- http ---- .. code-block:: sh python manage.py runuwsgi http=8000 socket ------ .. code-block:: sh python manage.py runuwsgi socket=/tmp/projectname-uwsgi.sock Other options ------------- Any other options can be passed via environment variables, prefixed with `UWSGI_`django-uwsgi-0.2.2/docs/installation.rst0000755000076600000240000000175113332714254021277 0ustar MechanisMstaff00000000000000Installation ============ django-uwsgi is easy installable via pip: .. code-block:: sh pip install django-uwsgi or clone it from `github `_: .. code-block:: sh git clone https://github.com/unbit/django-uwsgi.git cd django-uwsgi pip install . # or for development pip install -e . By default ``django-uwsgi`` doesn’t installed with uWSGI as requirement. And here are a few known reasons why: * Django project installed into virtualenv and running in `Emperor `_ mode. In this case uWSGI is installed system-wide or into some other virtualenv. * Some devs love to use system package managers like apt and prefer to install uwsgi other way. * you need to build uWSGI with custom profile ex: ``UWSGI_PROFILE=gevent pip install uwsgi`` You can install django-uwsgi with uWSGI by appending [uwsgi] to the install command: .. code-block:: sh pip install django-uwsgi[uwsgi]django-uwsgi-0.2.2/docs/emperor.rst0000644000076600000240000000137713332714254020250 0ustar MechanisMstaff00000000000000Emperor ======= you can use `django_uwsgi.emperor` module if you want to store vassals configs in `PostgreSQL`_ database. Simply add `'django_uwsgi.emperor',` into `INSTALLED_APPS` .. code-block:: py INSTALLED_APPS += ['django_uwsgi.emperor',] .. image:: screenshots/screenshot4.png Populate vassals via django admin interface and start uwsgi with command like: .. code-block:: sh uwsgi --plugin emperor_pg --emperor "pg://host=127.0.0.1 user=foobar dbname=emperor;SELECT name,config,ts FROM vassals WHERE enabled = True" Each time vassal added, removed, updated, enabled or disabled - uwsgi will start/stop it or reload. .. _PostgreSQL: http://uwsgi-docs.readthedocs.org/en/latest/ImperialMonitors.html#pg-scan-a-postgresql-table-for-configurationdjango-uwsgi-0.2.2/docs/changelog.rst0000755000076600000240000000015113332714254020516 0ustar MechanisMstaff00000000000000:orphan: ========= Changelog ========= * :release:`0.1.1 <2015-04-22>` * :release:`0.1.0 <2014-04-10>`django-uwsgi-0.2.2/docs/integrations.rst0000644000076600000240000000130013332714254021267 0ustar MechanisMstaff00000000000000Integrations ============ Django-Debug-Toolbar -------------------- If you're using `django-debug-toolbar`_, you can add: .. code-block:: py DEBUG_TOOLBAR_PANELS += ['django_uwsgi.panels.UwsgiPanel',] .. _django-debug-toolbar: http://django-debug-toolbar.readthedocs.org/en/latest/ .. image:: screenshots/screenshot1.png Wagtail ------- If you're using `Wagtail`_: There is `wagtail_hooks.py` file available and `Wagtail`_ will read it automatically And you don't have to add `django_uwsgi` into urls.py `Wagtail`_ admin interface: .. image:: screenshots/screenshot2.png .. image:: screenshots/screenshot3.png .. image:: screenshots/screenshot4.png .. _Wagtail: http://wagtail.iodjango-uwsgi-0.2.2/docs/screenshots.rst0000644000076600000240000000132113332714254021124 0ustar MechanisMstaff00000000000000Screenshots =========== `django-debug-toolbar `_ panel .. image:: screenshots/screenshot1.png `Wagtail `_ admin interface: .. image:: https://github.com/unbit/django-uwsgi/raw/master/docs/screenshots/screenshot2.png .. image:: https://github.com/unbit/django-uwsgi/raw/master/docs/screenshots/screenshot3.png Emperor's Vassal Admin Panel .. image:: https://github.com/unbit/django-uwsgi/raw/master/docs/screenshots/screenshot4.png `django.contrib.admin `_ interface .. image:: https://github.com/unbit/django-uwsgi/raw/master/docs/screenshots/screenshot5.pngdjango-uwsgi-0.2.2/CONTRIBUTORS0000755000076600000240000000053713332714401016767 0ustar MechanisMstaff00000000000000Roberto De Ioris, Unbit, Eugene MechanisM, MechanisM, Ionel Cristian Mărieș, Jayson Reis, jaysonsantos, Alan Justino da Silva, alanjds, Michael Fladischer, fladi, Paul Bailey, pizzapanther Arkadiusz Adamski, ar4sdjango-uwsgi-0.2.2/setup.py0000755000076600000240000000337513332714254016632 0ustar MechanisMstaff00000000000000import os try: from setuptools import setup, find_packages except ImportError: from distutils.core import setup from django_uwsgi import __version__ os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir))) setup( name='django-uwsgi', version=__version__, description='uWSGI stuff for Django projects', long_description=open('README.rst').read(), url='http://github.com/unbit/django-uwsgi', author='Eugene MechanisM', author_email='eugene@mechanism.pro', license='MIT', zip_safe=False, classifiers=[ 'Development Status :: 4 - Beta', 'Framework :: Django', 'Intended Audience :: Developers', 'Intended Audience :: System Administrators', 'License :: OSI Approved :: MIT License', 'Operating System :: OS Independent', 'Programming Language :: Python', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3.5', 'Framework :: Django', 'Framework :: Django :: 1.9', 'Framework :: Django :: 1.10', 'Topic :: Software Development :: Libraries :: Python Modules', 'Topic :: Internet :: WWW/HTTP :: WSGI', 'Topic :: Internet :: WWW/HTTP :: WSGI :: Application', "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Internet :: WWW/HTTP :: Site Management", "Topic :: Software Development :: Build Tools", "Topic :: Software Development :: Code Generators", 'Topic :: Communications :: Email', 'Framework :: Django', ], keywords='uwsgi, django, mail, cache, template', packages=find_packages(), include_package_data=True, install_requires=[], extras_require={ 'uwsgi': ['uwsgi'], }, ) django-uwsgi-0.2.2/django_uwsgi.egg-info/0000755000076600000240000000000013332715616021262 5ustar MechanisMstaff00000000000000django-uwsgi-0.2.2/django_uwsgi.egg-info/PKG-INFO0000644000076600000240000000634313332715616022365 0ustar MechanisMstaff00000000000000Metadata-Version: 1.1 Name: django-uwsgi Version: 0.2.2 Summary: uWSGI stuff for Django projects Home-page: http://github.com/unbit/django-uwsgi Author: Eugene MechanisM Author-email: eugene@mechanism.pro License: MIT Description: django-uwsgi ~~~~~~~~~~~~ |release| |stats| |lic| .. |release| image:: https://img.shields.io/pypi/v/django-uwsgi.svg :target: https://pypi.python.org/pypi/django-uwsgi .. |stats| image:: https://img.shields.io/pypi/dm/django-uwsgi.svg :target: https://pypi.python.org/pypi/django-uwsgi .. |lic| image:: https://img.shields.io/pypi/l/django-uwsgi.svg :target: https://pypi.python.org/pypi/django-uwsgi Django related examples/tricks/modules for uWSGI Screenshots ~~~~~~~~~~~ `django-debug-toolbar `_ panel .. image:: https://github.com/unbit/django-uwsgi/raw/master/docs/screenshots/screenshot1.png `Wagtail `_ admin interface: .. image:: https://github.com/unbit/django-uwsgi/raw/master/docs/screenshots/screenshot2.png .. image:: https://github.com/unbit/django-uwsgi/raw/master/docs/screenshots/screenshot3.png Emperor's Vassal Admin Panel .. image:: https://github.com/unbit/django-uwsgi/raw/master/docs/screenshots/screenshot4.png `django.contrib.admin `_ interface .. image:: https://github.com/unbit/django-uwsgi/raw/master/docs/screenshots/screenshot5.png Documentation ~~~~~~~~~~~~~ `Read the documentation at rtfd.org `_ Contributors ~~~~~~~~~~~~ See `CONTRIBUTORS `_ License ~~~~~~~ `MIT `_ Keywords: uwsgi,django,mail,cache,template Platform: UNKNOWN Classifier: Development Status :: 4 - Beta Classifier: Framework :: Django Classifier: Intended Audience :: Developers Classifier: Intended Audience :: System Administrators Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3.5 Classifier: Framework :: Django Classifier: Framework :: Django :: 1.9 Classifier: Framework :: Django :: 1.10 Classifier: Topic :: Software Development :: Libraries :: Python Modules Classifier: Topic :: Internet :: WWW/HTTP :: WSGI Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content Classifier: Topic :: Internet :: WWW/HTTP :: Site Management Classifier: Topic :: Software Development :: Build Tools Classifier: Topic :: Software Development :: Code Generators Classifier: Topic :: Communications :: Email Classifier: Framework :: Django django-uwsgi-0.2.2/django_uwsgi.egg-info/not-zip-safe0000644000076600000240000000000113332715616023510 0ustar MechanisMstaff00000000000000 django-uwsgi-0.2.2/django_uwsgi.egg-info/SOURCES.txt0000644000076600000240000000316613332715616023154 0ustar MechanisMstaff00000000000000CONTRIBUTORS LICENSE MANIFEST.in README.rst setup.cfg setup.py django_uwsgi/__init__.py django_uwsgi/apps.py django_uwsgi/cache.py django_uwsgi/compat.py django_uwsgi/decorators.py django_uwsgi/mail.py django_uwsgi/panels.py django_uwsgi/stats.py django_uwsgi/tasks.py django_uwsgi/template.py django_uwsgi/urls.py django_uwsgi/views.py django_uwsgi/wagtail_compat.py django_uwsgi/wagtail_hooks.py django_uwsgi.egg-info/PKG-INFO django_uwsgi.egg-info/SOURCES.txt django_uwsgi.egg-info/dependency_links.txt django_uwsgi.egg-info/not-zip-safe django_uwsgi.egg-info/requires.txt django_uwsgi.egg-info/top_level.txt django_uwsgi/emperor/__init__.py django_uwsgi/emperor/admin.py django_uwsgi/emperor/apps.py django_uwsgi/emperor/models.py django_uwsgi/emperor/wagtail_hooks.py django_uwsgi/emperor/migrations/0001_initial.py django_uwsgi/emperor/migrations/__init__.py django_uwsgi/management/__init__.py django_uwsgi/management/commands/__init__.py django_uwsgi/management/commands/runuwsgi.py django_uwsgi/templates/uwsgi/panel.html django_uwsgi/templates/uwsgi/uwsgi.html django_uwsgi/templates/uwsgi/wagtail_dashboard_item.html django_uwsgi/templates/uwsgi/wagtail_uwsgi.html docs/Makefile docs/cache.rst docs/changelog.rst docs/command.rst docs/conf.py docs/configuration.rst docs/contributing.rst docs/decorators.rst docs/email.rst docs/emperor.rst docs/features.rst docs/index.rst docs/installation.rst docs/integrations.rst docs/requirements-docs.txt docs/screenshots.rst docs/todo.rst docs/screenshots/screenshot1.png docs/screenshots/screenshot2.png docs/screenshots/screenshot3.png docs/screenshots/screenshot4.png docs/screenshots/screenshot5.pngdjango-uwsgi-0.2.2/django_uwsgi.egg-info/requires.txt0000644000076600000240000000001713332715616023660 0ustar MechanisMstaff00000000000000 [uwsgi] uwsgi django-uwsgi-0.2.2/django_uwsgi.egg-info/top_level.txt0000644000076600000240000000001513332715616024010 0ustar MechanisMstaff00000000000000django_uwsgi django-uwsgi-0.2.2/django_uwsgi.egg-info/dependency_links.txt0000644000076600000240000000000113332715616025330 0ustar MechanisMstaff00000000000000 django-uwsgi-0.2.2/setup.cfg0000644000076600000240000000014513332715616016731 0ustar MechanisMstaff00000000000000[metadata] description-file = README.rst [egg_info] tag_build = tag_date = 0 tag_svn_revision = 0 django-uwsgi-0.2.2/README.rst0000755000076600000240000000300713332714254016577 0ustar MechanisMstaff00000000000000django-uwsgi ~~~~~~~~~~~~ |release| |stats| |lic| .. |release| image:: https://img.shields.io/pypi/v/django-uwsgi.svg :target: https://pypi.python.org/pypi/django-uwsgi .. |stats| image:: https://img.shields.io/pypi/dm/django-uwsgi.svg :target: https://pypi.python.org/pypi/django-uwsgi .. |lic| image:: https://img.shields.io/pypi/l/django-uwsgi.svg :target: https://pypi.python.org/pypi/django-uwsgi Django related examples/tricks/modules for uWSGI Screenshots ~~~~~~~~~~~ `django-debug-toolbar `_ panel .. image:: https://github.com/unbit/django-uwsgi/raw/master/docs/screenshots/screenshot1.png `Wagtail `_ admin interface: .. image:: https://github.com/unbit/django-uwsgi/raw/master/docs/screenshots/screenshot2.png .. image:: https://github.com/unbit/django-uwsgi/raw/master/docs/screenshots/screenshot3.png Emperor's Vassal Admin Panel .. image:: https://github.com/unbit/django-uwsgi/raw/master/docs/screenshots/screenshot4.png `django.contrib.admin `_ interface .. image:: https://github.com/unbit/django-uwsgi/raw/master/docs/screenshots/screenshot5.png Documentation ~~~~~~~~~~~~~ `Read the documentation at rtfd.org `_ Contributors ~~~~~~~~~~~~ See `CONTRIBUTORS `_ License ~~~~~~~ `MIT `_